diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..f3b46a42 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.github/workflows/build-arduino-esp.yml b/.github/workflows/build-arduino-esp.yml new file mode 100644 index 00000000..c9b49ee6 --- /dev/null +++ b/.github/workflows/build-arduino-esp.yml @@ -0,0 +1,46 @@ +name: Build Arduino ESP Examples + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + # Build on Mondays at 9am PST every week + - cron: '0 17 * * 1' + +jobs: + build-arduino-esp: + runs-on: ubuntu-24.04 + container: espressif/idf:v5.4 + strategy: + fail-fast: false + matrix: + example: [arduino-esp32-led-blink-sdk, arduino-esp32-wifi-scan-sdk] + swift: [swift-DEVELOPMENT-SNAPSHOT-2025-03-17-a] + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install apt dependencies + run: | + apt-get -qq update + apt-get -qq -y install pkg-config libstdc++6 + + - name: Install ${{ matrix.swift }} + run: | + wget -q https://download.swift.org/development/ubuntu2404/${{ matrix.swift }}/${{ matrix.swift }}-ubuntu24.04.tar.gz + tar xzf ${{ matrix.swift }}-ubuntu24.04.tar.gz + export PATH="`pwd`/${{ matrix.swift }}-ubuntu24.04/usr/bin/:$PATH" + echo "PATH=$PATH" >> $GITHUB_ENV + swiftc --version + + - name: Build ${{ matrix.example }} + run: | + cd $IDF_PATH + . ./export.sh + cd - + cd ${{ matrix.example }} + idf.py set-target esp32c6 + idf.py build diff --git a/.github/workflows/build-pico-sdk.yml b/.github/workflows/build-pico-sdk.yml index ab6c6310..25ec50ed 100644 --- a/.github/workflows/build-pico-sdk.yml +++ b/.github/workflows/build-pico-sdk.yml @@ -20,6 +20,8 @@ jobs: board: pico - name: pico-w-blink-sdk board: pico_w + - name: harmony + board: pico_w swift: [swift-DEVELOPMENT-SNAPSHOT-2024-12-04-a] steps: @@ -41,8 +43,8 @@ jobs: - name: Install GNU ARM toolchain run: | ARCH=`uname -m` - curl -sL https://developer.arm.com/-/media/Files/downloads/gnu/13.3.rel1/binrel/arm-gnu-toolchain-13.3.rel1-$ARCH-arm-none-eabi.tar.xz -O - tar xf arm-gnu-toolchain-13.3.rel1-$ARCH-arm-none-eabi.tar.xz + curl -sL https://developer.arm.com/-/media/Files/downloads/gnu/14.2.rel1/binrel/arm-gnu-toolchain-14.2.rel1-$ARCH-arm-none-eabi.tar.xz -O + tar xf arm-gnu-toolchain-14.2.rel1-$ARCH-arm-none-eabi.tar.xz - name: Install ${{ matrix.swift }} run: | @@ -60,12 +62,20 @@ jobs: git submodule update --init --recursive cd .. + - name: Clone Pico Extras + run: | + git clone https://github.com/raspberrypi/pico-extras.git + cd pico-extras + git submodule update --init --recursive + cd .. + - name: Set Pico environment variables run: | ARCH=`uname -m` echo "PICO_BOARD=${{ matrix.example.board }}" >> $GITHUB_ENV echo "PICO_SDK_PATH=`pwd`/pico-sdk" >> $GITHUB_ENV - echo "PICO_TOOLCHAIN_PATH=`pwd`/arm-gnu-toolchain-13.3.rel1-$ARCH-arm-none-eabi" >> $GITHUB_ENV + echo "PICO_EXTRAS_PATH=`pwd`/pico-extras" >> $GITHUB_ENV + echo "PICO_TOOLCHAIN_PATH=`pwd`/arm-gnu-toolchain-14.2.rel1-$ARCH-arm-none-eabi" >> $GITHUB_ENV - name: Build ${{ matrix.example.name }} run: | diff --git a/.github/workflows/build-rpi-baremetal.yml b/.github/workflows/build-rpi-baremetal.yml new file mode 100644 index 00000000..1a3a833b --- /dev/null +++ b/.github/workflows/build-rpi-baremetal.yml @@ -0,0 +1,39 @@ +name: Build Raspberry Pi Baremetal Examples + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + # Build on Mondays at 9am PST every week + - cron: '0 17 * * 1' +jobs: + build-rpi-baremetal: + runs-on: ubuntu-24.04 + strategy: + fail-fast: false + matrix: + example: [rpi5-blink, rpi4b-blink] + swift: [swift-DEVELOPMENT-SNAPSHOT-2024-12-04-a] + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Install apt dependencies + run: sudo apt-get -qq update && sudo apt-get -qq -y install make llvm + + - name: Install ${{ matrix.swift }} + run: | + wget -q https://download.swift.org/development/ubuntu2404/${{ matrix.swift }}/${{ matrix.swift }}-ubuntu24.04.tar.gz + tar xzf ${{ matrix.swift }}-ubuntu24.04.tar.gz + export PATH="`pwd`/${{ matrix.swift }}-ubuntu24.04/usr/bin/:$PATH" + echo "PATH=$PATH" >> $GITHUB_ENV + which swiftc + swiftc --version + + - name: Build ${{ matrix.example }} + run: | + cd ${{ matrix.example }} + make diff --git a/.github/workflows/build-stm.yml b/.github/workflows/build-stm.yml new file mode 100644 index 00000000..d26823bf --- /dev/null +++ b/.github/workflows/build-stm.yml @@ -0,0 +1,46 @@ +name: Build STM32 Examples + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + schedule: + # Build on Mondays at 9am PST every week + - cron: '0 17 * * 1' + +jobs: + build-stm32: + runs-on: ubuntu-24.04 + + strategy: + fail-fast: false + matrix: + example: [stm32-blink] + swift: [swift-DEVELOPMENT-SNAPSHOT-2025-03-04-a] + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: 3.11 + + - name: Install uv + uses: astral-sh/setup-uv@v5 + + - name: Install ${{ matrix.swift }} + run: | + wget -q https://download.swift.org/development/ubuntu2404/${{ matrix.swift }}/${{ matrix.swift }}-ubuntu24.04.tar.gz + tar xzf ${{ matrix.swift }}-ubuntu24.04.tar.gz + export PATH="`pwd`/${{ matrix.swift }}-ubuntu24.04/usr/bin/:$PATH" + echo "PATH=$PATH" >> $GITHUB_ENV + swiftc --version + + - name: Build ${{ matrix.example }} + working-directory: ${{ matrix.example }} + run: | + export STM_BOARD=STM32F746G_DISCOVERY + ./build-elf.sh diff --git a/.swift-format b/.swift-format index 397b0eef..1efd0615 100644 --- a/.swift-format +++ b/.swift-format @@ -23,9 +23,10 @@ "respectsExistingLineBreaks" : true, "rules" : { "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : true, "AlwaysUseLowerCamelCase" : true, "AmbiguousTrailingClosureOverload" : false, - "BeginDocumentationCommentWithOneLineSummary" : false, + "BeginDocumentationCommentWithOneLineSummary" : true, "DoNotUseSemicolons" : true, "DontRepeatTypeInStaticProperties" : true, "FileScopedDeclarationPrivacy" : true, @@ -37,7 +38,7 @@ "NeverUseImplicitlyUnwrappedOptionals" : true, "NoAccessLevelOnExtensionDeclaration" : true, "NoAssignmentInExpressions" : true, - "NoBlockComments" : false, + "NoBlockComments" : true, "NoCasesWithOnlyFallthrough" : true, "NoEmptyTrailingClosureParentheses" : true, "NoLabelsInCasePatterns" : true, @@ -53,7 +54,8 @@ "ReplaceForEachWithForLoop" : true, "ReturnVoidInsteadOfEmptyTuple" : true, "TypeNamesShouldBeCapitalized" : true, - "UseEarlyExits" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : true, "UseLetInEveryBoundCaseVariable" : true, "UseShorthandTypeNames" : true, "UseSingleLinePropertyGetter" : true, diff --git a/.swiftformatignore b/.swiftformatignore new file mode 100644 index 00000000..d4dc651b --- /dev/null +++ b/.swiftformatignore @@ -0,0 +1,4 @@ +./harmony/* +./stm32-lcd-logo/Sources/Application/Registers/* +./stm32-neopixel/Sources/Application/Registers/* +./stm32-uart-echo/Sources/Application/Registers/* diff --git a/README.md b/README.md index ff7051a8..514598f6 100644 --- a/README.md +++ b/README.md @@ -16,17 +16,12 @@ This repository is a set of demonstration projects of **Embedded Swift**. Embedd Each example in this repository contains build and deployment instructions, however there are a couple common steps needed for many of the examples included below: 1. Install the latest downloadable 'main' [Development Snapshot](https://www.swift.org/install/macos/#development-snapshots) from swift.org to use Embedded Swift. Public releases of Swift do not yet support Embedded Swift. - + You can follow the [tutorial here](https://apple.github.io/swift-matter-examples/tutorials/swiftmatterexamples/setup-macos/) for instructions on installing and using nighly Swift toolchains. -2. Install the Python3 dependencies listed in `requirements.txt`. +2. Install [`uv`](https://github.com/astral-sh/uv) "an extremely fast Python package and project manager". - ```console - $ cd swift-embedded-examples - $ python3 -m venv .venv - $ source .venv/bin/activate - $ python3 -m pip install -r Tools/requirements.txt - ``` + You can follow the [instructions here](https://docs.astral.sh/uv/getting-started/installation/) to install `uv`. ## Catalog of Examples @@ -34,12 +29,17 @@ Each example in this repository contains build and deployment instructions, howe | ---- | -------- | --- | ----------- | ----- | | [esp32-led-blink-sdk](./esp32-led-blink-sdk) | ESP32-C6-Bug | ESP-IDF SDK | Blink an LED repeatedly with Swift & the ESP-IDF. | | | [esp32-led-strip-sdk](./esp32-led-strip-sdk) | ESP32-C6-DevKitC-1 | ESP-IDF SDK | Control NeoPixel LEDs with Swift & the ESP-IDF. | | +| [arduino-esp32-led-blink-sdk](./arduino-esp32-led-blink-sdk) | ESP32-C6-Bug | ESP-IDF SDK | Blink an LED repeatedly with Swift, the ESP-IDF and the Arduino libraries. | | +| [arduino-esp32-wifi-scan-sdk](./arduino-esp32-wifi-scan-sdk) | ESP32-C6-DevKitC-1 | ESP-IDF SDK | Blink an LED repeatedly with Swift, the ESP-IDF and the Arduino libraries. | | | [nrfx-blink-sdk](./nrfx-blink-sdk) | nRF52840-DK | Zephyr SDK | Blink an LED repeatedly with Swift & Zephyr. | | -| [nuttx-riscv-blink] | QEMU | NuttX | Blink a virualized led in QEMU using the Apache NuttX RTOS | | +| [nuttx-riscv-blink](./nuttx-riscv-blink) | QEMU | NuttX | Blink a virualized led in QEMU using the Apache NuttX RTOS | | | [pico-blink-sdk](./pico-blink-sdk) | Raspberry Pi Pico, Pico 2 | Pico SDK | Blink an LED repeatedly with Swift & the Pico SDK. | | | [pico-blink](./pico-blink) | Raspberry Pi Pico | None | Blink an LED repeatedly. | | | [pico-w-blink-sdk](./pico-w-blink-sdk) | Raspberry Pi Pico W | Pico SDK | Blink an LED to signal 'SOS' in Morse code repeatedly with Swift & the Pico SDK. | | +| [harmony](./harmony) | Raspberry Pi Pico W | Pico SDK | A bluetooth speaker and ferrofluidic music visualizer. Firmware, Electrical, and Mechanical designs fully available. | | | [pico2-neopixel](./pico2-neopixel) | Raspberry Pi Pico 2 | None | Control Neopixel LEDs using the RP2350 PIO. | | +| [rpi4b-blink](./rpi4b-blink) | Raspberry Pi 4B | None | Blink the Pi's status green LED repeatedly using Swift MMIO. | | +| [rpi5-blink](./rpi5-blink) | Raspberry Pi 5 | None | Blink the Pi's status green LED repeatedly with Swift MMIO. | | | [stm32-blink](./stm32-blink) | STM32F746G-DISCO | None | Blink an LED repeatedly. | | | [stm32-lcd-logo](./stm32-lcd-logo) | STM32F746G-DISCO | None | Animate the Swift Logo on the built-in LCD. | | | [stm32-neopixel](./stm32-neopixel) | STM32F746G-DISCO | None | Control NeoPixel LEDs using SPI. | | diff --git a/Tools/SVDs/stm32f7x6.patched.svd b/Tools/SVDs/stm32f7x6.patched.svd new file mode 100644 index 00000000..db7cd9aa --- /dev/null +++ b/Tools/SVDs/stm32f7x6.patched.svd @@ -0,0 +1,54193 @@ + + + STM32F7x6 + 1.6 + STM32F7x6 + + CM7 + r0p1 + little + true + true + 4 + false + + 8 + 32 + 0x20 + 0x00000000 + 0xFFFFFFFF + + + RNG + Random number generator + RNG + 0x50060800 + + 0x0 + 0x400 + registers + + + HASH_RNG + Hash and Rng global interrupt + 80 + + + + CR + CR + control register + 0x0 + 0x20 + read-write + 0x00000000 + + + IE + Interrupt enable + 3 + 1 + + + RNGEN + Random number generator enable + 2 + 1 + + + + + SR + SR + status register + 0x4 + 0x20 + 0x00000000 + + + SEIS + Seed error interrupt status + 6 + 1 + read-write + + + CEIS + Clock error interrupt status + 5 + 1 + read-write + + + SECS + Seed error current status + 2 + 1 + read-only + + + CECS + Clock error current status + 1 + 1 + read-only + + + DRDY + Data ready + 0 + 1 + read-only + + + + + DR + DR + data register + 0x8 + 0x20 + read-only + 0x00000000 + + + RNDATA + Random data + 0 + 32 + + + + + + + HASH + Hash processor + HASH + 0x50060400 + + 0x0 + 0x400 + registers + + + + CR + CR + control register + 0x0 + 0x20 + 0x00000000 + + + INIT + Initialize message digest calculation + 2 + 1 + write-only + + + DMAE + DMA enable + 3 + 1 + read-write + + + DATATYPE + Data type selection + 4 + 2 + read-write + + + MODE + Mode selection + 6 + 1 + read-write + + + ALGO0 + Algorithm selection + 7 + 1 + read-write + + + NBW + Number of words already pushed + 8 + 4 + read-only + + + DINNE + DIN not empty + 12 + 1 + read-only + + + MDMAT + Multiple DMA Transfers + 13 + 1 + read-write + + + LKEY + Long key selection + 16 + 1 + read-write + + + ALGO1 + ALGO + 18 + 1 + read-write + + + + + DIN + DIN + data input register + 0x4 + 0x20 + read-write + 0x00000000 + + + DATAIN + Data input + 0 + 32 + + + + + STR + STR + start register + 0x8 + 0x20 + 0x00000000 + + + DCAL + Digest calculation + 8 + 1 + write-only + + + NBLW + Number of valid bits in the last word of the message + 0 + 5 + read-write + + + + + 5 + 0x4 + 0-4 + HR%s + HR0 + digest registers + 0xC + 0x20 + read-only + 0x00000000 + + + H + H0 + 0 + 32 + + + + + IMR + IMR + interrupt enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + DCIE + Digest calculation completion interrupt enable + 1 + 1 + + + DINIE + Data input interrupt enable + 0 + 1 + + + + + SR + SR + status register + 0x24 + 0x20 + 0x00000001 + + + BUSY + Busy bit + 3 + 1 + read-only + + + DMAS + DMA Status + 2 + 1 + read-only + + + DCIS + Digest calculation completion interrupt status + 1 + 1 + read-write + + + DINIS + Data input interrupt status + 0 + 1 + read-write + + + + + 54 + 0x4 + 0-53 + CSR%s + CSR0 + context swap registers + 0xF8 + 0x20 + read-write + 0x00000000 + + + CSR + CSR0 + 0 + 32 + + + + + 8 + 0x4 + 0-7 + HASH_HR%s + HASH_HR0 + HASH digest register + 0x310 + 0x20 + read-only + 0x00000000 + + + H + H0 + 0 + 32 + + + + + + + CRYP + Cryptographic processor + CRYP + 0x50060000 + + 0x0 + 0x400 + registers + + + CRYP + CRYP crypto global interrupt + 79 + + + + CR + CR + control register + 0x0 + 0x20 + 0x00000000 + + + ALGODIR + Algorithm direction + 2 + 1 + read-write + + + ALGOMODE0 + Algorithm mode + 3 + 3 + read-write + + + DATATYPE + Data type selection + 6 + 2 + read-write + + + KEYSIZE + Key size selection (AES mode only) + 8 + 2 + read-write + + + FFLUSH + FIFO flush + 14 + 1 + write-only + + + CRYPEN + Cryptographic processor enable + 15 + 1 + read-write + + + GCM_CCMPH + GCM_CCMPH + 16 + 2 + read-write + + + ALGOMODE3 + ALGOMODE + 19 + 1 + read-write + + + + + SR + SR + status register + 0x4 + 0x20 + read-only + 0x00000003 + + + BUSY + Busy bit + 4 + 1 + + + OFFU + Output FIFO full + 3 + 1 + + + OFNE + Output FIFO not empty + 2 + 1 + + + IFNF + Input FIFO not full + 1 + 1 + + + IFEM + Input FIFO empty + 0 + 1 + + + + + DIN + DIN + data input register + 0x8 + 0x20 + read-write + 0x00000000 + + + DATAIN + Data input + 0 + 32 + + + + + DOUT + DOUT + data output register + 0xC + 0x20 + read-only + 0x00000000 + + + DATAOUT + Data output + 0 + 32 + + + + + DMACR + DMACR + DMA control register + 0x10 + 0x20 + read-write + 0x00000000 + + + DOEN + DMA output enable + 1 + 1 + + + DIEN + DMA input enable + 0 + 1 + + + + + IMSCR + IMSCR + interrupt mask set/clear register + 0x14 + 0x20 + read-write + 0x00000000 + + + OUTIM + Output FIFO service interrupt mask + 1 + 1 + + + INIM + Input FIFO service interrupt mask + 0 + 1 + + + + + RISR + RISR + raw interrupt status register + 0x18 + 0x20 + read-only + 0x00000001 + + + OUTRIS + Output FIFO service raw interrupt status + 1 + 1 + + + INRIS + Input FIFO service raw interrupt status + 0 + 1 + + + + + MISR + MISR + masked interrupt status register + 0x1C + 0x20 + read-only + 0x00000000 + + + OUTMIS + Output FIFO service masked interrupt status + 1 + 1 + + + INMIS + Input FIFO service masked interrupt status + 0 + 1 + + + + + 4 + 0x8 + 0-3 + KEY%s + Cluster KEY%s, containing K?LR, K?RR + 0x20 + + KLR + K0LR + key registers + 0x0 + 0x20 + write-only + 0x00000000 + + + b2 + b224 + 0 + 32 + + + + + KRR + K0RR + key registers + 0x4 + 0x20 + write-only + 0x00000000 + + + b + b192 + 0 + 32 + + + + + + 2 + 0x8 + 0-1 + INIT%s + Cluster INIT%s, containing IV?LR, IV?RR + 0x40 + + IVLR + IV0LR + initialization vector registers + 0x0 + 0x20 + read-write + 0x00000000 + + + IV + IV31 + 0 + 32 + + + + + IVRR + IV0RR + initialization vector registers + 0x4 + 0x20 + read-write + 0x00000000 + + + IV + IV63 + 0 + 32 + + + + + + 8 + 0x4 + 0-7 + CSGCMCCM%sR + CSGCMCCM0R + context swap register + 0x50 + 0x20 + read-write + 0x00000000 + + + CSGCMCCM0R + CSGCMCCM0R + 0 + 32 + + + + + 8 + 0x4 + 0-7 + CSGCM%sR + CSGCM0R + context swap register + 0x70 + 0x20 + read-write + 0x00000000 + + + CSGCMR + CSGCM0R + 0 + 32 + + + + + + + DCMI + Digital camera interface + DCMI + 0x50050000 + + 0x0 + 0x400 + registers + + + DCMI + DCMI global interrupt + 78 + + + + CR + CR + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + ENABLE + DCMI enable + 14 + 1 + + + EDM + Extended data mode + 10 + 2 + + + FCRC + Frame capture rate control + 8 + 2 + + + VSPOL + Vertical synchronization polarity + 7 + 1 + + + HSPOL + Horizontal synchronization polarity + 6 + 1 + + + PCKPOL + Pixel clock polarity + 5 + 1 + + + ESS + Embedded synchronization select + 4 + 1 + + + JPEG + JPEG format + 3 + 1 + + + CROP + Crop feature + 2 + 1 + + + CM + Capture mode + 1 + 1 + + + CAPTURE + Capture enable + 0 + 1 + + + + + SR + SR + status register + 0x4 + 0x20 + read-only + 0x00000000 + + + FNE + FIFO not empty + 2 + 1 + + + VSYNC + VSYNC + 1 + 1 + + + HSYNC + HSYNC + 0 + 1 + + + + + RIS + RIS + raw interrupt status register + 0x8 + 0x20 + read-only + 0x00000000 + + + LINE_RIS + Line raw interrupt status + 4 + 1 + + + VSYNC_RIS + VSYNC raw interrupt status + 3 + 1 + + + ERR_RIS + Synchronization error raw interrupt status + 2 + 1 + + + OVR_RIS + Overrun raw interrupt status + 1 + 1 + + + FRAME_RIS + Capture complete raw interrupt status + 0 + 1 + + + + + IER + IER + interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + LINE_IE + Line interrupt enable + 4 + 1 + + + VSYNC_IE + VSYNC interrupt enable + 3 + 1 + + + ERR_IE + Synchronization error interrupt enable + 2 + 1 + + + OVR_IE + Overrun interrupt enable + 1 + 1 + + + FRAME_IE + Capture complete interrupt enable + 0 + 1 + + + + + MIS + MIS + masked interrupt status register + 0x10 + 0x20 + read-only + 0x00000000 + + + LINE_MIS + Line masked interrupt status + 4 + 1 + + + VSYNC_MIS + VSYNC masked interrupt status + 3 + 1 + + + ERR_MIS + Synchronization error masked interrupt status + 2 + 1 + + + OVR_MIS + Overrun masked interrupt status + 1 + 1 + + + FRAME_MIS + Capture complete masked interrupt status + 0 + 1 + + + + + ICR + ICR + interrupt clear register + 0x14 + 0x20 + write-only + 0x00000000 + + + LINE_ISC + line interrupt status clear + 4 + 1 + + + VSYNC_ISC + Vertical synch interrupt status clear + 3 + 1 + + + ERR_ISC + Synchronization error interrupt status clear + 2 + 1 + + + OVR_ISC + Overrun interrupt status clear + 1 + 1 + + + FRAME_ISC + Capture complete interrupt status clear + 0 + 1 + + + + + ESCR + ESCR + embedded synchronization code register + 0x18 + 0x20 + read-write + 0x00000000 + + + FEC + Frame end delimiter code + 24 + 8 + + + LEC + Line end delimiter code + 16 + 8 + + + LSC + Line start delimiter code + 8 + 8 + + + FSC + Frame start delimiter code + 0 + 8 + + + + + ESUR + ESUR + embedded synchronization unmask register + 0x1C + 0x20 + read-write + 0x00000000 + + + FEU + Frame end delimiter unmask + 24 + 8 + + + LEU + Line end delimiter unmask + 16 + 8 + + + LSU + Line start delimiter unmask + 8 + 8 + + + FSU + Frame start delimiter unmask + 0 + 8 + + + + + CWSTRT + CWSTRT + crop window start + 0x20 + 0x20 + read-write + 0x00000000 + + + VST + Vertical start line count + 16 + 13 + + + HOFFCNT + Horizontal offset count + 0 + 14 + + + + + CWSIZE + CWSIZE + crop window size + 0x24 + 0x20 + read-write + 0x00000000 + + + VLINE + Vertical line count + 16 + 14 + + + CAPCNT + Capture count + 0 + 14 + + + + + DR + DR + data register + 0x28 + 0x20 + read-only + 0x00000000 + + + Byte3 + Data byte 3 + 24 + 8 + + + Byte2 + Data byte 2 + 16 + 8 + + + Byte1 + Data byte 1 + 8 + 8 + + + Byte0 + Data byte 0 + 0 + 8 + + + + + + + FMC + Flexible memory controller + FSMC + 0xA0000000 + + 0x0 + 0x1000 + registers + + + FMC + FMC global interrupt + 48 + + + + BCR1 + BCR1 + SRAM/NOR-Flash chip-select control register 1 + 0x0 + 0x20 + read-write + 0x000030D0 + + + CCLKEN + CCLKEN + 20 + 1 + + CCLKEN + read-write + + Disabled + The FMC_CLK is generated continuously during asynchronous and synchronous access. The FMC_CLK clock is activated when the CCLKEN is set + 0 + + + Enabled + The FMC_CLK is only generated during the synchronous memory access (read/write transaction) + 1 + + + + + CBURSTRW + CBURSTRW + 19 + 1 + + CBURSTRW + read-write + + Disabled + Write operations are always performed in asynchronous mode + 0 + + + Enabled + Write operations are performed in synchronous mode + 1 + + + + + ASYNCWAIT + ASYNCWAIT + 15 + 1 + + ASYNCWAIT + read-write + + Disabled + Wait signal not used in asynchronous mode + 0 + + + Enabled + Wait signal used even in asynchronous mode + 1 + + + + + EXTMOD + EXTMOD + 14 + 1 + + EXTMOD + read-write + + Disabled + Values inside the FMC_BWTR are not taken into account + 0 + + + Enabled + Values inside the FMC_BWTR are taken into account + 1 + + + + + WAITEN + WAITEN + 13 + 1 + + WAITEN + read-write + + Disabled + Values inside the FMC_BWTR are taken into account + 0 + + + Enabled + NWAIT signal enabled + 1 + + + + + WREN + WREN + 12 + 1 + + WREN + read-write + + Disabled + Write operations disabled for the bank by the FMC + 0 + + + Enabled + Write operations enabled for the bank by the FMC + 1 + + + + + WAITCFG + WAITCFG + 11 + 1 + + WAITCFG + read-write + + BeforeWaitState + NWAIT signal is active one data cycle before wait state + 0 + + + DuringWaitState + NWAIT signal is active during wait state + 1 + + + + + WAITPOL + WAITPOL + 9 + 1 + + WAITPOL + read-write + + ActiveLow + NWAIT active low + 0 + + + ActiveHigh + NWAIT active high + 1 + + + + + BURSTEN + BURSTEN + 8 + 1 + + BURSTEN + read-write + + Disabled + Burst mode disabled + 0 + + + Enabled + Burst mode enabled + 1 + + + + + FACCEN + FACCEN + 6 + 1 + + FACCEN + read-write + + Disabled + Corresponding NOR Flash memory access is disabled + 0 + + + Enabled + Corresponding NOR Flash memory access is enabled + 1 + + + + + MWID + MWID + 4 + 2 + + MWID + read-write + + Bits8 + Memory data bus width 8 bits + 0 + + + Bits16 + Memory data bus width 16 bits + 1 + + + Bits32 + Memory data bus width 32 bits + 2 + + + + + MTYP + MTYP + 2 + 2 + + MTYP + read-write + + SRAM + SRAM memory type + 0 + + + PSRAM + PSRAM (CRAM) memory type + 1 + + + Flash + NOR Flash/OneNAND Flash + 2 + + + + + MUXEN + MUXEN + 1 + 1 + + MUXEN + read-write + + Disabled + Address/Data non-multiplexed + 0 + + + Enabled + Address/Data multiplexed on databus + 1 + + + + + MBKEN + MBKEN + 0 + 1 + + MBKEN + read-write + + Disabled + Corresponding memory bank is disabled + 0 + + + Enabled + Corresponding memory bank is enabled + 1 + + + + + WRAPMOD + WRAPMOD + 10 + 1 + + + WFDIS + Write FIFO disable + 21 + 1 + read-write + + WFDIS + read-write + + Enabled + Write FIFO enabled + 0 + + + Disabled + Write FIFO disabled + 1 + + + + + CPSIZE + CRAM page size + 16 + 3 + read-write + + CPSIZE + read-write + + NoBurstSplit + No burst split when crossing page boundary + 0 + + + Bytes128 + 128 bytes CRAM page size + 1 + + + Bytes256 + 256 bytes CRAM page size + 2 + + + Bytes512 + 512 bytes CRAM page size + 3 + + + Bytes1024 + 1024 bytes CRAM page size + 4 + + + + + + + 4 + 0x8 + 1-4 + BTR%s + BTR1 + SRAM/NOR-Flash chip-select timing register 1 + 0x4 + 0x20 + read-write + 0xFFFFFFFF + + + ACCMOD + ACCMOD + 28 + 2 + + ACCMOD + read-write + + A + Access mode A + 0 + + + B + Access mode B + 1 + + + C + Access mode C + 2 + + + D + Access mode D + 3 + + + + + DATLAT + DATLAT + 24 + 4 + + + 0 + 15 + + + + + CLKDIV + CLKDIV + 20 + 4 + + + 1 + 15 + + + + + BUSTURN + BUSTURN + 16 + 4 + + + 0 + 15 + + + + + DATAST + DATAST + 8 + 8 + + + 1 + 255 + + + + + ADDHLD + ADDHLD + 4 + 4 + + + 1 + 15 + + + + + ADDSET + ADDSET + 0 + 4 + + + 0 + 15 + + + + + + + 3 + 0x8 + 2-4 + BCR%s + BCR2 + SRAM/NOR-Flash chip-select control register 2 + 0x8 + 0x20 + read-write + 0x000030D0 + + + CBURSTRW + CBURSTRW + 19 + 1 + + CBURSTRW + read-write + + Disabled + Write operations are always performed in asynchronous mode + 0 + + + Enabled + Write operations are performed in synchronous mode + 1 + + + + + ASYNCWAIT + ASYNCWAIT + 15 + 1 + + ASYNCWAIT + read-write + + Disabled + Wait signal not used in asynchronous mode + 0 + + + Enabled + Wait signal used even in asynchronous mode + 1 + + + + + EXTMOD + EXTMOD + 14 + 1 + + EXTMOD + read-write + + Disabled + Values inside the FMC_BWTR are not taken into account + 0 + + + Enabled + Values inside the FMC_BWTR are taken into account + 1 + + + + + WAITEN + WAITEN + 13 + 1 + + WAITEN + read-write + + Disabled + Values inside the FMC_BWTR are taken into account + 0 + + + Enabled + NWAIT signal enabled + 1 + + + + + WREN + WREN + 12 + 1 + + WREN + read-write + + Disabled + Write operations disabled for the bank by the FMC + 0 + + + Enabled + Write operations enabled for the bank by the FMC + 1 + + + + + WAITCFG + WAITCFG + 11 + 1 + + WAITCFG + read-write + + BeforeWaitState + NWAIT signal is active one data cycle before wait state + 0 + + + DuringWaitState + NWAIT signal is active during wait state + 1 + + + + + WRAPMOD + WRAPMOD + 10 + 1 + + + WAITPOL + WAITPOL + 9 + 1 + + WAITPOL + read-write + + ActiveLow + NWAIT active low + 0 + + + ActiveHigh + NWAIT active high + 1 + + + + + BURSTEN + BURSTEN + 8 + 1 + + BURSTEN + read-write + + Disabled + Burst mode disabled + 0 + + + Enabled + Burst mode enabled + 1 + + + + + FACCEN + FACCEN + 6 + 1 + + FACCEN + read-write + + Disabled + Corresponding NOR Flash memory access is disabled + 0 + + + Enabled + Corresponding NOR Flash memory access is enabled + 1 + + + + + MWID + MWID + 4 + 2 + + MWID + read-write + + Bits8 + Memory data bus width 8 bits + 0 + + + Bits16 + Memory data bus width 16 bits + 1 + + + Bits32 + Memory data bus width 32 bits + 2 + + + + + MTYP + MTYP + 2 + 2 + + MTYP + read-write + + SRAM + SRAM memory type + 0 + + + PSRAM + PSRAM (CRAM) memory type + 1 + + + Flash + NOR Flash/OneNAND Flash + 2 + + + + + MUXEN + MUXEN + 1 + 1 + + MUXEN + read-write + + Disabled + Address/Data non-multiplexed + 0 + + + Enabled + Address/Data multiplexed on databus + 1 + + + + + MBKEN + MBKEN + 0 + 1 + + MBKEN + read-write + + Disabled + Corresponding memory bank is disabled + 0 + + + Enabled + Corresponding memory bank is enabled + 1 + + + + + CPSIZE + CRAM page size + 16 + 3 + read-write + + CPSIZE + read-write + + NoBurstSplit + No burst split when crossing page boundary + 0 + + + Bytes128 + 128 bytes CRAM page size + 1 + + + Bytes256 + 256 bytes CRAM page size + 2 + + + Bytes512 + 512 bytes CRAM page size + 3 + + + Bytes1024 + 1024 bytes CRAM page size + 4 + + + + + + + PCR + PCR + PC Card/NAND Flash control register + 0x80 + 0x20 + read-write + 0x00000018 + + + ECCPS + ECCPS + 17 + 3 + + ECCPS + read-write + + Bytes256 + ECC page size 256 bytes + 0 + + + Bytes512 + ECC page size 512 bytes + 1 + + + Bytes1024 + ECC page size 1024 bytes + 2 + + + Bytes2048 + ECC page size 2048 bytes + 3 + + + Bytes4096 + ECC page size 4096 bytes + 4 + + + Bytes8192 + ECC page size 8192 bytes + 5 + + + + + TAR + TAR + 13 + 4 + + + 0 + 15 + + + + + TCLR + TCLR + 9 + 4 + + + 0 + 15 + + + + + ECCEN + ECCEN + 6 + 1 + + ECCEN + read-write + + Disabled + ECC logic is disabled and reset + 0 + + + Enabled + ECC logic is enabled + 1 + + + + + PWID + PWID + 4 + 2 + + PWID + read-write + + Bits8 + External memory device width 8 bits + 0 + + + Bits16 + External memory device width 16 bits + 1 + + + + + PTYP + PTYP + 3 + 1 + + PTYP + read-write + + NANDFlash + NAND Flash + 1 + + + + + PBKEN + PBKEN + 2 + 1 + + PBKEN + read-write + + Disabled + Corresponding memory bank is disabled + 0 + + + Enabled + Corresponding memory bank is enabled + 1 + + + + + PWAITEN + PWAITEN + 1 + 1 + + PWAITEN + read-write + + Disabled + Wait feature disabled + 0 + + + Enabled + Wait feature enabled + 1 + + + + + + + SR + SR + FIFO status and interrupt register + 0x84 + 0x20 + 0x00000040 + + + FEMPT + FEMPT + 6 + 1 + read-only + + FEMPT + read + + NotEmpty + FIFO not empty + 0 + + + Empty + FIFO empty + 1 + + + + + IFEN + IFEN + 5 + 1 + read-write + + IFEN + read-write + + Disabled + Interrupt falling edge detection request disabled + 0 + + + Enabled + Interrupt falling edge detection request enabled + 1 + + + + + ILEN + ILEN + 4 + 1 + read-write + + ILEN + read-write + + Disabled + Interrupt high-level detection request disabled + 0 + + + Enabled + Interrupt high-level detection request enabled + 1 + + + + + IREN + IREN + 3 + 1 + read-write + + IREN + read-write + + Disabled + Interrupt rising edge detection request disabled + 0 + + + Enabled + Interrupt rising edge detection request enabled + 1 + + + + + IFS + IFS + 2 + 1 + read-write + + IFS + read-write + + DidNotOccur + Interrupt falling edge did not occur + 0 + + + Occurred + Interrupt falling edge occurred + 1 + + + + + ILS + ILS + 1 + 1 + read-write + + ILS + read-write + + DidNotOccur + Interrupt high-level did not occur + 0 + + + Occurred + Interrupt high-level occurred + 1 + + + + + IRS + IRS + 0 + 1 + read-write + + IRS + read-write + + DidNotOccur + Interrupt rising edge did not occur + 0 + + + Occurred + Interrupt rising edge occurred + 1 + + + + + + + PMEM + PMEM + Common memory space timing register + 0x88 + 0x20 + read-write + 0xFCFCFCFC + + + MEMHIZ + MEMHIZx + 24 + 8 + + + 0 + 254 + + + + + MEMHOLD + MEMHOLDx + 16 + 8 + + + 1 + 254 + + + + + MEMWAIT + MEMWAITx + 8 + 8 + + + 1 + 254 + + + + + MEMSET + MEMSETx + 0 + 8 + + + 0 + 254 + + + + + + + PATT + PATT + Attribute memory space timing register + 0x8C + 0x20 + read-write + 0xFCFCFCFC + + + ATTHIZ + ATTHIZx + 24 + 8 + + + 0 + 254 + + + + + ATTHOLD + ATTHOLDx + 16 + 8 + + + 1 + 254 + + + + + ATTWAIT + ATTWAITx + 8 + 8 + + + 1 + 254 + + + + + ATTSET + ATTSETx + 0 + 8 + + + 0 + 254 + + + + + + + ECCR + ECCR + ECC result register + 0x94 + 0x20 + read-only + 0x00000000 + + + ECC + ECCx + 0 + 32 + + + 0 + 4294967295 + + + + + + + 4 + 0x8 + 1-4 + BWTR%s + BWTR1 + SRAM/NOR-Flash write timing registers 1 + 0x104 + 0x20 + read-write + 0x0FFFFFFF + + + ACCMOD + ACCMOD + 28 + 2 + + ACCMOD + read-write + + A + Access mode A + 0 + + + B + Access mode B + 1 + + + C + Access mode C + 2 + + + D + Access mode D + 3 + + + + + DATLAT + DATLAT + 24 + 4 + + + CLKDIV + CLKDIV + 20 + 4 + + + DATAST + DATAST + 8 + 8 + + + 1 + 255 + + + + + ADDHLD + ADDHLD + 4 + 4 + + + 1 + 15 + + + + + ADDSET + ADDSET + 0 + 4 + + + 0 + 15 + + + + + BUSTURN + Bus turnaround phase duration + 16 + 4 + read-write + + + 0 + 15 + + + + + + + 2 + 0x4 + 1-2 + SDCR%s + SDCR1 + SDRAM Control Register 1 + 0x140 + 0x20 + read-write + 0x000002D0 + + + NC + Number of column address bits + 0 + 2 + + NC + read-write + + Bits8 + 8 bits + 0 + + + Bits9 + 9 bits + 1 + + + Bits10 + 10 bits + 2 + + + Bits11 + 11 bits + 3 + + + + + NR + Number of row address bits + 2 + 2 + + NR + read-write + + Bits11 + 11 bits + 0 + + + Bits12 + 12 bits + 1 + + + Bits13 + 13 bits + 2 + + + + + MWID + Memory data bus width + 4 + 2 + + MWID + read-write + + Bits8 + Memory data bus width 8 bits + 0 + + + Bits16 + Memory data bus width 16 bits + 1 + + + Bits32 + Memory data bus width 32 bits + 2 + + + + + NB + Number of internal banks + 6 + 1 + + NB + read-write + + NB2 + Two internal Banks + 0 + + + NB4 + Four internal Banks + 1 + + + + + CAS + CAS latency + 7 + 2 + + CAS + read-write + + Clocks1 + 1 cycle + 1 + + + Clocks2 + 2 cycles + 2 + + + Clocks3 + 3 cycles + 3 + + + + + WP + Write protection + 9 + 1 + + WP + read-write + + Disabled + Write accesses allowed + 0 + + + Enabled + Write accesses ignored + 1 + + + + + SDCLK + SDRAM clock configuration + 10 + 2 + + SDCLK + read-write + + Disabled + SDCLK clock disabled + 0 + + + Div2 + SDCLK period = 2 x HCLK period + 2 + + + Div3 + SDCLK period = 3 x HCLK period + 3 + + + + + RBURST + Burst read + 12 + 1 + + RBURST + read-write + + Disabled + Single read requests are not managed as bursts + 0 + + + Enabled + Single read requests are always managed as bursts + 1 + + + + + RPIPE + Read pipe + 13 + 2 + + RPIPE + read-write + + NoDelay + No clock cycle delay + 0 + + + Clocks1 + One clock cycle delay + 1 + + + Clocks2 + Two clock cycles delay + 2 + + + + + + + 2 + 0x4 + 1-2 + SDTR%s + SDTR1 + SDRAM Timing register 1 + 0x148 + 0x20 + read-write + 0x0FFFFFFF + + + TMRD + Load Mode Register to Active + 0 + 4 + + + 0 + 15 + + + + + TXSR + Exit self-refresh delay + 4 + 4 + + + 0 + 15 + + + + + TRAS + Self refresh time + 8 + 4 + + + 0 + 15 + + + + + TRC + Row cycle delay + 12 + 4 + + + 0 + 15 + + + + + TWR + Recovery delay + 16 + 4 + + + 0 + 15 + + + + + TRP + Row precharge delay + 20 + 4 + + + 0 + 15 + + + + + TRCD + Row to column delay + 24 + 4 + + + 0 + 15 + + + + + + + SDCMR + SDCMR + SDRAM Command Mode register + 0x150 + 0x20 + 0x00000000 + + + MODE + Command mode + 0 + 3 + write-only + + MODE + write + + Normal + Normal Mode + 0 + + + ClockConfigurationEnable + Clock Configuration Enable + 1 + + + PALL + PALL (All Bank Precharge) command + 2 + + + AutoRefreshCommand + Auto-refresh command + 3 + + + LoadModeRegister + Load Mode Resgier + 4 + + + SelfRefreshCommand + Self-refresh command + 5 + + + PowerDownCommand + Power-down command + 6 + + + + + CTB2 + Command target bank 2 + 3 + 1 + write-only + + CTB2 + write + + NotIssued + Command not issued to SDRAM Bank 1 + 0 + + + Issued + Command issued to SDRAM Bank 1 + 1 + + + + + CTB1 + Command target bank 1 + 4 + 1 + write-only + + + + NRFS + Number of Auto-refresh + 5 + 4 + read-write + + + 0 + 15 + + + + + MRD + Mode Register definition + 9 + 13 + read-write + + + 0 + 8191 + + + + + + + SDRTR + SDRTR + SDRAM Refresh Timer register + 0x154 + 0x20 + 0x00000000 + + + CRE + Clear Refresh error flag + 0 + 1 + write-only + + CRE + write + + Clear + Refresh Error Flag is cleared + 1 + + + + + COUNT + Refresh Timer Count + 1 + 13 + read-write + + + 0 + 8191 + + + + + REIE + RES Interrupt Enable + 14 + 1 + read-write + + REIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated if RE = 1 + 1 + + + + + + + SDSR + SDSR + SDRAM Status register + 0x158 + 0x20 + read-only + 0x00000000 + + + RE + Refresh error flag + 0 + 1 + + RE + read + + NoError + No refresh error has been detected + 0 + + + Error + A refresh error has been detected + 1 + + + + + MODES1 + Status Mode for Bank 1 + 1 + 2 + + MODES1 + read + + Normal + Normal Mode + 0 + + + SelfRefresh + Self-refresh mode + 1 + + + PowerDown + Power-down mode + 2 + + + + + MODES2 + Status Mode for Bank 2 + 3 + 2 + + + + BUSY + Busy status + 5 + 1 + + BUSY + read + + NotBusy + SDRAM Controller is ready to accept a new request + 0 + + + Busy + SDRAM Controller is not ready to accept a new request + 1 + + + + + + + + + DBGMCU + Debug support + DBG + 0xE0042000 + + 0x0 + 0x400 + registers + + + + IDCODE + IDCODE + IDCODE + 0x0 + 0x20 + read-only + 0x10006411 + + + DEV_ID + DEV_ID + 0 + 12 + + + REV_ID + REV_ID + 16 + 16 + + + + + CR + CR + Control Register + 0x4 + 0x20 + read-write + 0x00000000 + + + DBG_SLEEP + DBG_SLEEP + 0 + 1 + + + DBG_STOP + DBG_STOP + 1 + 1 + + + DBG_STANDBY + DBG_STANDBY + 2 + 1 + + + TRACE_IOEN + TRACE_IOEN + 5 + 1 + + + TRACE_MODE + TRACE_MODE + 6 + 2 + + + + + APB1_FZ + APB1_FZ + Debug MCU APB1 Freeze registe + 0x8 + 0x20 + read-write + 0x00000000 + + + DBG_TIM2_STOP + DBG_TIM2_STOP + 0 + 1 + + + DBG_TIM3_STOP + DBG_TIM3 _STOP + 1 + 1 + + + DBG_TIM4_STOP + DBG_TIM4_STOP + 2 + 1 + + + DBG_TIM5_STOP + DBG_TIM5_STOP + 3 + 1 + + + DBG_TIM6_STOP + DBG_TIM6_STOP + 4 + 1 + + + DBG_TIM7_STOP + DBG_TIM7_STOP + 5 + 1 + + + DBG_TIM12_STOP + DBG_TIM12_STOP + 6 + 1 + + + DBG_TIM13_STOP + DBG_TIM13_STOP + 7 + 1 + + + DBG_TIM14_STOP + DBG_TIM14_STOP + 8 + 1 + + + DBG_WWDG_STOP + DBG_WWDG_STOP + 11 + 1 + + + DBG_IWDG_STOP + DBG_IWDEG_STOP + 12 + 1 + + + DBG_J2C1_SMBUS_TIMEOUT + DBG_J2C1_SMBUS_TIMEOUT + 21 + 1 + + + DBG_J2C2_SMBUS_TIMEOUT + DBG_J2C2_SMBUS_TIMEOUT + 22 + 1 + + + DBG_J2C3SMBUS_TIMEOUT + DBG_J2C3SMBUS_TIMEOUT + 23 + 1 + + + DBG_CAN1_STOP + DBG_CAN1_STOP + 25 + 1 + + + DBG_CAN2_STOP + DBG_CAN2_STOP + 26 + 1 + + + + + APB2_FZ + APB2_FZ + Debug MCU APB2 Freeze registe + 0xC + 0x20 + read-write + 0x00000000 + + + DBG_TIM1_STOP + TIM1 counter stopped when core is halted + 0 + 1 + + + DBG_TIM8_STOP + TIM8 counter stopped when core is halted + 1 + 1 + + + DBG_TIM9_STOP + TIM9 counter stopped when core is halted + 16 + 1 + + + DBG_TIM10_STOP + TIM10 counter stopped when core is halted + 17 + 1 + + + DBG_TIM11_STOP + TIM11 counter stopped when core is halted + 18 + 1 + + + + + + + DMA2 + DMA controller + DMA + 0x40026400 + + 0x0 + 0x400 + registers + + + DMA2_Stream0 + DMA2 Stream0 global interrupt + 56 + + + DMA2_Stream1 + DMA2 Stream1 global interrupt + 57 + + + DMA2_Stream2 + DMA2 Stream2 global interrupt + 58 + + + DMA2_Stream3 + DMA2 Stream3 global interrupt + 59 + + + DMA2_Stream4 + DMA2 Stream4 global interrupt + 60 + + + DMA2_Stream5 + DMA2 Stream5 global interrupt + 68 + + + DMA2_Stream6 + DMA2 Stream6 global interrupt + 69 + + + DMA2_Stream7 + DMA2 Stream7 global interrupt + 70 + + + + LISR + LISR + low interrupt status register + 0x0 + 0x20 + read-only + 0x00000000 + + + TCIF3 + Stream x transfer complete interrupt flag (x = 3..0) + 27 + 1 + + + + HTIF3 + Stream x half transfer interrupt flag (x=3..0) + 26 + 1 + + + + TEIF3 + Stream x transfer error interrupt flag (x=3..0) + 25 + 1 + + + + DMEIF3 + Stream x direct mode error interrupt flag (x=3..0) + 24 + 1 + + + + FEIF3 + Stream x FIFO error interrupt flag (x=3..0) + 22 + 1 + + + + TCIF2 + Stream x transfer complete interrupt flag (x = 3..0) + 21 + 1 + + + + HTIF2 + Stream x half transfer interrupt flag (x=3..0) + 20 + 1 + + + + TEIF2 + Stream x transfer error interrupt flag (x=3..0) + 19 + 1 + + + + DMEIF2 + Stream x direct mode error interrupt flag (x=3..0) + 18 + 1 + + + + FEIF2 + Stream x FIFO error interrupt flag (x=3..0) + 16 + 1 + + + + TCIF1 + Stream x transfer complete interrupt flag (x = 3..0) + 11 + 1 + + + + HTIF1 + Stream x half transfer interrupt flag (x=3..0) + 10 + 1 + + + + TEIF1 + Stream x transfer error interrupt flag (x=3..0) + 9 + 1 + + + + DMEIF1 + Stream x direct mode error interrupt flag (x=3..0) + 8 + 1 + + + + FEIF1 + Stream x FIFO error interrupt flag (x=3..0) + 6 + 1 + + + + TCIF0 + Stream x transfer complete interrupt flag (x = 3..0) + 5 + 1 + + TCIF0 + read + + NotComplete + No transfer complete event on stream x + 0 + + + Complete + A transfer complete event occurred on stream x + 1 + + + + + HTIF0 + Stream x half transfer interrupt flag (x=3..0) + 4 + 1 + + HTIF0 + read + + NotHalf + No half transfer event on stream x + 0 + + + Half + A half transfer event occurred on stream x + 1 + + + + + TEIF0 + Stream x transfer error interrupt flag (x=3..0) + 3 + 1 + + TEIF0 + read + + NoError + No transfer error on stream x + 0 + + + Error + A transfer error occurred on stream x + 1 + + + + + DMEIF0 + Stream x direct mode error interrupt flag (x=3..0) + 2 + 1 + + DMEIF0 + read + + NoError + No Direct Mode error on stream x + 0 + + + Error + A Direct Mode error occurred on stream x + 1 + + + + + FEIF0 + Stream x FIFO error interrupt flag (x=3..0) + 0 + 1 + + FEIF0 + read + + NoError + No FIFO error event on stream x + 0 + + + Error + A FIFO error event occurred on stream x + 1 + + + + + + + HISR + HISR + high interrupt status register + 0x4 + 0x20 + read-only + 0x00000000 + + + TCIF7 + Stream x transfer complete interrupt flag (x=7..4) + 27 + 1 + + + + HTIF7 + Stream x half transfer interrupt flag (x=7..4) + 26 + 1 + + + + TEIF7 + Stream x transfer error interrupt flag (x=7..4) + 25 + 1 + + + + DMEIF7 + Stream x direct mode error interrupt flag (x=7..4) + 24 + 1 + + + + FEIF7 + Stream x FIFO error interrupt flag (x=7..4) + 22 + 1 + + + + TCIF6 + Stream x transfer complete interrupt flag (x=7..4) + 21 + 1 + + + + HTIF6 + Stream x half transfer interrupt flag (x=7..4) + 20 + 1 + + + + TEIF6 + Stream x transfer error interrupt flag (x=7..4) + 19 + 1 + + + + DMEIF6 + Stream x direct mode error interrupt flag (x=7..4) + 18 + 1 + + + + FEIF6 + Stream x FIFO error interrupt flag (x=7..4) + 16 + 1 + + + + TCIF5 + Stream x transfer complete interrupt flag (x=7..4) + 11 + 1 + + + + HTIF5 + Stream x half transfer interrupt flag (x=7..4) + 10 + 1 + + + + TEIF5 + Stream x transfer error interrupt flag (x=7..4) + 9 + 1 + + + + DMEIF5 + Stream x direct mode error interrupt flag (x=7..4) + 8 + 1 + + + + FEIF5 + Stream x FIFO error interrupt flag (x=7..4) + 6 + 1 + + + + TCIF4 + Stream x transfer complete interrupt flag (x=7..4) + 5 + 1 + + TCIF4 + read + + NotComplete + No transfer complete event on stream x + 0 + + + Complete + A transfer complete event occurred on stream x + 1 + + + + + HTIF4 + Stream x half transfer interrupt flag (x=7..4) + 4 + 1 + + HTIF4 + read + + NotHalf + No half transfer event on stream x + 0 + + + Half + A half transfer event occurred on stream x + 1 + + + + + TEIF4 + Stream x transfer error interrupt flag (x=7..4) + 3 + 1 + + TEIF4 + read + + NoError + No transfer error on stream x + 0 + + + Error + A transfer error occurred on stream x + 1 + + + + + DMEIF4 + Stream x direct mode error interrupt flag (x=7..4) + 2 + 1 + + DMEIF4 + read + + NoError + No Direct Mode error on stream x + 0 + + + Error + A Direct Mode error occurred on stream x + 1 + + + + + FEIF4 + Stream x FIFO error interrupt flag (x=7..4) + 0 + 1 + + FEIF4 + read + + NoError + No FIFO error event on stream x + 0 + + + Error + A FIFO error event occurred on stream x + 1 + + + + + + + LIFCR + LIFCR + low interrupt flag clear register + 0x8 + 0x20 + write-only + 0x00000000 + + + CTCIF3 + Stream x clear transfer complete interrupt flag (x = 3..0) + 27 + 1 + + + + CHTIF3 + Stream x clear half transfer interrupt flag (x = 3..0) + 26 + 1 + + + + CTEIF3 + Stream x clear transfer error interrupt flag (x = 3..0) + 25 + 1 + + + + CDMEIF3 + Stream x clear direct mode error interrupt flag (x = 3..0) + 24 + 1 + + + + CFEIF3 + Stream x clear FIFO error interrupt flag (x = 3..0) + 22 + 1 + + + + CTCIF2 + Stream x clear transfer complete interrupt flag (x = 3..0) + 21 + 1 + + + + CHTIF2 + Stream x clear half transfer interrupt flag (x = 3..0) + 20 + 1 + + + + CTEIF2 + Stream x clear transfer error interrupt flag (x = 3..0) + 19 + 1 + + + + CDMEIF2 + Stream x clear direct mode error interrupt flag (x = 3..0) + 18 + 1 + + + + CFEIF2 + Stream x clear FIFO error interrupt flag (x = 3..0) + 16 + 1 + + + + CTCIF1 + Stream x clear transfer complete interrupt flag (x = 3..0) + 11 + 1 + + + + CHTIF1 + Stream x clear half transfer interrupt flag (x = 3..0) + 10 + 1 + + + + CTEIF1 + Stream x clear transfer error interrupt flag (x = 3..0) + 9 + 1 + + + + CDMEIF1 + Stream x clear direct mode error interrupt flag (x = 3..0) + 8 + 1 + + + + CFEIF1 + Stream x clear FIFO error interrupt flag (x = 3..0) + 6 + 1 + + + + CTCIF0 + Stream x clear transfer complete interrupt flag (x = 3..0) + 5 + 1 + + CTCIF0 + write + + Clear + Clear the corresponding TCIFx flag + 1 + + + + + CHTIF0 + Stream x clear half transfer interrupt flag (x = 3..0) + 4 + 1 + + CHTIF0 + write + + Clear + Clear the corresponding HTIFx flag + 1 + + + + + CTEIF0 + Stream x clear transfer error interrupt flag (x = 3..0) + 3 + 1 + + CTEIF0 + write + + Clear + Clear the corresponding TEIFx flag + 1 + + + + + CDMEIF0 + Stream x clear direct mode error interrupt flag (x = 3..0) + 2 + 1 + + CDMEIF0 + write + + Clear + Clear the corresponding DMEIFx flag + 1 + + + + + CFEIF0 + Stream x clear FIFO error interrupt flag (x = 3..0) + 0 + 1 + + CFEIF0 + write + + Clear + Clear the corresponding CFEIFx flag + 1 + + + + + + + HIFCR + HIFCR + high interrupt flag clear register + 0xC + 0x20 + write-only + 0x00000000 + + + CTCIF7 + Stream x clear transfer complete interrupt flag (x = 7..4) + 27 + 1 + + + + CHTIF7 + Stream x clear half transfer interrupt flag (x = 7..4) + 26 + 1 + + + + CTEIF7 + Stream x clear transfer error interrupt flag (x = 7..4) + 25 + 1 + + + + CDMEIF7 + Stream x clear direct mode error interrupt flag (x = 7..4) + 24 + 1 + + + + CFEIF7 + Stream x clear FIFO error interrupt flag (x = 7..4) + 22 + 1 + + + + CTCIF6 + Stream x clear transfer complete interrupt flag (x = 7..4) + 21 + 1 + + + + CHTIF6 + Stream x clear half transfer interrupt flag (x = 7..4) + 20 + 1 + + + + CTEIF6 + Stream x clear transfer error interrupt flag (x = 7..4) + 19 + 1 + + + + CDMEIF6 + Stream x clear direct mode error interrupt flag (x = 7..4) + 18 + 1 + + + + CFEIF6 + Stream x clear FIFO error interrupt flag (x = 7..4) + 16 + 1 + + + + CTCIF5 + Stream x clear transfer complete interrupt flag (x = 7..4) + 11 + 1 + + + + CHTIF5 + Stream x clear half transfer interrupt flag (x = 7..4) + 10 + 1 + + + + CTEIF5 + Stream x clear transfer error interrupt flag (x = 7..4) + 9 + 1 + + + + CDMEIF5 + Stream x clear direct mode error interrupt flag (x = 7..4) + 8 + 1 + + + + CFEIF5 + Stream x clear FIFO error interrupt flag (x = 7..4) + 6 + 1 + + + + CTCIF4 + Stream x clear transfer complete interrupt flag (x = 7..4) + 5 + 1 + + CTCIF4 + write + + Clear + Clear the corresponding TCIFx flag + 1 + + + + + CHTIF4 + Stream x clear half transfer interrupt flag (x = 7..4) + 4 + 1 + + CHTIF4 + write + + Clear + Clear the corresponding HTIFx flag + 1 + + + + + CTEIF4 + Stream x clear transfer error interrupt flag (x = 7..4) + 3 + 1 + + CTEIF4 + write + + Clear + Clear the corresponding TEIFx flag + 1 + + + + + CDMEIF4 + Stream x clear direct mode error interrupt flag (x = 7..4) + 2 + 1 + + CDMEIF4 + write + + Clear + Clear the corresponding DMEIFx flag + 1 + + + + + CFEIF4 + Stream x clear FIFO error interrupt flag (x = 7..4) + 0 + 1 + + CFEIF4 + write + + Clear + Clear the corresponding CFEIFx flag + 1 + + + + + + + 8 + 0x18 + 0-7 + ST%s + Stream cluster: S?CR, S?NDTR, S?M0AR, S?M1AR and S?FCR registers + 0x10 + + CR + S0CR + stream x configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + CHSEL + Channel selection + 25 + 3 + + + 0 + 7 + + + + + MBURST + Memory burst transfer configuration + 23 + 2 + + + + PBURST + Peripheral burst transfer configuration + 21 + 2 + + PBURST + read-write + + Single + Single transfer + 0 + + + INCR4 + Incremental burst of 4 beats + 1 + + + INCR8 + Incremental burst of 8 beats + 2 + + + INCR16 + Incremental burst of 16 beats + 3 + + + + + CT + Current target (only in double buffer mode) + 19 + 1 + + CT + read-write + + Memory0 + The current target memory is Memory 0 + 0 + + + Memory1 + The current target memory is Memory 1 + 1 + + + + + DBM + Double buffer mode + 18 + 1 + + DBM + read-write + + Disabled + No buffer switching at the end of transfer + 0 + + + Enabled + Memory target switched at the end of the DMA transfer + 1 + + + + + PL + Priority level + 16 + 2 + + PL + read-write + + Low + Low + 0 + + + Medium + Medium + 1 + + + High + High + 2 + + + VeryHigh + Very high + 3 + + + + + PINCOS + Peripheral increment offset size + 15 + 1 + + PINCOS + read-write + + PSIZE + The offset size for the peripheral address calculation is linked to the PSIZE + 0 + + + Fixed4 + The offset size for the peripheral address calculation is fixed to 4 (32-bit alignment) + 1 + + + + + MSIZE + Memory data size + 13 + 2 + + + + PSIZE + Peripheral data size + 11 + 2 + + PSIZE + read-write + + Bits8 + Byte (8-bit) + 0 + + + Bits16 + Half-word (16-bit) + 1 + + + Bits32 + Word (32-bit) + 2 + + + + + MINC + Memory increment mode + 10 + 1 + + + + PINC + Peripheral increment mode + 9 + 1 + + PINC + read-write + + Fixed + Address pointer is fixed + 0 + + + Incremented + Address pointer is incremented after each data transfer + 1 + + + + + CIRC + Circular mode + 8 + 1 + + CIRC + read-write + + Disabled + Circular mode disabled + 0 + + + Enabled + Circular mode enabled + 1 + + + + + DIR + Data transfer direction + 6 + 2 + + DIR + read-write + + PeripheralToMemory + Peripheral-to-memory + 0 + + + MemoryToPeripheral + Memory-to-peripheral + 1 + + + MemoryToMemory + Memory-to-memory + 2 + + + + + PFCTRL + Peripheral flow controller + 5 + 1 + + PFCTRL + read-write + + DMA + The DMA is the flow controller + 0 + + + Peripheral + The peripheral is the flow controller + 1 + + + + + TCIE + Transfer complete interrupt enable + 4 + 1 + + TCIE + read-write + + Disabled + TC interrupt disabled + 0 + + + Enabled + TC interrupt enabled + 1 + + + + + HTIE + Half transfer interrupt enable + 3 + 1 + + HTIE + read-write + + Disabled + HT interrupt disabled + 0 + + + Enabled + HT interrupt enabled + 1 + + + + + TEIE + Transfer error interrupt enable + 2 + 1 + + TEIE + read-write + + Disabled + TE interrupt disabled + 0 + + + Enabled + TE interrupt enabled + 1 + + + + + DMEIE + Direct mode error interrupt enable + 1 + 1 + + DMEIE + read-write + + Disabled + DME interrupt disabled + 0 + + + Enabled + DME interrupt enabled + 1 + + + + + EN + Stream enable / flag stream ready when read low + 0 + 1 + + EN + read-write + + Disabled + Stream disabled + 0 + + + Enabled + Stream enabled + 1 + + + + + + + NDTR + S0NDTR + stream x number of data register + 0x4 + 0x20 + read-write + 0x00000000 + + + NDT + Number of data items to transfer + 0 + 16 + + + 0 + 65535 + + + + + + + PAR + S0PAR + stream x peripheral address register + 0x8 + 0x20 + read-write + 0x00000000 + + + PA + Peripheral address + 0 + 32 + + + + + M0AR + S0M0AR + stream x memory 0 address register + 0xC + 0x20 + read-write + 0x00000000 + + + M0A + Memory 0 address + 0 + 32 + + + + + M1AR + S0M1AR + stream x memory 1 address register + 0x10 + 0x20 + read-write + 0x00000000 + + + M1A + Memory 1 address (used in case of Double buffer mode) + 0 + 32 + + + + + FCR + S0FCR + stream x FIFO control register + 0x14 + 0x20 + 0x00000021 + + + FEIE + FIFO error interrupt enable + 7 + 1 + read-write + + FEIE + read-write + + Disabled + FE interrupt disabled + 0 + + + Enabled + FE interrupt enabled + 1 + + + + + FS + FIFO status + 3 + 3 + read-only + + FS + read + + Quarter1 + 0 < fifo_level < 1/4 + 0 + + + Quarter2 + 1/4 <= fifo_level < 1/2 + 1 + + + Quarter3 + 1/2 <= fifo_level < 3/4 + 2 + + + Quarter4 + 3/4 <= fifo_level < full + 3 + + + Empty + FIFO is empty + 4 + + + Full + FIFO is full + 5 + + + + + DMDIS + Direct mode disable + 2 + 1 + read-write + + DMDIS + read-write + + Enabled + Direct mode is enabled + 0 + + + Disabled + Direct mode is disabled + 1 + + + + + FTH + FIFO threshold selection + 0 + 2 + read-write + + FTH + read-write + + Quarter + 1/4 full FIFO + 0 + + + Half + 1/2 full FIFO + 1 + + + ThreeQuarters + 3/4 full FIFO + 2 + + + Full + Full FIFO + 3 + + + + + + + + + + DMA1 + 0x40026000 + + DMA1_Stream0 + DMA1 Stream0 global interrupt + 11 + + + DMA1_Stream1 + DMA1 Stream1 global interrupt + 12 + + + DMA1_Stream2 + DMA1 Stream2 global interrupt + 13 + + + DMA1_Stream3 + DMA1 Stream3 global interrupt + 14 + + + DMA1_Stream4 + DMA1 Stream4 global interrupt + 15 + + + DMA1_Stream5 + DMA1 Stream5 global interrupt + 16 + + + DMA1_Stream6 + DMA1 Stream6 global interrupt + 17 + + + DMA1_Stream7 + DMA1 Stream7 global interrupt + 47 + + + + RCC + Reset and clock control + RCC + 0x40023800 + + 0x0 + 0x400 + registers + + + RCC + RCC global interrupt + 5 + + + + CR + CR + clock control register + 0x0 + 0x20 + 0x00000083 + + + PLLI2SRDY + PLLI2S clock ready flag + 27 + 1 + read-only + + + + PLLI2SON + PLLI2S enable + 26 + 1 + read-write + + + + PLLRDY + Main PLL (PLL) clock ready flag + 25 + 1 + read-only + + + + PLLON + Main PLL (PLL) enable + 24 + 1 + read-write + + + + CSSON + Clock security system enable + 19 + 1 + read-write + + CSSON + read-write + + Off + Clock security system disabled (clock detector OFF) + 0 + + + On + Clock security system enable (clock detector ON if the HSE is ready, OFF if not) + 1 + + + + + HSEBYP + HSE clock bypass + 18 + 1 + read-write + + HSEBYP + read-write + + NotBypassed + HSE crystal oscillator not bypassed + 0 + + + Bypassed + HSE crystal oscillator bypassed with external clock + 1 + + + + + HSERDY + HSE clock ready flag + 17 + 1 + read-only + + + + HSEON + HSE clock enable + 16 + 1 + read-write + + + + HSICAL + Internal high-speed clock calibration + 8 + 8 + read-only + + + 0 + 255 + + + + + HSITRIM + Internal high-speed clock trimming + 3 + 5 + read-write + + + 0 + 31 + + + + + HSIRDY + Internal high-speed clock ready flag + 1 + 1 + read-only + + HSIRDYR + read + + NotReady + Clock not ready + 0 + + + Ready + Clock ready + 1 + + + + + HSION + Internal high-speed clock enable + 0 + 1 + read-write + + HSION + read-write + + Off + Clock Off + 0 + + + On + Clock On + 1 + + + + + PLLSAIRDY + PLLSAI clock ready flag + 29 + 1 + read-only + + + + PLLSAION + PLLSAI enable + 28 + 1 + read-write + + + + + + PLLCFGR + PLLCFGR + PLL configuration register + 0x4 + 0x20 + read-write + 0x24003010 + + + PLLSRC + Main PLL(PLL) and audio PLL (PLLI2S) entry clock source + 22 + 1 + + PLLSRC + read-write + + HSI + HSI clock selected as PLL and PLLI2S clock entry + 0 + + + HSE + HSE oscillator clock selected as PLL and PLLI2S clock entry + 1 + + + + + PLLM + Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock + 0 + 6 + + + 2 + 63 + + + + + PLLN + Main PLL (PLL) multiplication factor for VCO + 6 + 9 + + + 50 + 432 + + + + + PLLP + Main PLL (PLL) division factor for main system clock + 16 + 2 + + PLLP + read-write + + Div2 + PLLP=2 + 0 + + + Div4 + PLLP=4 + 1 + + + Div6 + PLLP=6 + 2 + + + Div8 + PLLP=8 + 3 + + + + + PLLQ + Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks + 24 + 4 + + + 2 + 15 + + + + + + + CFGR + CFGR + clock configuration register + 0x8 + 0x20 + 0x00000000 + + + MCO2 + Microcontroller clock output 2 + 30 + 2 + read-write + + MCO2 + read-write + + SYSCLK + System clock (SYSCLK) selected + 0 + + + PLLI2S + PLLI2S clock selected + 1 + + + HSE + HSE oscillator clock selected + 2 + + + PLL + PLL clock selected + 3 + + + + + MCO2PRE + MCO2 prescaler + 27 + 3 + read-write + + + + MCO1PRE + MCO1 prescaler + 24 + 3 + read-write + + MCO1PRE + read-write + + Div1 + No division + 0 + + + Div2 + Division by 2 + 4 + + + Div3 + Division by 3 + 5 + + + Div4 + Division by 4 + 6 + + + Div5 + Division by 5 + 7 + + + + + I2SSRC + I2S clock selection + 23 + 1 + read-write + + I2SSRC + read-write + + PLLI2S + PLLI2S clock used as I2S clock source + 0 + + + CKIN + External clock mapped on the I2S_CKIN pin used as I2S clock source + 1 + + + + + MCO1 + Microcontroller clock output 1 + 21 + 2 + read-write + + MCO1 + read-write + + HSI + HSI clock selected + 0 + + + LSE + LSE oscillator selected + 1 + + + HSE + HSE oscillator clock selected + 2 + + + PLL + PLL clock selected + 3 + + + + + RTCPRE + HSE division factor for RTC clock + 16 + 5 + read-write + + + 0 + 31 + + + + + PPRE2 + APB high-speed prescaler (APB2) + 13 + 3 + read-write + + + + PPRE1 + APB Low speed prescaler (APB1) + 10 + 3 + read-write + + PPRE1 + read-write + + Div1 + HCLK not divided + 0 + + + Div2 + HCLK divided by 2 + 4 + + + Div4 + HCLK divided by 4 + 5 + + + Div8 + HCLK divided by 8 + 6 + + + Div16 + HCLK divided by 16 + 7 + + + + + HPRE + AHB prescaler + 4 + 4 + read-write + + HPRE + read-write + + Div1 + SYSCLK not divided + 0 + + + Div2 + SYSCLK divided by 2 + 8 + + + Div4 + SYSCLK divided by 4 + 9 + + + Div8 + SYSCLK divided by 8 + 10 + + + Div16 + SYSCLK divided by 16 + 11 + + + Div64 + SYSCLK divided by 64 + 12 + + + Div128 + SYSCLK divided by 128 + 13 + + + Div256 + SYSCLK divided by 256 + 14 + + + Div512 + SYSCLK divided by 512 + 15 + + + + + SW + System clock switch + 0 + 2 + + SW + read-write + + HSI + HSI selected as system clock + 0 + + + HSE + HSE selected as system clock + 1 + + + PLL + PLL selected as system clock + 2 + + + + + SWS + System clock switch status + 2 + 2 + + SWSR + read + + HSI + HSI oscillator used as system clock + 0 + + + HSE + HSE oscillator used as system clock + 1 + + + PLL + PLL used as system clock + 2 + + + + + + + CIR + CIR + clock interrupt register + 0xC + 0x20 + 0x00000000 + + + CSSC + Clock security system interrupt clear + 23 + 1 + write-only + + CSSCW + write + + Clear + Clear CSSF flag + 1 + + + + + PLLSAIRDYC + PLLSAI Ready Interrupt Clear + 22 + 1 + write-only + + + + PLLI2SRDYC + PLLI2S ready interrupt clear + 21 + 1 + write-only + + + + PLLRDYC + Main PLL(PLL) ready interrupt clear + 20 + 1 + write-only + + + + HSERDYC + HSE ready interrupt clear + 19 + 1 + write-only + + + + HSIRDYC + HSI ready interrupt clear + 18 + 1 + write-only + + + + LSERDYC + LSE ready interrupt clear + 17 + 1 + write-only + + + + LSIRDYC + LSI ready interrupt clear + 16 + 1 + write-only + + LSIRDYCW + write + + Clear + Clear interrupt flag + 1 + + + + + PLLSAIRDYIE + PLLSAI Ready Interrupt Enable + 14 + 1 + read-write + + + + PLLI2SRDYIE + PLLI2S ready interrupt enable + 13 + 1 + read-write + + + + PLLRDYIE + Main PLL (PLL) ready interrupt enable + 12 + 1 + read-write + + + + HSERDYIE + HSE ready interrupt enable + 11 + 1 + read-write + + + + HSIRDYIE + HSI ready interrupt enable + 10 + 1 + read-write + + + + LSERDYIE + LSE ready interrupt enable + 9 + 1 + read-write + + + + LSIRDYIE + LSI ready interrupt enable + 8 + 1 + read-write + + LSIRDYIE + read-write + + Disabled + Interrupt disabled + 0 + + + Enabled + Interrupt enabled + 1 + + + + + CSSF + Clock security system interrupt flag + 7 + 1 + read-only + + CSSFR + read + + NotInterrupted + No clock security interrupt caused by HSE clock failure + 0 + + + Interrupted + Clock security interrupt caused by HSE clock failure + 1 + + + + + PLLSAIRDYF + PLLSAI ready interrupt flag + 6 + 1 + read-only + + + + PLLI2SRDYF + PLLI2S ready interrupt flag + 5 + 1 + read-only + + + + PLLRDYF + Main PLL (PLL) ready interrupt flag + 4 + 1 + read-only + + + + HSERDYF + HSE ready interrupt flag + 3 + 1 + read-only + + + + HSIRDYF + HSI ready interrupt flag + 2 + 1 + read-only + + + + LSERDYF + LSE ready interrupt flag + 1 + 1 + read-only + + + + LSIRDYF + LSI ready interrupt flag + 0 + 1 + read-only + + LSIRDYFR + read + + NotInterrupted + No clock ready interrupt + 0 + + + Interrupted + Clock ready interrupt + 1 + + + + + + + AHB1RSTR + AHB1RSTR + AHB1 peripheral reset register + 0x10 + 0x20 + read-write + 0x00000000 + + + OTGHSRST + USB OTG HS module reset + 29 + 1 + + + + ETHMACRST + Ethernet MAC reset + 25 + 1 + + + + DMA2DRST + DMA2D reset + 23 + 1 + + + + DMA2RST + DMA2 reset + 22 + 1 + + + + DMA1RST + DMA2 reset + 21 + 1 + + + + CRCRST + CRC reset + 12 + 1 + + + + GPIOKRST + IO port K reset + 10 + 1 + + + + GPIOJRST + IO port J reset + 9 + 1 + + + + GPIOIRST + IO port I reset + 8 + 1 + + + + GPIOHRST + IO port H reset + 7 + 1 + + + + GPIOGRST + IO port G reset + 6 + 1 + + + + GPIOFRST + IO port F reset + 5 + 1 + + + + GPIOERST + IO port E reset + 4 + 1 + + + + GPIODRST + IO port D reset + 3 + 1 + + + + GPIOCRST + IO port C reset + 2 + 1 + + + + GPIOBRST + IO port B reset + 1 + 1 + + + + GPIOARST + IO port A reset + 0 + 1 + + GPIOARST + read-write + + Reset + Reset the selected module + 1 + + + + + + + AHB2RSTR + AHB2RSTR + AHB2 peripheral reset register + 0x14 + 0x20 + read-write + 0x00000000 + + + OTGFSRST + USB OTG FS module reset + 7 + 1 + + + + RNGRST + Random number generator module reset + 6 + 1 + + + + HSAHRST + Hash module reset + 5 + 1 + + + + CRYPRST + Cryptographic module reset + 4 + 1 + + + + DCMIRST + Camera interface reset + 0 + 1 + + DCMIRST + read-write + + Reset + Reset the selected module + 1 + + + + + + + AHB3RSTR + AHB3RSTR + AHB3 peripheral reset register + 0x18 + 0x20 + read-write + 0x00000000 + + + FMCRST + Flexible memory controller module reset + 0 + 1 + + FMCRST + read-write + + Reset + Reset the selected module + 1 + + + + + QSPIRST + Quad SPI memory controller reset + 1 + 1 + + + + + + APB1RSTR + APB1RSTR + APB1 peripheral reset register + 0x20 + 0x20 + read-write + 0x00000000 + + + TIM2RST + TIM2 reset + 0 + 1 + + TIM2RST + read-write + + Reset + Reset the selected module + 1 + + + + + TIM3RST + TIM3 reset + 1 + 1 + + + + TIM4RST + TIM4 reset + 2 + 1 + + + + TIM5RST + TIM5 reset + 3 + 1 + + + + TIM6RST + TIM6 reset + 4 + 1 + + + + TIM7RST + TIM7 reset + 5 + 1 + + + + TIM12RST + TIM12 reset + 6 + 1 + + + + TIM13RST + TIM13 reset + 7 + 1 + + + + TIM14RST + TIM14 reset + 8 + 1 + + + + WWDGRST + Window watchdog reset + 11 + 1 + + + + SPI2RST + SPI 2 reset + 14 + 1 + + + + SPI3RST + SPI 3 reset + 15 + 1 + + + + USART2RST + USART 2 reset + 17 + 1 + + + + USART3RST + USART 3 reset + 18 + 1 + + + + UART4RST + USART 4 reset + 19 + 1 + + + + UART5RST + USART 5 reset + 20 + 1 + + + + I2C1RST + I2C 1 reset + 21 + 1 + + + + I2C2RST + I2C 2 reset + 22 + 1 + + + + I2C3RST + I2C3 reset + 23 + 1 + + + + CAN1RST + CAN1 reset + 25 + 1 + + + + CAN2RST + CAN2 reset + 26 + 1 + + + + PWRRST + Power interface reset + 28 + 1 + + + + DACRST + DAC reset + 29 + 1 + + + + UART7RST + UART7 reset + 30 + 1 + + + + UART8RST + UART8 reset + 31 + 1 + + + + SPDIFRXRST + SPDIF-RX reset + 16 + 1 + + + + CECRST + HDMI-CEC reset + 27 + 1 + + + + LPTIM1RST + Low power timer 1 reset + 9 + 1 + + + + I2C4RST + I2C 4 reset + 24 + 1 + + + + + + APB2RSTR + APB2RSTR + APB2 peripheral reset register + 0x24 + 0x20 + read-write + 0x00000000 + + + TIM1RST + TIM1 reset + 0 + 1 + + TIM1RST + read-write + + Reset + Reset the selected module + 1 + + + + + TIM8RST + TIM8 reset + 1 + 1 + + + + USART1RST + USART1 reset + 4 + 1 + + + + USART6RST + USART6 reset + 5 + 1 + + + + ADCRST + ADC interface reset (common to all ADCs) + 8 + 1 + + + + SPI1RST + SPI 1 reset + 12 + 1 + + + + SPI4RST + SPI4 reset + 13 + 1 + + + + SYSCFGRST + System configuration controller reset + 14 + 1 + + + + TIM9RST + TIM9 reset + 16 + 1 + + + + TIM10RST + TIM10 reset + 17 + 1 + + + + TIM11RST + TIM11 reset + 18 + 1 + + + + SPI5RST + SPI5 reset + 20 + 1 + + + + SPI6RST + SPI6 reset + 21 + 1 + + + + SAI1RST + SAI1 reset + 22 + 1 + + + + LTDCRST + LTDC reset + 26 + 1 + + + + SAI2RST + SAI2 reset + 23 + 1 + + + + SDMMC1RST + SDMMC1 reset + 11 + 1 + + + + + + AHB1ENR + AHB1ENR + AHB1 peripheral clock register + 0x30 + 0x20 + read-write + 0x00100000 + + + OTGHSULPIEN + USB OTG HSULPI clock enable + 30 + 1 + + + + OTGHSEN + USB OTG HS clock enable + 29 + 1 + + + + ETHMACPTPEN + Ethernet PTP clock enable + 28 + 1 + + + + ETHMACRXEN + Ethernet Reception clock enable + 27 + 1 + + + + ETHMACTXEN + Ethernet Transmission clock enable + 26 + 1 + + + + ETHMACEN + Ethernet MAC clock enable + 25 + 1 + + + + DMA2DEN + DMA2D clock enable + 23 + 1 + + + + DMA2EN + DMA2 clock enable + 22 + 1 + + + + DMA1EN + DMA1 clock enable + 21 + 1 + + + + DTCMRAMEN + CCM data RAM clock enable + 20 + 1 + + + + BKPSRAMEN + Backup SRAM interface clock enable + 18 + 1 + + + + CRCEN + CRC clock enable + 12 + 1 + + + + GPIOKEN + IO port K clock enable + 10 + 1 + + + + GPIOJEN + IO port J clock enable + 9 + 1 + + + + GPIOIEN + IO port I clock enable + 8 + 1 + + + + GPIOHEN + IO port H clock enable + 7 + 1 + + + + GPIOGEN + IO port G clock enable + 6 + 1 + + + + GPIOFEN + IO port F clock enable + 5 + 1 + + + + GPIOEEN + IO port E clock enable + 4 + 1 + + + + GPIODEN + IO port D clock enable + 3 + 1 + + + + GPIOCEN + IO port C clock enable + 2 + 1 + + + + GPIOBEN + IO port B clock enable + 1 + 1 + + + + GPIOAEN + IO port A clock enable + 0 + 1 + + GPIOAEN + read-write + + Disabled + The selected clock is disabled + 0 + + + Enabled + The selected clock is enabled + 1 + + + + + + + AHB2ENR + AHB2ENR + AHB2 peripheral clock enable register + 0x34 + 0x20 + read-write + 0x00000000 + + + OTGFSEN + USB OTG FS clock enable + 7 + 1 + + + + RNGEN + Random number generator clock enable + 6 + 1 + + + + HASHEN + Hash modules clock enable + 5 + 1 + + + + CRYPEN + Cryptographic modules clock enable + 4 + 1 + + + + DCMIEN + Camera interface enable + 0 + 1 + + DCMIEN + read-write + + Disabled + The selected clock is disabled + 0 + + + Enabled + The selected clock is enabled + 1 + + + + + + + AHB3ENR + AHB3ENR + AHB3 peripheral clock enable register + 0x38 + 0x20 + read-write + 0x00000000 + + + FMCEN + Flexible memory controller module clock enable + 0 + 1 + + FMCEN + read-write + + Disabled + The selected clock is disabled + 0 + + + Enabled + The selected clock is enabled + 1 + + + + + QSPIEN + Quad SPI memory controller clock enable + 1 + 1 + + + + + + APB1ENR + APB1ENR + APB1 peripheral clock enable register + 0x40 + 0x20 + read-write + 0x00000000 + + + TIM2EN + TIM2 clock enable + 0 + 1 + + TIM2EN + read-write + + Disabled + The selected clock is disabled + 0 + + + Enabled + The selected clock is enabled + 1 + + + + + TIM3EN + TIM3 clock enable + 1 + 1 + + + + TIM4EN + TIM4 clock enable + 2 + 1 + + + + TIM5EN + TIM5 clock enable + 3 + 1 + + + + TIM6EN + TIM6 clock enable + 4 + 1 + + + + TIM7EN + TIM7 clock enable + 5 + 1 + + + + TIM12EN + TIM12 clock enable + 6 + 1 + + + + TIM13EN + TIM13 clock enable + 7 + 1 + + + + TIM14EN + TIM14 clock enable + 8 + 1 + + + + WWDGEN + Window watchdog clock enable + 11 + 1 + + + + SPI2EN + SPI2 clock enable + 14 + 1 + + + + SPI3EN + SPI3 clock enable + 15 + 1 + + + + USART2EN + USART 2 clock enable + 17 + 1 + + + + USART3EN + USART3 clock enable + 18 + 1 + + + + UART4EN + UART4 clock enable + 19 + 1 + + + + UART5EN + UART5 clock enable + 20 + 1 + + + + I2C1EN + I2C1 clock enable + 21 + 1 + + + + I2C2EN + I2C2 clock enable + 22 + 1 + + + + I2C3EN + I2C3 clock enable + 23 + 1 + + + + CAN1EN + CAN 1 clock enable + 25 + 1 + + + + CAN2EN + CAN 2 clock enable + 26 + 1 + + + + PWREN + Power interface clock enable + 28 + 1 + + + + DACEN + DAC interface clock enable + 29 + 1 + + + + UART7EN + UART7 clock enable + 30 + 1 + + + + UART8EN + UART8 clock enable + 31 + 1 + + + + SPDIFRXEN + SPDIF-RX clock enable + 16 + 1 + + + + CECEN + HDMI-CEN clock enable + 27 + 1 + + + + LPTIM1EN + Low power timer 1 clock enable + 9 + 1 + + + + I2C4EN + I2C4 clock enable + 24 + 1 + + + + + + APB2ENR + APB2ENR + APB2 peripheral clock enable register + 0x44 + 0x20 + read-write + 0x00000000 + + + TIM1EN + TIM1 clock enable + 0 + 1 + + TIM1EN + read-write + + Disabled + The selected clock is disabled + 0 + + + Enabled + The selected clock is enabled + 1 + + + + + TIM8EN + TIM8 clock enable + 1 + 1 + + + + USART1EN + USART1 clock enable + 4 + 1 + + + + USART6EN + USART6 clock enable + 5 + 1 + + + + ADC1EN + ADC1 clock enable + 8 + 1 + + + + ADC2EN + ADC2 clock enable + 9 + 1 + + + + ADC3EN + ADC3 clock enable + 10 + 1 + + + + SPI1EN + SPI1 clock enable + 12 + 1 + + + + SPI4EN + SPI4 clock enable + 13 + 1 + + + + SYSCFGEN + System configuration controller clock enable + 14 + 1 + + + + TIM9EN + TIM9 clock enable + 16 + 1 + + + + TIM10EN + TIM10 clock enable + 17 + 1 + + + + TIM11EN + TIM11 clock enable + 18 + 1 + + + + SPI5EN + SPI5 clock enable + 20 + 1 + + + + SPI6EN + SPI6 clock enable + 21 + 1 + + + + SAI1EN + SAI1 clock enable + 22 + 1 + + + + LTDCEN + LTDC clock enable + 26 + 1 + + + + SAI2EN + SAI2 clock enable + 23 + 1 + + + + SDMMC1EN + SDMMC1 clock enable + 11 + 1 + + + + + + AHB1LPENR + AHB1LPENR + AHB1 peripheral clock enable in low power mode register + 0x50 + 0x20 + read-write + 0x7E6791FF + + + GPIOALPEN + IO port A clock enable during sleep mode + 0 + 1 + + GPIOALPEN + read-write + + DisabledInSleep + Selected module is disabled during Sleep mode + 0 + + + EnabledInSleep + Selected module is enabled during Sleep mode + 1 + + + + + GPIOBLPEN + IO port B clock enable during Sleep mode + 1 + 1 + + + + GPIOCLPEN + IO port C clock enable during Sleep mode + 2 + 1 + + + + GPIODLPEN + IO port D clock enable during Sleep mode + 3 + 1 + + + + GPIOELPEN + IO port E clock enable during Sleep mode + 4 + 1 + + + + GPIOFLPEN + IO port F clock enable during Sleep mode + 5 + 1 + + + + GPIOGLPEN + IO port G clock enable during Sleep mode + 6 + 1 + + + + GPIOHLPEN + IO port H clock enable during Sleep mode + 7 + 1 + + + + GPIOILPEN + IO port I clock enable during Sleep mode + 8 + 1 + + + + GPIOJLPEN + IO port J clock enable during Sleep mode + 9 + 1 + + + + GPIOKLPEN + IO port K clock enable during Sleep mode + 10 + 1 + + + + CRCLPEN + CRC clock enable during Sleep mode + 12 + 1 + + + + FLITFLPEN + Flash interface clock enable during Sleep mode + 15 + 1 + + + + SRAM1LPEN + SRAM 1interface clock enable during Sleep mode + 16 + 1 + + + + SRAM2LPEN + SRAM 2 interface clock enable during Sleep mode + 17 + 1 + + + + BKPSRAMLPEN + Backup SRAM interface clock enable during Sleep mode + 18 + 1 + + + + SRAM3LPEN + SRAM 3 interface clock enable during Sleep mode + 19 + 1 + + + + DMA1LPEN + DMA1 clock enable during Sleep mode + 21 + 1 + + + + DMA2LPEN + DMA2 clock enable during Sleep mode + 22 + 1 + + + + DMA2DLPEN + DMA2D clock enable during Sleep mode + 23 + 1 + + + + ETHMACLPEN + Ethernet MAC clock enable during Sleep mode + 25 + 1 + + + + ETHMACTXLPEN + Ethernet transmission clock enable during Sleep mode + 26 + 1 + + + + ETHMACRXLPEN + Ethernet reception clock enable during Sleep mode + 27 + 1 + + + + ETHMACPTPLPEN + Ethernet PTP clock enable during Sleep mode + 28 + 1 + + + + OTGHSLPEN + USB OTG HS clock enable during Sleep mode + 29 + 1 + + + + OTGHSULPILPEN + USB OTG HS ULPI clock enable during Sleep mode + 30 + 1 + + + + AXILPEN + AXI to AHB bridge clock enable during Sleep mode + 13 + 1 + + + DTCMLPEN + DTCM RAM interface clock enable during Sleep mode + 20 + 1 + + + + + AHB2LPENR + AHB2LPENR + AHB2 peripheral clock enable in low power mode register + 0x54 + 0x20 + read-write + 0x000000F1 + + + OTGFSLPEN + USB OTG FS clock enable during Sleep mode + 7 + 1 + + + + RNGLPEN + Random number generator clock enable during Sleep mode + 6 + 1 + + + + HASHLPEN + Hash modules clock enable during Sleep mode + 5 + 1 + + + + CRYPLPEN + Cryptography modules clock enable during Sleep mode + 4 + 1 + + + + DCMILPEN + Camera interface enable during Sleep mode + 0 + 1 + + DCMILPEN + read-write + + DisabledInSleep + Selected module is disabled during Sleep mode + 0 + + + EnabledInSleep + Selected module is enabled during Sleep mode + 1 + + + + + + + AHB3LPENR + AHB3LPENR + AHB3 peripheral clock enable in low power mode register + 0x58 + 0x20 + read-write + 0x00000001 + + + FMCLPEN + Flexible memory controller module clock enable during Sleep mode + 0 + 1 + + FMCLPEN + read-write + + DisabledInSleep + Selected module is disabled during Sleep mode + 0 + + + EnabledInSleep + Selected module is enabled during Sleep mode + 1 + + + + + QSPILPEN + Quand SPI memory controller clock enable during Sleep mode + 1 + 1 + + + + + + APB1LPENR + APB1LPENR + APB1 peripheral clock enable in low power mode register + 0x60 + 0x20 + read-write + 0x36FEC9FF + + + TIM2LPEN + TIM2 clock enable during Sleep mode + 0 + 1 + + TIM2LPEN + read-write + + DisabledInSleep + Selected module is disabled during Sleep mode + 0 + + + EnabledInSleep + Selected module is enabled during Sleep mode + 1 + + + + + TIM3LPEN + TIM3 clock enable during Sleep mode + 1 + 1 + + + + TIM4LPEN + TIM4 clock enable during Sleep mode + 2 + 1 + + + + TIM5LPEN + TIM5 clock enable during Sleep mode + 3 + 1 + + + + TIM6LPEN + TIM6 clock enable during Sleep mode + 4 + 1 + + + + TIM7LPEN + TIM7 clock enable during Sleep mode + 5 + 1 + + + + TIM12LPEN + TIM12 clock enable during Sleep mode + 6 + 1 + + + + TIM13LPEN + TIM13 clock enable during Sleep mode + 7 + 1 + + + + TIM14LPEN + TIM14 clock enable during Sleep mode + 8 + 1 + + + + WWDGLPEN + Window watchdog clock enable during Sleep mode + 11 + 1 + + + + SPI2LPEN + SPI2 clock enable during Sleep mode + 14 + 1 + + + + SPI3LPEN + SPI3 clock enable during Sleep mode + 15 + 1 + + + + USART2LPEN + USART2 clock enable during Sleep mode + 17 + 1 + + + + USART3LPEN + USART3 clock enable during Sleep mode + 18 + 1 + + + + UART4LPEN + UART4 clock enable during Sleep mode + 19 + 1 + + + + UART5LPEN + UART5 clock enable during Sleep mode + 20 + 1 + + + + I2C1LPEN + I2C1 clock enable during Sleep mode + 21 + 1 + + + + I2C2LPEN + I2C2 clock enable during Sleep mode + 22 + 1 + + + + I2C3LPEN + I2C3 clock enable during Sleep mode + 23 + 1 + + + + CAN1LPEN + CAN 1 clock enable during Sleep mode + 25 + 1 + + + + CAN2LPEN + CAN 2 clock enable during Sleep mode + 26 + 1 + + + + PWRLPEN + Power interface clock enable during Sleep mode + 28 + 1 + + + + DACLPEN + DAC interface clock enable during Sleep mode + 29 + 1 + + + + UART7LPEN + UART7 clock enable during Sleep mode + 30 + 1 + + + + UART8LPEN + UART8 clock enable during Sleep mode + 31 + 1 + + + + SPDIFRXLPEN + SPDIF-RX clock enable during sleep mode + 16 + 1 + + + + CECLPEN + HDMI-CEN clock enable during Sleep mode + 27 + 1 + + + + LPTIM1LPEN + low power timer 1 clock enable during Sleep mode + 9 + 1 + + + + I2C4LPEN + I2C4 clock enable during Sleep mode + 24 + 1 + + + + + + APB2LPENR + APB2LPENR + APB2 peripheral clock enabled in low power mode register + 0x64 + 0x20 + read-write + 0x00075F33 + + + TIM1LPEN + TIM1 clock enable during Sleep mode + 0 + 1 + + TIM1LPEN + read-write + + DisabledInSleep + Selected module is disabled during Sleep mode + 0 + + + EnabledInSleep + Selected module is enabled during Sleep mode + 1 + + + + + TIM8LPEN + TIM8 clock enable during Sleep mode + 1 + 1 + + + + USART1LPEN + USART1 clock enable during Sleep mode + 4 + 1 + + + + USART6LPEN + USART6 clock enable during Sleep mode + 5 + 1 + + + + ADC1LPEN + ADC1 clock enable during Sleep mode + 8 + 1 + + + + ADC2LPEN + ADC2 clock enable during Sleep mode + 9 + 1 + + + + ADC3LPEN + ADC 3 clock enable during Sleep mode + 10 + 1 + + + + SPI1LPEN + SPI 1 clock enable during Sleep mode + 12 + 1 + + + + SPI4LPEN + SPI 4 clock enable during Sleep mode + 13 + 1 + + + + SYSCFGLPEN + System configuration controller clock enable during Sleep mode + 14 + 1 + + + + TIM9LPEN + TIM9 clock enable during sleep mode + 16 + 1 + + + + TIM10LPEN + TIM10 clock enable during Sleep mode + 17 + 1 + + + + TIM11LPEN + TIM11 clock enable during Sleep mode + 18 + 1 + + + + SPI5LPEN + SPI 5 clock enable during Sleep mode + 20 + 1 + + + + SPI6LPEN + SPI 6 clock enable during Sleep mode + 21 + 1 + + + + SAI1LPEN + SAI1 clock enable during sleep mode + 22 + 1 + + + + LTDCLPEN + LTDC clock enable during sleep mode + 26 + 1 + + + + SAI2LPEN + SAI2 clock enable during sleep mode + 23 + 1 + + + + SDMMC1LPEN + SDMMC1 clock enable during Sleep mode + 11 + 1 + + + + + + BDCR + BDCR + Backup domain control register + 0x70 + 0x20 + 0x00000000 + + + BDRST + Backup domain software reset + 16 + 1 + read-write + + BDRST + read-write + + Disabled + Reset not activated + 0 + + + Enabled + Reset the entire RTC domain + 1 + + + + + RTCEN + RTC clock enable + 15 + 1 + read-write + + RTCEN + read-write + + Disabled + RTC clock disabled + 0 + + + Enabled + RTC clock enabled + 1 + + + + + LSEBYP + External low-speed oscillator bypass + 2 + 1 + read-write + + LSEBYP + read-write + + NotBypassed + LSE crystal oscillator not bypassed + 0 + + + Bypassed + LSE crystal oscillator bypassed with external clock + 1 + + + + + LSERDY + External low-speed oscillator ready + 1 + 1 + read-only + + LSERDYR + read + + NotReady + LSE oscillator not ready + 0 + + + Ready + LSE oscillator ready + 1 + + + + + LSEON + External low-speed oscillator enable + 0 + 1 + read-write + + LSEON + read-write + + Off + LSE oscillator Off + 0 + + + On + LSE oscillator On + 1 + + + + + LSEDRV + LSE oscillator drive capability + 3 + 2 + read-write + + LSEDRV + read-write + + Low + Low drive capacity + 0 + + + MediumHigh + Medium-high drive capacity + 1 + + + MediumLow + Medium-low drive capacity + 2 + + + High + High drive capacity + 3 + + + + + RTCSEL + RTC clock source selection + 8 + 2 + + RTCSEL + read-write + + NoClock + No clock + 0 + + + LSE + LSE oscillator clock used as RTC clock + 1 + + + LSI + LSI oscillator clock used as RTC clock + 2 + + + HSE + HSE oscillator clock divided by a prescaler used as RTC clock + 3 + + + + + + + CSR + CSR + clock control & status register + 0x74 + 0x20 + 0x0E000000 + + + LPWRRSTF + Low-power reset flag + 31 + 1 + read-write + + + + WWDGRSTF + Window watchdog reset flag + 30 + 1 + read-write + + + + WDGRSTF + Independent watchdog reset flag + 29 + 1 + read-write + + + + SFTRSTF + Software reset flag + 28 + 1 + read-write + + + + PORRSTF + POR/PDR reset flag + 27 + 1 + read-write + + + + PADRSTF + PIN reset flag + 26 + 1 + read-write + + + + BORRSTF + BOR reset flag + 25 + 1 + read-write + + BORRSTFR + read + + NoReset + No reset has occured + 0 + + + Reset + A reset has occured + 1 + + + + + RMVF + Remove reset flag + 24 + 1 + read-write + + RMVFW + write + + Clear + Clears the reset flag + 1 + + + + + LSIRDY + Internal low-speed oscillator ready + 1 + 1 + read-only + + LSIRDYR + read + + NotReady + LSI oscillator not ready + 0 + + + Ready + LSI oscillator ready + 1 + + + + + LSION + Internal low-speed oscillator enable + 0 + 1 + read-write + + LSION + read-write + + Off + LSI oscillator Off + 0 + + + On + LSI oscillator On + 1 + + + + + + + SSCGR + SSCGR + spread spectrum clock generation register + 0x80 + 0x20 + read-write + 0x00000000 + + + SSCGEN + Spread spectrum modulation enable + 31 + 1 + + SSCGEN + read-write + + Disabled + Spread spectrum modulation disabled + 0 + + + Enabled + Spread spectrum modulation enabled + 1 + + + + + SPREADSEL + Spread Select + 30 + 1 + + SPREADSEL + read-write + + Center + Center spread + 0 + + + Down + Down spread + 1 + + + + + INCSTEP + Incrementation step + 13 + 15 + + + 0 + 32767 + + + + + MODPER + Modulation period + 0 + 13 + + + 0 + 8191 + + + + + + + PLLI2SCFGR + PLLI2SCFGR + PLLI2S configuration register + 0x84 + 0x20 + read-write + 0x20003000 + + + PLLI2SR + PLLI2S division factor for I2S clocks + 28 + 3 + + + 2 + 7 + + + + + PLLI2SQ + PLLI2S division factor for SAI1 clock + 24 + 4 + + + 2 + 15 + + + + + PLLI2SN + PLLI2S multiplication factor for VCO + 6 + 9 + + + 50 + 432 + + + + + PLLI2SP + PLLI2S division factor for SPDIFRX clock + 16 + 2 + + PLLI2SP + read-write + + Div2 + PLL*P=2 + 0 + + + Div4 + PLL*P=4 + 1 + + + Div6 + PLL*P=6 + 2 + + + Div8 + PLL*P=8 + 3 + + + + + + + PLLSAICFGR + PLLSAICFGR + PLL configuration register + 0x88 + 0x20 + read-write + 0x20003000 + + + PLLSAIN + PLLSAI division factor for VCO + 6 + 9 + + + 50 + 432 + + + + + PLLSAIP + PLLSAI division factor for 48MHz clock + 16 + 2 + + PLLSAIP + read-write + + Div2 + PLL*P=2 + 0 + + + Div4 + PLL*P=4 + 1 + + + Div6 + PLL*P=6 + 2 + + + Div8 + PLL*P=8 + 3 + + + + + PLLSAIQ + PLLSAI division factor for SAI clock + 24 + 4 + + + 2 + 15 + + + + + PLLSAIR + PLLSAI division factor for LCD clock + 28 + 3 + + + 2 + 7 + + + + + + + DCKCFGR1 + DKCFGR1 + dedicated clocks configuration register + 0x8C + 0x20 + read-write + 0x00000000 + + + PLLI2SDIVQ + PLLI2S division factor for SAI1 clock + 0 + 5 + + PLLI2SDIVQ + read-write + + Div1 + PLLI2SDIVQ = /1 + 0 + + + Div2 + PLLI2SDIVQ = /2 + 1 + + + Div3 + PLLI2SDIVQ = /3 + 2 + + + Div4 + PLLI2SDIVQ = /4 + 3 + + + Div5 + PLLI2SDIVQ = /5 + 4 + + + Div6 + PLLI2SDIVQ = /6 + 5 + + + Div7 + PLLI2SDIVQ = /7 + 6 + + + Div8 + PLLI2SDIVQ = /8 + 7 + + + Div9 + PLLI2SDIVQ = /9 + 8 + + + Div10 + PLLI2SDIVQ = /10 + 9 + + + Div11 + PLLI2SDIVQ = /11 + 10 + + + Div12 + PLLI2SDIVQ = /12 + 11 + + + Div13 + PLLI2SDIVQ = /13 + 12 + + + Div14 + PLLI2SDIVQ = /14 + 13 + + + Div15 + PLLI2SDIVQ = /15 + 14 + + + Div16 + PLLI2SDIVQ = /16 + 15 + + + Div17 + PLLI2SDIVQ = /17 + 16 + + + Div18 + PLLI2SDIVQ = /18 + 17 + + + Div19 + PLLI2SDIVQ = /19 + 18 + + + Div20 + PLLI2SDIVQ = /20 + 19 + + + Div21 + PLLI2SDIVQ = /21 + 20 + + + Div22 + PLLI2SDIVQ = /22 + 21 + + + Div23 + PLLI2SDIVQ = /23 + 22 + + + Div24 + PLLI2SDIVQ = /24 + 23 + + + Div25 + PLLI2SDIVQ = /25 + 24 + + + Div26 + PLLI2SDIVQ = /26 + 25 + + + Div27 + PLLI2SDIVQ = /27 + 26 + + + Div28 + PLLI2SDIVQ = /28 + 27 + + + Div29 + PLLI2SDIVQ = /29 + 28 + + + Div30 + PLLI2SDIVQ = /30 + 29 + + + Div31 + PLLI2SDIVQ = /31 + 30 + + + Div32 + PLLI2SDIVQ = /32 + 31 + + + + + PLLSAIDIVQ + PLLSAI division factor for SAI1 clock + 8 + 5 + + PLLSAIDIVQ + read-write + + Div1 + PLLSAIDIVQ = /1 + 0 + + + Div2 + PLLSAIDIVQ = /2 + 1 + + + Div3 + PLLSAIDIVQ = /3 + 2 + + + Div4 + PLLSAIDIVQ = /4 + 3 + + + Div5 + PLLSAIDIVQ = /5 + 4 + + + Div6 + PLLSAIDIVQ = /6 + 5 + + + Div7 + PLLSAIDIVQ = /7 + 6 + + + Div8 + PLLSAIDIVQ = /8 + 7 + + + Div9 + PLLSAIDIVQ = /9 + 8 + + + Div10 + PLLSAIDIVQ = /10 + 9 + + + Div11 + PLLSAIDIVQ = /11 + 10 + + + Div12 + PLLSAIDIVQ = /12 + 11 + + + Div13 + PLLSAIDIVQ = /13 + 12 + + + Div14 + PLLSAIDIVQ = /14 + 13 + + + Div15 + PLLSAIDIVQ = /15 + 14 + + + Div16 + PLLSAIDIVQ = /16 + 15 + + + Div17 + PLLSAIDIVQ = /17 + 16 + + + Div18 + PLLSAIDIVQ = /18 + 17 + + + Div19 + PLLSAIDIVQ = /19 + 18 + + + Div20 + PLLSAIDIVQ = /20 + 19 + + + Div21 + PLLSAIDIVQ = /21 + 20 + + + Div22 + PLLSAIDIVQ = /22 + 21 + + + Div23 + PLLSAIDIVQ = /23 + 22 + + + Div24 + PLLSAIDIVQ = /24 + 23 + + + Div25 + PLLSAIDIVQ = /25 + 24 + + + Div26 + PLLSAIDIVQ = /26 + 25 + + + Div27 + PLLSAIDIVQ = /27 + 26 + + + Div28 + PLLSAIDIVQ = /28 + 27 + + + Div29 + PLLSAIDIVQ = /29 + 28 + + + Div30 + PLLSAIDIVQ = /30 + 29 + + + Div31 + PLLSAIDIVQ = /31 + 30 + + + Div32 + PLLSAIDIVQ = /32 + 31 + + + + + PLLSAIDIVR + division factor for LCD_CLK + 16 + 2 + + PLLSAIDIVR + read-write + + Div2 + PLLSAIDIVR = /2 + 0 + + + Div4 + PLLSAIDIVR = /4 + 1 + + + Div8 + PLLSAIDIVR = /8 + 2 + + + Div16 + PLLSAIDIVR = /16 + 3 + + + + + SAI1SEL + SAI1 clock source selection + 20 + 2 + + SAI1SEL + read-write + + PLLSAI + SAI1 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + 0 + + + PLLI2S + SAI1 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + 1 + + + AFIF + SAI1 clock frequency = Alternate function input frequency + 2 + + + HSI_HSE + SAI1 clock frequency = HSI or HSE + 3 + + + + + SAI2SEL + SAI2 clock source selection + 22 + 2 + + SAI2SEL + read-write + + PLLSAI + SAI2 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + 0 + + + PLLI2S + SAI2 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + 1 + + + AFIF + SAI2 clock frequency = Alternate function input frequency + 2 + + + HSI_HSE + SAI2 clock frequency = HSI or HSE + 3 + + + + + TIMPRE + Timers clocks prescalers selection + 24 + 1 + + TIMPRE + read-write + + Mul1Or2 + If the APB prescaler is configured 1, TIMxCLK = PCLKx. Otherwise, TIMxCLK = 2xPCLKx + 0 + + + Mul1Or4 + If the APB prescaler is configured 1, 2 or 4, TIMxCLK = HCLK. Otherwise, TIMxCLK = 4xPCLKx + 1 + + + + + + + DCKCFGR2 + DKCFGR2 + dedicated clocks configuration register + 0x90 + 0x20 + read-write + 0x00000000 + + + USART1SEL + USART 1 clock source selection + 0 + 2 + + USART1SEL + read-write + + APB2 + APB2 clock (PCLK2) is selected as USART clock + 0 + + + SYSCLK + System clock is selected as USART clock + 1 + + + HSI + HSI clock is selected as USART clock + 2 + + + LSE + LSE clock is selected as USART clock + 3 + + + + + USART2SEL + USART 2 clock source selection + 2 + 2 + + USART2SEL + read-write + + APB1 + APB1 clock (PCLK1) is selected as USART clock + 0 + + + SYSCLK + System clock is selected as USART clock + 1 + + + HSI + HSI clock is selected as USART clock + 2 + + + LSE + LSE clock is selected as USART clock + 3 + + + + + USART3SEL + USART 3 clock source selection + 4 + 2 + + + + UART4SEL + UART 4 clock source selection + 6 + 2 + + + + UART5SEL + UART 5 clock source selection + 8 + 2 + + + + USART6SEL + USART 6 clock source selection + 10 + 2 + + + + UART7SEL + UART 7 clock source selection + 12 + 2 + + + + UART8SEL + UART 8 clock source selection + 14 + 2 + + + + I2C1SEL + I2C1 clock source selection + 16 + 2 + + I2C1SEL + read-write + + APB + APB clock selected as I2C clock + 0 + + + SYSCLK + System clock selected as I2C clock + 1 + + + HSI + HSI clock selected as I2C clock + 2 + + + + + I2C2SEL + I2C2 clock source selection + 18 + 2 + + + + I2C3SEL + I2C3 clock source selection + 20 + 2 + + + + I2C4SEL + I2C4 clock source selection + 22 + 2 + + + + LPTIM1SEL + Low power timer 1 clock source selection + 24 + 2 + + LPTIM1SEL + read-write + + APB1 + APB1 clock (PCLK1) selected as LPTILM1 clock + 0 + + + LSI + LSI clock is selected as LPTILM1 clock + 1 + + + HSI + HSI clock is selected as LPTILM1 clock + 2 + + + LSE + LSE clock is selected as LPTILM1 clock + 3 + + + + + CECSEL + HDMI-CEC clock source selection + 26 + 1 + + CECSEL + read-write + + LSE + LSE clock is selected as HDMI-CEC clock + 0 + + + HSI_Div488 + HSI divided by 488 clock is selected as HDMI-CEC clock + 1 + + + + + CK48MSEL + 48MHz clock source selection + 27 + 1 + + CK48MSEL + read-write + + PLL + 48MHz clock from PLL is selected + 0 + + + PLLSAI + 48MHz clock from PLLSAI is selected + 1 + + + + + SDMMC1SEL + SDMMC clock source selection + 28 + 1 + + SDMMC1SEL + read-write + + CK48M + 48 MHz clock is selected as SD clock + 0 + + + SYSCLK + System clock is selected as SD clock + 1 + + + + + + + + + GPIOD + 0x40020C00 + + + GPIOC + 0x40020800 + + + GPIOK + 0x40022800 + + + GPIOJ + 0x40022400 + + + GPIOI + 0x40022000 + + + GPIOH + 0x40021C00 + + + GPIOG + 0x40021800 + + + GPIOF + 0x40021400 + + + GPIOE + 0x40021000 + + + GPIOB + 0x40020400 + + + GPIOA + General-purpose I/Os + GPIO + 0x40020000 + + 0x0 + 0x400 + registers + + + + MODER + MODER + GPIO port mode register + 0x0 + 0x20 + read-write + 0xA8000000 + + + MODER15 + Port x configuration bits (y = 0..15) + 30 + 2 + + + + MODER14 + Port x configuration bits (y = 0..15) + 28 + 2 + + + + MODER13 + Port x configuration bits (y = 0..15) + 26 + 2 + + + + MODER12 + Port x configuration bits (y = 0..15) + 24 + 2 + + + + MODER11 + Port x configuration bits (y = 0..15) + 22 + 2 + + + + MODER10 + Port x configuration bits (y = 0..15) + 20 + 2 + + + + MODER9 + Port x configuration bits (y = 0..15) + 18 + 2 + + + + MODER8 + Port x configuration bits (y = 0..15) + 16 + 2 + + + + MODER7 + Port x configuration bits (y = 0..15) + 14 + 2 + + + + MODER6 + Port x configuration bits (y = 0..15) + 12 + 2 + + + + MODER5 + Port x configuration bits (y = 0..15) + 10 + 2 + + + + MODER4 + Port x configuration bits (y = 0..15) + 8 + 2 + + + + MODER3 + Port x configuration bits (y = 0..15) + 6 + 2 + + + + MODER2 + Port x configuration bits (y = 0..15) + 4 + 2 + + + + MODER1 + Port x configuration bits (y = 0..15) + 2 + 2 + + + + MODER0 + Port x configuration bits (y = 0..15) + 0 + 2 + + MODER0 + read-write + + Input + Input mode (reset state) + 0 + + + Output + General purpose output mode + 1 + + + Alternate + Alternate function mode + 2 + + + Analog + Analog mode + 3 + + + + + + + OTYPER + OTYPER + GPIO port output type register + 0x4 + 0x20 + read-write + 0x00000000 + + + OT15 + Port x configuration bits (y = 0..15) + 15 + 1 + + + + OT14 + Port x configuration bits (y = 0..15) + 14 + 1 + + + + OT13 + Port x configuration bits (y = 0..15) + 13 + 1 + + + + OT12 + Port x configuration bits (y = 0..15) + 12 + 1 + + + + OT11 + Port x configuration bits (y = 0..15) + 11 + 1 + + + + OT10 + Port x configuration bits (y = 0..15) + 10 + 1 + + + + OT9 + Port x configuration bits (y = 0..15) + 9 + 1 + + + + OT8 + Port x configuration bits (y = 0..15) + 8 + 1 + + + + OT7 + Port x configuration bits (y = 0..15) + 7 + 1 + + + + OT6 + Port x configuration bits (y = 0..15) + 6 + 1 + + + + OT5 + Port x configuration bits (y = 0..15) + 5 + 1 + + + + OT4 + Port x configuration bits (y = 0..15) + 4 + 1 + + + + OT3 + Port x configuration bits (y = 0..15) + 3 + 1 + + + + OT2 + Port x configuration bits (y = 0..15) + 2 + 1 + + + + OT1 + Port x configuration bits (y = 0..15) + 1 + 1 + + + + OT0 + Port x configuration bits (y = 0..15) + 0 + 1 + + OT0 + read-write + + PushPull + Output push-pull (reset state) + 0 + + + OpenDrain + Output open-drain + 1 + + + + + + + OSPEEDR + GPIOB_OSPEEDR + GPIO port output speed register + 0x8 + 0x20 + read-write + 0x00000000 + + + OSPEEDR15 + Port x configuration bits (y = 0..15) + 30 + 2 + + + + OSPEEDR14 + Port x configuration bits (y = 0..15) + 28 + 2 + + + + OSPEEDR13 + Port x configuration bits (y = 0..15) + 26 + 2 + + + + OSPEEDR12 + Port x configuration bits (y = 0..15) + 24 + 2 + + + + OSPEEDR11 + Port x configuration bits (y = 0..15) + 22 + 2 + + + + OSPEEDR10 + Port x configuration bits (y = 0..15) + 20 + 2 + + + + OSPEEDR9 + Port x configuration bits (y = 0..15) + 18 + 2 + + + + OSPEEDR8 + Port x configuration bits (y = 0..15) + 16 + 2 + + + + OSPEEDR7 + Port x configuration bits (y = 0..15) + 14 + 2 + + + + OSPEEDR6 + Port x configuration bits (y = 0..15) + 12 + 2 + + + + OSPEEDR5 + Port x configuration bits (y = 0..15) + 10 + 2 + + + + OSPEEDR4 + Port x configuration bits (y = 0..15) + 8 + 2 + + + + OSPEEDR3 + Port x configuration bits (y = 0..15) + 6 + 2 + + + + OSPEEDR2 + Port x configuration bits (y = 0..15) + 4 + 2 + + + + OSPEEDR1 + Port x configuration bits (y = 0..15) + 2 + 2 + + + + OSPEEDR0 + Port x configuration bits (y = 0..15) + 0 + 2 + + OSPEEDR0 + read-write + + LowSpeed + Low speed + 0 + + + MediumSpeed + Medium speed + 1 + + + HighSpeed + High speed + 2 + + + VeryHighSpeed + Very high speed + 3 + + + + + + + PUPDR + PUPDR + GPIO port pull-up/pull-down register + 0xC + 0x20 + read-write + 0x64000000 + + + PUPDR15 + Port x configuration bits (y = 0..15) + 30 + 2 + + + + PUPDR14 + Port x configuration bits (y = 0..15) + 28 + 2 + + + + PUPDR13 + Port x configuration bits (y = 0..15) + 26 + 2 + + + + PUPDR12 + Port x configuration bits (y = 0..15) + 24 + 2 + + + + PUPDR11 + Port x configuration bits (y = 0..15) + 22 + 2 + + + + PUPDR10 + Port x configuration bits (y = 0..15) + 20 + 2 + + + + PUPDR9 + Port x configuration bits (y = 0..15) + 18 + 2 + + + + PUPDR8 + Port x configuration bits (y = 0..15) + 16 + 2 + + + + PUPDR7 + Port x configuration bits (y = 0..15) + 14 + 2 + + + + PUPDR6 + Port x configuration bits (y = 0..15) + 12 + 2 + + + + PUPDR5 + Port x configuration bits (y = 0..15) + 10 + 2 + + + + PUPDR4 + Port x configuration bits (y = 0..15) + 8 + 2 + + + + PUPDR3 + Port x configuration bits (y = 0..15) + 6 + 2 + + + + PUPDR2 + Port x configuration bits (y = 0..15) + 4 + 2 + + + + PUPDR1 + Port x configuration bits (y = 0..15) + 2 + 2 + + + + PUPDR0 + Port x configuration bits (y = 0..15) + 0 + 2 + + PUPDR0 + read-write + + Floating + No pull-up, pull-down + 0 + + + PullUp + Pull-up + 1 + + + PullDown + Pull-down + 2 + + + + + + + IDR + IDR + GPIO port input data register + 0x10 + 0x20 + read-only + 0x00000000 + + + IDR15 + Port input data (y = 0..15) + 15 + 1 + + + + IDR14 + Port input data (y = 0..15) + 14 + 1 + + + + IDR13 + Port input data (y = 0..15) + 13 + 1 + + + + IDR12 + Port input data (y = 0..15) + 12 + 1 + + + + IDR11 + Port input data (y = 0..15) + 11 + 1 + + + + IDR10 + Port input data (y = 0..15) + 10 + 1 + + + + IDR9 + Port input data (y = 0..15) + 9 + 1 + + + + IDR8 + Port input data (y = 0..15) + 8 + 1 + + + + IDR7 + Port input data (y = 0..15) + 7 + 1 + + + + IDR6 + Port input data (y = 0..15) + 6 + 1 + + + + IDR5 + Port input data (y = 0..15) + 5 + 1 + + + + IDR4 + Port input data (y = 0..15) + 4 + 1 + + + + IDR3 + Port input data (y = 0..15) + 3 + 1 + + + + IDR2 + Port input data (y = 0..15) + 2 + 1 + + + + IDR1 + Port input data (y = 0..15) + 1 + 1 + + + + IDR0 + Port input data (y = 0..15) + 0 + 1 + + IDR0 + read + + Low + Input is logic low + 0 + + + High + Input is logic high + 1 + + + + + + + ODR + ODR + GPIO port output data register + 0x14 + 0x20 + read-write + 0x00000000 + + + ODR15 + Port output data (y = 0..15) + 15 + 1 + + + + ODR14 + Port output data (y = 0..15) + 14 + 1 + + + + ODR13 + Port output data (y = 0..15) + 13 + 1 + + + + ODR12 + Port output data (y = 0..15) + 12 + 1 + + + + ODR11 + Port output data (y = 0..15) + 11 + 1 + + + + ODR10 + Port output data (y = 0..15) + 10 + 1 + + + + ODR9 + Port output data (y = 0..15) + 9 + 1 + + + + ODR8 + Port output data (y = 0..15) + 8 + 1 + + + + ODR7 + Port output data (y = 0..15) + 7 + 1 + + + + ODR6 + Port output data (y = 0..15) + 6 + 1 + + + + ODR5 + Port output data (y = 0..15) + 5 + 1 + + + + ODR4 + Port output data (y = 0..15) + 4 + 1 + + + + ODR3 + Port output data (y = 0..15) + 3 + 1 + + + + ODR2 + Port output data (y = 0..15) + 2 + 1 + + + + ODR1 + Port output data (y = 0..15) + 1 + 1 + + + + ODR0 + Port output data (y = 0..15) + 0 + 1 + + ODR0 + read-write + + Low + Set output to logic low + 0 + + + High + Set output to logic high + 1 + + + + + + + BSRR + BSRR + GPIO port bit set/reset register + 0x18 + 0x20 + write-only + 0x00000000 + + + BR15 + Port x reset bit y (y = 0..15) + 31 + 1 + + + + BR14 + Port x reset bit y (y = 0..15) + 30 + 1 + + + + BR13 + Port x reset bit y (y = 0..15) + 29 + 1 + + + + BR12 + Port x reset bit y (y = 0..15) + 28 + 1 + + + + BR11 + Port x reset bit y (y = 0..15) + 27 + 1 + + + + BR10 + Port x reset bit y (y = 0..15) + 26 + 1 + + + + BR9 + Port x reset bit y (y = 0..15) + 25 + 1 + + + + BR8 + Port x reset bit y (y = 0..15) + 24 + 1 + + + + BR7 + Port x reset bit y (y = 0..15) + 23 + 1 + + + + BR6 + Port x reset bit y (y = 0..15) + 22 + 1 + + + + BR5 + Port x reset bit y (y = 0..15) + 21 + 1 + + + + BR4 + Port x reset bit y (y = 0..15) + 20 + 1 + + + + BR3 + Port x reset bit y (y = 0..15) + 19 + 1 + + + + BR2 + Port x reset bit y (y = 0..15) + 18 + 1 + + + + BR1 + Port x reset bit y (y = 0..15) + 17 + 1 + + + + BR0 + Port x set bit y (y= 0..15) + 16 + 1 + + BR0W + write + + Reset + Resets the corresponding ODRx bit + 1 + + + + + BS15 + Port x set bit y (y= 0..15) + 15 + 1 + + + + BS14 + Port x set bit y (y= 0..15) + 14 + 1 + + + + BS13 + Port x set bit y (y= 0..15) + 13 + 1 + + + + BS12 + Port x set bit y (y= 0..15) + 12 + 1 + + + + BS11 + Port x set bit y (y= 0..15) + 11 + 1 + + + + BS10 + Port x set bit y (y= 0..15) + 10 + 1 + + + + BS9 + Port x set bit y (y= 0..15) + 9 + 1 + + + + BS8 + Port x set bit y (y= 0..15) + 8 + 1 + + + + BS7 + Port x set bit y (y= 0..15) + 7 + 1 + + + + BS6 + Port x set bit y (y= 0..15) + 6 + 1 + + + + BS5 + Port x set bit y (y= 0..15) + 5 + 1 + + + + BS4 + Port x set bit y (y= 0..15) + 4 + 1 + + + + BS3 + Port x set bit y (y= 0..15) + 3 + 1 + + + + BS2 + Port x set bit y (y= 0..15) + 2 + 1 + + + + BS1 + Port x set bit y (y= 0..15) + 1 + 1 + + + + BS0 + Port x set bit y (y= 0..15) + 0 + 1 + + BS0W + write + + Set + Sets the corresponding ODRx bit + 1 + + + + + + + LCKR + LCKR + GPIO port configuration lock register + 0x1C + 0x20 + read-write + 0x00000000 + + + LCKK + Port x lock bit y (y= 0..15) + 16 + 1 + + LCKK + read-write + + NotActive + Port configuration lock key not active + 0 + + + Active + Port configuration lock key active + 1 + + + + + LCK15 + Port x lock bit y (y= 0..15) + 15 + 1 + + + + LCK14 + Port x lock bit y (y= 0..15) + 14 + 1 + + + + LCK13 + Port x lock bit y (y= 0..15) + 13 + 1 + + + + LCK12 + Port x lock bit y (y= 0..15) + 12 + 1 + + + + LCK11 + Port x lock bit y (y= 0..15) + 11 + 1 + + + + LCK10 + Port x lock bit y (y= 0..15) + 10 + 1 + + + + LCK9 + Port x lock bit y (y= 0..15) + 9 + 1 + + + + LCK8 + Port x lock bit y (y= 0..15) + 8 + 1 + + + + LCK7 + Port x lock bit y (y= 0..15) + 7 + 1 + + + + LCK6 + Port x lock bit y (y= 0..15) + 6 + 1 + + + + LCK5 + Port x lock bit y (y= 0..15) + 5 + 1 + + + + LCK4 + Port x lock bit y (y= 0..15) + 4 + 1 + + + + LCK3 + Port x lock bit y (y= 0..15) + 3 + 1 + + + + LCK2 + Port x lock bit y (y= 0..15) + 2 + 1 + + + + LCK1 + Port x lock bit y (y= 0..15) + 1 + 1 + + + + LCK0 + Port x lock bit y (y= 0..15) + 0 + 1 + + LCK0 + read-write + + Unlocked + Port configuration not locked + 0 + + + Locked + Port configuration locked + 1 + + + + + + + AFRL + AFRL + GPIO alternate function low register + 0x20 + 0x20 + read-write + 0x00000000 + + + AFRL7 + Alternate function selection for port x bit y (y = 0..7) + 28 + 4 + + + + AFRL6 + Alternate function selection for port x bit y (y = 0..7) + 24 + 4 + + + + AFRL5 + Alternate function selection for port x bit y (y = 0..7) + 20 + 4 + + + + AFRL4 + Alternate function selection for port x bit y (y = 0..7) + 16 + 4 + + + + AFRL3 + Alternate function selection for port x bit y (y = 0..7) + 12 + 4 + + + + AFRL2 + Alternate function selection for port x bit y (y = 0..7) + 8 + 4 + + + + AFRL1 + Alternate function selection for port x bit y (y = 0..7) + 4 + 4 + + + + AFRL0 + Alternate function selection for port x bit y (y = 0..7) + 0 + 4 + + AFRL0 + read-write + + AF0 + AF0 + 0 + + + AF1 + AF1 + 1 + + + AF2 + AF2 + 2 + + + AF3 + AF3 + 3 + + + AF4 + AF4 + 4 + + + AF5 + AF5 + 5 + + + AF6 + AF6 + 6 + + + AF7 + AF7 + 7 + + + AF8 + AF8 + 8 + + + AF9 + AF9 + 9 + + + AF10 + AF10 + 10 + + + AF11 + AF11 + 11 + + + AF12 + AF12 + 12 + + + AF13 + AF13 + 13 + + + AF14 + AF14 + 14 + + + AF15 + AF15 + 15 + + + + + + + AFRH + AFRH + GPIO alternate function high register + 0x24 + 0x20 + read-write + 0x00000000 + + + AFRH15 + Alternate function selection for port x bit y (y = 8..15) + 28 + 4 + + + + AFRH14 + Alternate function selection for port x bit y (y = 8..15) + 24 + 4 + + + + AFRH13 + Alternate function selection for port x bit y (y = 8..15) + 20 + 4 + + + + AFRH12 + Alternate function selection for port x bit y (y = 8..15) + 16 + 4 + + + + AFRH11 + Alternate function selection for port x bit y (y = 8..15) + 12 + 4 + + + + AFRH10 + Alternate function selection for port x bit y (y = 8..15) + 8 + 4 + + + + AFRH9 + Alternate function selection for port x bit y (y = 8..15) + 4 + 4 + + + + AFRH8 + Alternate function selection for port x bit y (y = 8..15) + 0 + 4 + + AFRH8 + read-write + + AF0 + AF0 + 0 + + + AF1 + AF1 + 1 + + + AF2 + AF2 + 2 + + + AF3 + AF3 + 3 + + + AF4 + AF4 + 4 + + + AF5 + AF5 + 5 + + + AF6 + AF6 + 6 + + + AF7 + AF7 + 7 + + + AF8 + AF8 + 8 + + + AF9 + AF9 + 9 + + + AF10 + AF10 + 10 + + + AF11 + AF11 + 11 + + + AF12 + AF12 + 12 + + + AF13 + AF13 + 13 + + + AF14 + AF14 + 14 + + + AF15 + AF15 + 15 + + + + + + + BRR + BRR + GPIO port bit reset register + 0x28 + 0x20 + read-write + 0x00000000 + + + BR0 + Port A Reset bit 0 + 0 + 1 + + + BR1 + Port A Reset bit 1 + 1 + 1 + + + BR2 + Port A Reset bit 2 + 2 + 1 + + + BR3 + Port A Reset bit 3 + 3 + 1 + + + BR4 + Port A Reset bit 4 + 4 + 1 + + + BR5 + Port A Reset bit 5 + 5 + 1 + + + BR6 + Port A Reset bit 6 + 6 + 1 + + + BR7 + Port A Reset bit 7 + 7 + 1 + + + BR8 + Port A Reset bit 8 + 8 + 1 + + + BR9 + Port A Reset bit 9 + 9 + 1 + + + BR10 + Port A Reset bit 10 + 10 + 1 + + + BR11 + Port A Reset bit 11 + 11 + 1 + + + BR12 + Port A Reset bit 12 + 12 + 1 + + + BR13 + Port A Reset bit 13 + 13 + 1 + + + BR14 + Port A Reset bit 14 + 14 + 1 + + + BR15 + Port A Reset bit 15 + 15 + 1 + + + + + + + SYSCFG + System configuration controller + SYSCFG + 0x40013800 + + 0x0 + 0x400 + registers + + + + MEMRMP + MEMRM + memory remap register + 0x0 + 0x20 + read-write + 0x00000000 + + + MEM_BOOT + Memory mapping selection + 0 + 1 + + + SWP_FMC + FMC memory mapping swap + 10 + 2 + + + + + PMC + PMC + peripheral mode configuration register + 0x4 + 0x20 + read-write + 0x00000000 + + + MII_RMII_SEL + Ethernet PHY interface selection + 23 + 1 + + + ADC1DC2 + ADC1DC2 + 16 + 1 + + + ADC2DC2 + ADC2DC2 + 17 + 1 + + + ADC3DC2 + ADC3DC2 + 18 + 1 + + + + + EXTICR1 + EXTICR1 + external interrupt configuration register 1 + 0x8 + 0x20 + read-write + 0x00000000 + + + EXTI3 + EXTI x configuration (x = 0 to 3) + 12 + 4 + + + EXTI2 + EXTI x configuration (x = 0 to 3) + 8 + 4 + + + EXTI1 + EXTI x configuration (x = 0 to 3) + 4 + 4 + + + EXTI0 + EXTI x configuration (x = 0 to 3) + 0 + 4 + + + + + EXTICR2 + EXTICR2 + external interrupt configuration register 2 + 0xC + 0x20 + read-write + 0x00000000 + + + EXTI7 + EXTI x configuration (x = 4 to 7) + 12 + 4 + + + EXTI6 + EXTI x configuration (x = 4 to 7) + 8 + 4 + + + EXTI5 + EXTI x configuration (x = 4 to 7) + 4 + 4 + + + EXTI4 + EXTI x configuration (x = 4 to 7) + 0 + 4 + + + + + EXTICR3 + EXTICR3 + external interrupt configuration register 3 + 0x10 + 0x20 + read-write + 0x00000000 + + + EXTI11 + EXTI x configuration (x = 8 to 11) + 12 + 4 + + + EXTI10 + EXTI10 + 8 + 4 + + + EXTI9 + EXTI x configuration (x = 8 to 11) + 4 + 4 + + + EXTI8 + EXTI x configuration (x = 8 to 11) + 0 + 4 + + + + + EXTICR4 + EXTICR4 + external interrupt configuration register 4 + 0x14 + 0x20 + read-write + 0x00000000 + + + EXTI15 + EXTI x configuration (x = 12 to 15) + 12 + 4 + + + EXTI14 + EXTI x configuration (x = 12 to 15) + 8 + 4 + + + EXTI13 + EXTI x configuration (x = 12 to 15) + 4 + 4 + + + EXTI12 + EXTI x configuration (x = 12 to 15) + 0 + 4 + + + + + CMPCR + CMPCR + Compensation cell control register + 0x20 + 0x20 + read-only + 0x00000000 + + + READY + READY + 8 + 1 + + + CMP_PD + Compensation cell power-down + 0 + 1 + + + + + + + SPI1 + Serial peripheral interface + SPI + 0x40013000 + + 0x0 + 0x400 + registers + + + SPI1 + SPI1 global interrupt + 35 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + BIDIMODE + Bidirectional data mode enable + 15 + 1 + + BIDIMODE + read-write + + Unidirectional + 2-line unidirectional data mode selected + 0 + + + Bidirectional + 1-line bidirectional data mode selected + 1 + + + + + BIDIOE + Output enable in bidirectional mode + 14 + 1 + + BIDIOE + read-write + + OutputDisabled + Output disabled (receive-only mode) + 0 + + + OutputEnabled + Output enabled (transmit-only mode) + 1 + + + + + CRCEN + Hardware CRC calculation enable + 13 + 1 + + CRCEN + read-write + + Disabled + CRC calculation disabled + 0 + + + Enabled + CRC calculation enabled + 1 + + + + + CRCNEXT + CRC transfer next + 12 + 1 + + CRCNEXT + read-write + + TxBuffer + Next transmit value is from Tx buffer + 0 + + + CRC + Next transmit value is from Tx CRC register + 1 + + + + + CRCL + CRC length + 11 + 1 + + CRCL + read-write + + EightBit + 8-bit CRC length + 0 + + + SixteenBit + 16-bit CRC length + 1 + + + + + RXONLY + Receive only + 10 + 1 + + RXONLY + read-write + + FullDuplex + Full duplex (Transmit and receive) + 0 + + + OutputDisabled + Output disabled (Receive-only mode) + 1 + + + + + SSM + Software slave management + 9 + 1 + + SSM + read-write + + Disabled + Software slave management disabled + 0 + + + Enabled + Software slave management enabled + 1 + + + + + SSI + Internal slave select + 8 + 1 + + SSI + read-write + + SlaveSelected + 0 is forced onto the NSS pin and the I/O value of the NSS pin is ignored + 0 + + + SlaveNotSelected + 1 is forced onto the NSS pin and the I/O value of the NSS pin is ignored + 1 + + + + + LSBFIRST + Frame format + 7 + 1 + + LSBFIRST + read-write + + MSBFirst + Data is transmitted/received with the MSB first + 0 + + + LSBFirst + Data is transmitted/received with the LSB first + 1 + + + + + SPE + SPI enable + 6 + 1 + + SPE + read-write + + Disabled + Peripheral disabled + 0 + + + Enabled + Peripheral enabled + 1 + + + + + BR + Baud rate control + 3 + 3 + + BR + read-write + + Div2 + f_PCLK / 2 + 0 + + + Div4 + f_PCLK / 4 + 1 + + + Div8 + f_PCLK / 8 + 2 + + + Div16 + f_PCLK / 16 + 3 + + + Div32 + f_PCLK / 32 + 4 + + + Div64 + f_PCLK / 64 + 5 + + + Div128 + f_PCLK / 128 + 6 + + + Div256 + f_PCLK / 256 + 7 + + + + + MSTR + Master selection + 2 + 1 + + MSTR + read-write + + Slave + Slave configuration + 0 + + + Master + Master configuration + 1 + + + + + CPOL + Clock polarity + 1 + 1 + + CPOL + read-write + + IdleLow + CK to 0 when idle + 0 + + + IdleHigh + CK to 1 when idle + 1 + + + + + CPHA + Clock phase + 0 + 1 + + CPHA + read-write + + FirstEdge + The first clock transition is the first data capture edge + 0 + + + SecondEdge + The second clock transition is the first data capture edge + 1 + + + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000700 + + + RXDMAEN + Rx buffer DMA enable + 0 + 1 + + RXDMAEN + read-write + + Disabled + Rx buffer DMA disabled + 0 + + + Enabled + Rx buffer DMA enabled + 1 + + + + + TXDMAEN + Tx buffer DMA enable + 1 + 1 + + TXDMAEN + read-write + + Disabled + Tx buffer DMA disabled + 0 + + + Enabled + Tx buffer DMA enabled + 1 + + + + + SSOE + SS output enable + 2 + 1 + + SSOE + read-write + + Disabled + SS output is disabled in master mode + 0 + + + Enabled + SS output is enabled in master mode + 1 + + + + + NSSP + NSS pulse management + 3 + 1 + + NSSP + read-write + + NoPulse + No NSS pulse + 0 + + + PulseGenerated + NSS pulse generated + 1 + + + + + FRF + Frame format + 4 + 1 + + FRF + read-write + + Motorola + SPI Motorola mode + 0 + + + TI + SPI TI mode + 1 + + + + + ERRIE + Error interrupt enable + 5 + 1 + + ERRIE + read-write + + Masked + Error interrupt masked + 0 + + + NotMasked + Error interrupt not masked + 1 + + + + + RXNEIE + RX buffer not empty interrupt enable + 6 + 1 + + RXNEIE + read-write + + Masked + RXE interrupt masked + 0 + + + NotMasked + RXE interrupt not masked + 1 + + + + + TXEIE + Tx buffer empty interrupt enable + 7 + 1 + + TXEIE + read-write + + Masked + TXE interrupt masked + 0 + + + NotMasked + TXE interrupt not masked + 1 + + + + + DS + Data size + 8 + 4 + + DS + read-write + + FourBit + 4-bit + 3 + + + FiveBit + 5-bit + 4 + + + SixBit + 6-bit + 5 + + + SevenBit + 7-bit + 6 + + + EightBit + 8-bit + 7 + + + NineBit + 9-bit + 8 + + + TenBit + 10-bit + 9 + + + ElevenBit + 11-bit + 10 + + + TwelveBit + 12-bit + 11 + + + ThirteenBit + 13-bit + 12 + + + FourteenBit + 14-bit + 13 + + + FifteenBit + 15-bit + 14 + + + SixteenBit + 16-bit + 15 + + + + + FRXTH + FIFO reception threshold + 12 + 1 + + FRXTH + read-write + + Half + RXNE event is generated if the FIFO level is greater than or equal to 1/2 (16-bit) + 0 + + + Quarter + RXNE event is generated if the FIFO level is greater than or equal to 1/4 (8-bit) + 1 + + + + + LDMA_RX + Last DMA transfer for reception + 13 + 1 + + LDMA_RX + read-write + + Even + Number of data to transfer for receive is even + 0 + + + Odd + Number of data to transfer for receive is odd + 1 + + + + + LDMA_TX + Last DMA transfer for transmission + 14 + 1 + + LDMA_TX + read-write + + Even + Number of data to transfer for transmit is even + 0 + + + Odd + Number of data to transfer for transmit is odd + 1 + + + + + + + SR + SR + status register + 0x8 + 0x20 + 0x00000002 + + + FRE + Frame format error + 8 + 1 + read-only + + FRER + read + + NoError + No frame format error + 0 + + + Error + A frame format error occurred + 1 + + + + + BSY + Busy flag + 7 + 1 + read-only + + BSYR + read + + NotBusy + SPI not busy + 0 + + + Busy + SPI busy + 1 + + + + + OVR + Overrun flag + 6 + 1 + read-only + + OVRR + read + + NoOverrun + No overrun occurred + 0 + + + Overrun + Overrun occurred + 1 + + + + + MODF + Mode fault + 5 + 1 + read-only + + MODFR + read + + NoFault + No mode fault occurred + 0 + + + Fault + Mode fault occurred + 1 + + + + + CRCERR + CRC error flag + 4 + 1 + read-write + zeroToClear + + CRCERRR + read + + Match + CRC value received matches the SPIx_RXCRCR value + 0 + + + NoMatch + CRC value received does not match the SPIx_RXCRCR value + 1 + + + + CRCERRW + write + + Clear + Clear flag + 0 + + + + + UDR + Underrun flag + 3 + 1 + read-only + + UDRR + read + + NoUnderrun + No underrun occurred + 0 + + + Underrun + Underrun occurred + 1 + + + + + CHSIDE + Channel side + 2 + 1 + read-only + + CHSIDE + read + + Left + Channel left has to be transmitted or has been received + 0 + + + Right + Channel right has to be transmitted or has been received + 1 + + + + + TXE + Transmit buffer empty + 1 + 1 + read-only + + TXE + read + + NotEmpty + Tx buffer not empty + 0 + + + Empty + Tx buffer empty + 1 + + + + + RXNE + Receive buffer not empty + 0 + 1 + read-only + + RXNE + read + + Empty + Rx buffer empty + 0 + + + NotEmpty + Rx buffer not empty + 1 + + + + + FRLVL + FIFO reception level + 9 + 2 + read-only + + FRLVLR + read + + Empty + Rx FIFO Empty + 0 + + + Quarter + Rx 1/4 FIFO + 1 + + + Half + Rx 1/2 FIFO + 2 + + + Full + Rx FIFO full + 3 + + + + + FTLVL + FIFO Transmission Level + 11 + 2 + read-only + + FTLVLR + read + + Empty + Tx FIFO Empty + 0 + + + Quarter + Tx 1/4 FIFO + 1 + + + Half + Tx 1/2 FIFO + 2 + + + Full + Tx FIFO full + 3 + + + + + + + DR + DR + data register + 0xC + 0x20 + read-write + 0x00000000 + + + DR + Data register + 0 + 16 + + + 0 + 65535 + + + + + + + CRCPR + CRCPR + CRC polynomial register + 0x10 + 0x20 + read-write + 0x00000007 + + + CRCPOLY + CRC polynomial register + 0 + 16 + + + 0 + 65535 + + + + + + + RXCRCR + RXCRCR + RX CRC register + 0x14 + 0x20 + read-only + 0x00000000 + + + RxCRC + Rx CRC register + 0 + 16 + + + 0 + 65535 + + + + + + + TXCRCR + TXCRCR + TX CRC register + 0x18 + 0x20 + read-only + 0x00000000 + + + TxCRC + Tx CRC register + 0 + 16 + + + 0 + 65535 + + + + + + + I2SCFGR + I2SCFGR + I2S configuration register + 0x1C + 0x20 + read-write + 0x00000000 + + + I2SMOD + I2S mode selection + 11 + 1 + + I2SMOD + read-write + + SPIMode + SPI mode is selected + 0 + + + I2SMode + I2S mode is selected + 1 + + + + + I2SE + I2S Enable + 10 + 1 + + I2SE + read-write + + Disabled + I2S peripheral is disabled + 0 + + + Enabled + I2S peripheral is enabled + 1 + + + + + I2SCFG + I2S configuration mode + 8 + 2 + + I2SCFG + read-write + + SlaveTx + Slave - transmit + 0 + + + SlaveRx + Slave - receive + 1 + + + MasterTx + Master - transmit + 2 + + + MasterRx + Master - receive + 3 + + + + + PCMSYNC + PCM frame synchronization + 7 + 1 + + PCMSYNC + read-write + + Short + Short frame synchronisation + 0 + + + Long + Long frame synchronisation + 1 + + + + + I2SSTD + I2S standard selection + 4 + 2 + + I2SSTD + read-write + + Philips + I2S Philips standard + 0 + + + MSB + MSB justified standard + 1 + + + LSB + LSB justified standard + 2 + + + PCM + PCM standard + 3 + + + + + CKPOL + Steady state clock polarity + 3 + 1 + + CKPOL + read-write + + IdleLow + I2S clock inactive state is low level + 0 + + + IdleHigh + I2S clock inactive state is high level + 1 + + + + + DATLEN + Data length to be transferred + 1 + 2 + + DATLEN + read-write + + SixteenBit + 16-bit data length + 0 + + + TwentyFourBit + 24-bit data length + 1 + + + ThirtyTwoBit + 32-bit data length + 2 + + + + + CHLEN + Channel length (number of bits per audio channel) + 0 + 1 + + CHLEN + read-write + + SixteenBit + 16-bit wide + 0 + + + ThirtyTwoBit + 32-bit wide + 1 + + + + + ASTRTEN + Asynchronous start enable + 12 + 1 + + + + + I2SPR + I2SPR + I2S prescaler register + 0x20 + 0x20 + read-write + 0x0000000A + + + MCKOE + Master clock output enable + 9 + 1 + + MCKOE + read-write + + Disabled + Master clock output is disabled + 0 + + + Enabled + Master clock output is enabled + 1 + + + + + ODD + Odd factor for the prescaler + 8 + 1 + + ODD + read-write + + Even + Real divider value is I2SDIV * 2 + 0 + + + Odd + Real divider value is (I2SDIV * 2) + 1 + 1 + + + + + I2SDIV + I2S Linear prescaler + 0 + 8 + + + 2 + 255 + + + + + + + + + SPI3 + 0x40003C00 + + SPI3 + SPI3 global interrupt + 51 + + + + SPI4 + 0x40013400 + + SPI4 + SPI 4 global interrupt + 84 + + + + SPI5 + 0x40015000 + + SPI5 + SPI 5 global interrupt + 85 + + + + SPI6 + 0x40015400 + + SPI6 + SPI 6 global interrupt + 86 + + + + SPI2 + Serial peripheral interface + SPI + 0x40003800 + + SPI2 + SPI2 global interrupt + 36 + + + + ADC1 + Analog-to-digital converter + ADC + 0x40012000 + + 0x0 + 0x100 + registers + + + ADC + ADC1 global interrupt + 18 + + + + SR + SR + status register + 0x0 + 0x20 + read-write + 0x00000000 + + + OVR + Overrun + 5 + 1 + + + STRT + Regular channel start flag + 4 + 1 + zeroToClear + + STRTR + read + + NotStarted + No regular channel conversion started + 0 + + + Started + Regular channel conversion has started + 1 + + + + STRTW + write + + Clear + Clear flag + 0 + + + + + JSTRT + Injected channel start flag + 3 + 1 + zeroToClear + + JSTRTR + read + + NotStarted + No injected channel conversion started + 0 + + + Started + Injected channel conversion has started + 1 + + + + JSTRTW + write + + Clear + Clear flag + 0 + + + + + JEOC + Injected channel end of conversion + 2 + 1 + zeroToClear + + JEOCR + read + + NotComplete + Conversion is not complete + 0 + + + Complete + Conversion complete + 1 + + + + JEOCW + write + + Clear + Clear flag + 0 + + + + + EOC + Regular channel end of conversion + 1 + 1 + zeroToClear + + EOCR + read + + NotComplete + Conversion is not complete + 0 + + + Complete + Conversion complete + 1 + + + + EOCW + write + + Clear + Clear flag + 0 + + + + + AWD + Analog watchdog flag + 0 + 1 + zeroToClear + + AWDR + read + + NoEvent + No analog watchdog event occurred + 0 + + + Event + Analog watchdog event occurred + 1 + + + + AWDW + write + + Clear + Clear flag + 0 + + + + + + + CR1 + CR1 + control register 1 + 0x4 + 0x20 + read-write + 0x00000000 + + + OVRIE + Overrun interrupt enable + 26 + 1 + + OVRIE + read-write + + Disabled + Overrun interrupt disabled + 0 + + + Enabled + Overrun interrupt enabled + 1 + + + + + RES + Resolution + 24 + 2 + + RES + read-write + + TwelveBit + 12-bit (15 ADCCLK cycles) + 0 + + + TenBit + 10-bit (13 ADCCLK cycles) + 1 + + + EightBit + 8-bit (11 ADCCLK cycles) + 2 + + + SixBit + 6-bit (9 ADCCLK cycles) + 3 + + + + + AWDEN + Analog watchdog enable on regular channels + 23 + 1 + + AWDEN + read-write + + Disabled + Analog watchdog disabled on regular channels + 0 + + + Enabled + Analog watchdog enabled on regular channels + 1 + + + + + JAWDEN + Analog watchdog enable on injected channels + 22 + 1 + + JAWDEN + read-write + + Disabled + Analog watchdog disabled on injected channels + 0 + + + Enabled + Analog watchdog enabled on injected channels + 1 + + + + + DISCNUM + Discontinuous mode channel count + 13 + 3 + + + 0 + 7 + + + + + JDISCEN + Discontinuous mode on injected channels + 12 + 1 + + JDISCEN + read-write + + Disabled + Discontinuous mode on injected channels disabled + 0 + + + Enabled + Discontinuous mode on injected channels enabled + 1 + + + + + DISCEN + Discontinuous mode on regular channels + 11 + 1 + + DISCEN + read-write + + Disabled + Discontinuous mode on regular channels disabled + 0 + + + Enabled + Discontinuous mode on regular channels enabled + 1 + + + + + JAUTO + Automatic injected group conversion + 10 + 1 + + JAUTO + read-write + + Disabled + Automatic injected group conversion disabled + 0 + + + Enabled + Automatic injected group conversion enabled + 1 + + + + + AWDSGL + Enable the watchdog on a single channel in scan mode + 9 + 1 + + AWDSGL + read-write + + AllChannels + Analog watchdog enabled on all channels + 0 + + + SingleChannel + Analog watchdog enabled on a single channel + 1 + + + + + SCAN + Scan mode + 8 + 1 + + SCAN + read-write + + Disabled + Scan mode disabled + 0 + + + Enabled + Scan mode enabled + 1 + + + + + JEOCIE + Interrupt enable for injected channels + 7 + 1 + + JEOCIE + read-write + + Disabled + JEOC interrupt disabled + 0 + + + Enabled + JEOC interrupt enabled + 1 + + + + + AWDIE + Analog watchdog interrupt enable + 6 + 1 + + AWDIE + read-write + + Disabled + Analogue watchdog interrupt disabled + 0 + + + Enabled + Analogue watchdog interrupt enabled + 1 + + + + + EOCIE + Interrupt enable for EOC + 5 + 1 + + EOCIE + read-write + + Disabled + EOC interrupt disabled + 0 + + + Enabled + EOC interrupt enabled + 1 + + + + + AWDCH + Analog watchdog channel select bits + 0 + 5 + + + 0 + 18 + + + + + + + CR2 + CR2 + control register 2 + 0x8 + 0x20 + read-write + 0x00000000 + + + SWSTART + Start conversion of regular channels + 30 + 1 + + SWSTARTW + write + + Start + Starts conversion of regular channels + 1 + + + + + EXTEN + External trigger enable for regular channels + 28 + 2 + + EXTEN + read-write + + Disabled + Trigger detection disabled + 0 + + + RisingEdge + Trigger detection on the rising edge + 1 + + + FallingEdge + Trigger detection on the falling edge + 2 + + + BothEdges + Trigger detection on both the rising and falling edges + 3 + + + + + EXTSEL + External event select for regular group + 24 + 4 + + EXTSEL + read-write + + TIM1CH1 + Timer 1 CH1 + 0 + + + TIM1CH2 + Timer 1 CH2 + 1 + + + TIM1CH3 + Timer 1 CH3 + 2 + + + TIM2CH2 + Timer 2 CH2 + 3 + + + TIM5TRGO + Timer 5 TRGO + 4 + + + TIM4CH4 + Timer 4 CH4 + 5 + + + TIM3CH4 + Timer 3 CH4 + 6 + + + TIM8TRGO + Timer 8 TRGO + 7 + + + TIM8TRGO2 + Timer 8 TRGO(2) + 8 + + + TIM1TRGO + Timer 1 TRGO + 9 + + + TIM1TRGO2 + Timer 1 TRGO(2) + 10 + + + TIM2TRGO + Timer 2 TRGO + 11 + + + TIM4TRGO + Timer 4 TRGO + 12 + + + TIM6TRGO + Timer 6 TRGO + 13 + + + EXTI11 + EXTI line 11 + 15 + + + + + JSWSTART + Start conversion of injected channels + 22 + 1 + + JSWSTARTW + write + + Start + Starts conversion of injected channels + 1 + + + + + JEXTEN + External trigger enable for injected channels + 20 + 2 + + JEXTEN + read-write + + Disabled + Trigger detection disabled + 0 + + + RisingEdge + Trigger detection on the rising edge + 1 + + + FallingEdge + Trigger detection on the falling edge + 2 + + + BothEdges + Trigger detection on both the rising and falling edges + 3 + + + + + JEXTSEL + External event select for injected group + 16 + 4 + + JEXTSEL + read-write + + TIM1TRGO + Timer 1 TRGO + 0 + + + TIM1CH4 + Timer 1 CH4 + 1 + + + TIM2TRGO + Timer 2 TRGO + 2 + + + TIM2CH1 + Timer 2 CH1 + 3 + + + TIM3CH4 + Timer 3 CH4 + 4 + + + TIM4TRGO + Timer 4 TRGO + 5 + + + TIM8CH4 + Timer 8 CH4 + 7 + + + TIM1TRGO2 + Timer 1 TRGO(2) + 8 + + + TIM8TRGO + Timer 8 TRGO + 9 + + + TIM8TRGO2 + Timer 8 TRGO(2) + 10 + + + TIM3CH3 + Timer 3 CH3 + 11 + + + TIM5TRGO + Timer 5 TRGO + 12 + + + TIM3CH1 + Timer 3 CH1 + 13 + + + TIM6TRGO + Timer 6 TRGO + 14 + + + + + ALIGN + Data alignment + 11 + 1 + + ALIGN + read-write + + Right + Right alignment + 0 + + + Left + Left alignment + 1 + + + + + EOCS + End of conversion selection + 10 + 1 + + EOCS + read-write + + EachSequence + The EOC bit is set at the end of each sequence of regular conversions + 0 + + + EachConversion + The EOC bit is set at the end of each regular conversion + 1 + + + + + DDS + DMA disable selection (for single ADC mode) + 9 + 1 + + DDS + read-write + + Single + No new DMA request is issued after the last transfer + 0 + + + Continuous + DMA requests are issued as long as data are converted and DMA=1 + 1 + + + + + DMA + Direct memory access mode (for single ADC mode) + 8 + 1 + + DMA + read-write + + Disabled + DMA mode disabled + 0 + + + Enabled + DMA mode enabled + 1 + + + + + CONT + Continuous conversion + 1 + 1 + + CONT + read-write + + Single + Single conversion mode + 0 + + + Continuous + Continuous conversion mode + 1 + + + + + ADON + A/D Converter ON / OFF + 0 + 1 + + ADON + read-write + + Disabled + Disable ADC conversion and go to power down mode + 0 + + + Enabled + Enable ADC + 1 + + + + + + + SMPR1 + SMPR1 + sample time register 1 + 0xC + 0x20 + read-write + 0x00000000 + + + SMPx_x + Sample time bits + 0 + 32 + + SMPx_x + read-write + + Cycles3 + 3 cycles + 0 + + + Cycles15 + 15 cycles + 1 + + + Cycles28 + 28 cycles + 2 + + + Cycles56 + 56 cycles + 3 + + + Cycles84 + 84 cycles + 4 + + + Cycles112 + 112 cycles + 5 + + + Cycles144 + 144 cycles + 6 + + + Cycles480 + 480 cycles + 7 + + + + + + + SMPR2 + SMPR2 + sample time register 2 + 0x10 + 0x20 + read-write + 0x00000000 + + + SMPx_x + Sample time bits + 0 + 32 + + SMPx_x + read-write + + Cycles3 + 3 cycles + 0 + + + Cycles15 + 15 cycles + 1 + + + Cycles28 + 28 cycles + 2 + + + Cycles56 + 56 cycles + 3 + + + Cycles84 + 84 cycles + 4 + + + Cycles112 + 112 cycles + 5 + + + Cycles144 + 144 cycles + 6 + + + Cycles480 + 480 cycles + 7 + + + + + + + 4 + 0x4 + 1-4 + JOFR%s + JOFR1 + injected channel data offset register x + 0x14 + 0x20 + read-write + 0x00000000 + + + JOFFSET + Data offset for injected channel x + 0 + 12 + + + 0 + 4095 + + + + + + + HTR + HTR + watchdog higher threshold register + 0x24 + 0x20 + read-write + 0x00000FFF + + + HT + Analog watchdog higher threshold + 0 + 12 + + + 0 + 4095 + + + + + + + LTR + LTR + watchdog lower threshold register + 0x28 + 0x20 + read-write + 0x00000000 + + + LT + Analog watchdog lower threshold + 0 + 12 + + + 0 + 4095 + + + + + + + SQR1 + SQR1 + regular sequence register 1 + 0x2C + 0x20 + read-write + 0x00000000 + + + L + Regular channel sequence length + 20 + 4 + + + 0 + 15 + + + + + SQ16 + 16th conversion in regular sequence + 15 + 5 + + + 0 + 18 + + + + + SQ15 + 15th conversion in regular sequence + 10 + 5 + + + 0 + 18 + + + + + SQ14 + 14th conversion in regular sequence + 5 + 5 + + + 0 + 18 + + + + + SQ13 + 13th conversion in regular sequence + 0 + 5 + + + 0 + 18 + + + + + + + SQR2 + SQR2 + regular sequence register 2 + 0x30 + 0x20 + read-write + 0x00000000 + + + SQ12 + 12th conversion in regular sequence + 25 + 5 + + + 0 + 18 + + + + + SQ11 + 11th conversion in regular sequence + 20 + 5 + + + 0 + 18 + + + + + SQ10 + 10th conversion in regular sequence + 15 + 5 + + + 0 + 18 + + + + + SQ9 + 9th conversion in regular sequence + 10 + 5 + + + 0 + 18 + + + + + SQ8 + 8th conversion in regular sequence + 5 + 5 + + + 0 + 18 + + + + + SQ7 + 7th conversion in regular sequence + 0 + 5 + + + 0 + 18 + + + + + + + SQR3 + SQR3 + regular sequence register 3 + 0x34 + 0x20 + read-write + 0x00000000 + + + SQ6 + 6th conversion in regular sequence + 25 + 5 + + + 0 + 18 + + + + + SQ5 + 5th conversion in regular sequence + 20 + 5 + + + 0 + 18 + + + + + SQ4 + 4th conversion in regular sequence + 15 + 5 + + + 0 + 18 + + + + + SQ3 + 3rd conversion in regular sequence + 10 + 5 + + + 0 + 18 + + + + + SQ2 + 2nd conversion in regular sequence + 5 + 5 + + + 0 + 18 + + + + + SQ1 + 1st conversion in regular sequence + 0 + 5 + + + 0 + 18 + + + + + + + JSQR + JSQR + injected sequence register + 0x38 + 0x20 + read-write + 0x00000000 + + + JL + Injected sequence length + 20 + 2 + + + 0 + 3 + + + + + JSQ4 + 4th conversion in injected sequence + 15 + 5 + + + 0 + 18 + + + + + JSQ3 + 3rd conversion in injected sequence + 10 + 5 + + + 0 + 18 + + + + + JSQ2 + 2nd conversion in injected sequence + 5 + 5 + + + 0 + 18 + + + + + JSQ1 + 1st conversion in injected sequence + 0 + 5 + + + 0 + 18 + + + + + + + 4 + 0x4 + 1-4 + JDR%s + JDR1 + injected data register x + 0x3C + 0x20 + read-only + 0x00000000 + + + JDATA + Injected data + 0 + 16 + + + + + DR + DR + regular data register + 0x4C + 0x20 + read-only + 0x00000000 + + + DATA + Regular data + 0 + 16 + + + + + + + ADC2 + 0x40012100 + + + ADC3 + 0x40012200 + + + DAC + Digital-to-analog converter + DAC + 0x40007400 + + 0x0 + 0x400 + registers + + + + CR + CR + control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DMAUDRIE2 + DAC channel2 DMA underrun interrupt enable + 29 + 1 + + + + DMAEN2 + DAC channel2 DMA enable + 28 + 1 + + + + MAMP2 + DAC channel2 mask/amplitude selector + 24 + 4 + + + 0 + 15 + + + + + WAVE2 + DAC channel2 noise/triangle wave generation enable + 22 + 2 + + WAVE2 + read-write + + Disabled + Wave generation disabled + 0 + + + Noise + Noise wave generation enabled + 1 + + + Triangle + Triangle wave generation enabled + 2 + + + + + TSEL2 + DAC channel2 trigger selection + 19 + 3 + + TSEL2 + read-write + + TIM6_TRGO + Timer 6 TRGO event + 0 + + + TIM8_TRGO + Timer 8 TRGO event + 1 + + + TIM7_TRGO + Timer 7 TRGO event + 2 + + + TIM5_TRGO + Timer 5 TRGO event + 3 + + + TIM2_TRGO + Timer 2 TRGO event + 4 + + + TIM4_TRGO + Timer 4 TRGO event + 5 + + + EXTI9 + EXTI line9 + 6 + + + SOFTWARE + Software trigger + 7 + + + + + TEN2 + DAC channel2 trigger enable + 18 + 1 + + + + BOFF2 + DAC channel2 output buffer disable + 17 + 1 + + + + EN2 + DAC channel2 enable + 16 + 1 + + + + DMAUDRIE1 + DAC channel1 DMA Underrun Interrupt enable + 13 + 1 + + DMAUDRIE1 + read-write + + Disabled + DAC channel X DMA Underrun Interrupt disabled + 0 + + + Enabled + DAC channel X DMA Underrun Interrupt enabled + 1 + + + + + DMAEN1 + DAC channel1 DMA enable + 12 + 1 + + DMAEN1 + read-write + + Disabled + DAC channel X DMA mode disabled + 0 + + + Enabled + DAC channel X DMA mode enabled + 1 + + + + + MAMP1 + DAC channel1 mask/amplitude selector + 8 + 4 + + + 0 + 15 + + + + + WAVE1 + DAC channel1 noise/triangle wave generation enable + 6 + 2 + + WAVE1 + read-write + + Disabled + Wave generation disabled + 0 + + + Noise + Noise wave generation enabled + 1 + + + Triangle + Triangle wave generation enabled + 2 + + + + + TSEL1 + DAC channel1 trigger selection + 3 + 3 + + TSEL1 + read-write + + TIM6_TRGO + Timer 6 TRGO event + 0 + + + TIM3_TRGO + Timer 3 TRGO event + 1 + + + TIM7_TRGO + Timer 7 TRGO event + 2 + + + TIM15_TRGO + Timer 15 TRGO event + 3 + + + TIM2_TRGO + Timer 2 TRGO event + 4 + + + EXTI9 + EXTI line9 + 6 + + + SOFTWARE + Software trigger + 7 + + + + + TEN1 + DAC channel1 trigger enable + 2 + 1 + + TEN1 + read-write + + Disabled + DAC channel X trigger disabled + 0 + + + Enabled + DAC channel X trigger enabled + 1 + + + + + BOFF1 + DAC channel1 output buffer disable + 1 + 1 + + BOFF1 + read-write + + Enabled + DAC channel X output buffer enabled + 0 + + + Disabled + DAC channel X output buffer disabled + 1 + + + + + EN1 + DAC channel1 enable + 0 + 1 + + EN1 + read-write + + Disabled + DAC channel X disabled + 0 + + + Enabled + DAC channel X enabled + 1 + + + + + + + SWTRIGR + SWTRIGR + software trigger register + 0x4 + 0x20 + write-only + 0x00000000 + + + SWTRIG2 + DAC channel2 software trigger + 1 + 1 + + + + SWTRIG1 + DAC channel1 software trigger + 0 + 1 + + SWTRIG1 + write + + Disabled + DAC channel X software trigger disabled + 0 + + + Enabled + DAC channel X software trigger enabled + 1 + + + + + + + DHR12R1 + DHR12R1 + channel1 12-bit right-aligned data holding register + 0x8 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit right-aligned data + 0 + 12 + + + 0 + 4095 + + + + + + + DHR12L1 + DHR12L1 + channel1 12-bit left aligned data holding register + 0xC + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 12-bit left-aligned data + 4 + 12 + + + 0 + 4095 + + + + + + + DHR8R1 + DHR8R1 + channel1 8-bit right aligned data holding register + 0x10 + 0x20 + read-write + 0x00000000 + + + DACC1DHR + DAC channel1 8-bit right-aligned data + 0 + 8 + + + 0 + 255 + + + + + + + DHR12R2 + DHR12R2 + channel2 12-bit right aligned data holding register + 0x14 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + 0 + 12 + + + 0 + 4095 + + + + + + + DHR12L2 + DHR12L2 + channel2 12-bit left aligned data holding register + 0x18 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + 4 + 12 + + + 0 + 4095 + + + + + + + DHR8R2 + DHR8R2 + channel2 8-bit right-aligned data holding register + 0x1C + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + 0 + 8 + + + 0 + 255 + + + + + + + DHR12RD + DHR12RD + Dual DAC 12-bit right-aligned data holding register + 0x20 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit right-aligned data + 16 + 12 + + + 0 + 4095 + + + + + DACC1DHR + DAC channel1 12-bit right-aligned data + 0 + 12 + + + 0 + 4095 + + + + + + + DHR12LD + DHR12LD + DUAL DAC 12-bit left aligned data holding register + 0x24 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 12-bit left-aligned data + 20 + 12 + + + 0 + 4095 + + + + + DACC1DHR + DAC channel1 12-bit left-aligned data + 4 + 12 + + + 0 + 4095 + + + + + + + DHR8RD + DHR8RD + DUAL DAC 8-bit right aligned data holding register + 0x28 + 0x20 + read-write + 0x00000000 + + + DACC2DHR + DAC channel2 8-bit right-aligned data + 8 + 8 + + + 0 + 255 + + + + + DACC1DHR + DAC channel1 8-bit right-aligned data + 0 + 8 + + + 0 + 255 + + + + + + + DOR1 + DOR1 + channel1 data output register + 0x2C + 0x20 + read-only + 0x00000000 + + + DACC1DOR + DAC channel1 data output + 0 + 12 + + + + + DOR2 + DOR2 + channel2 data output register + 0x30 + 0x20 + read-only + 0x00000000 + + + DACC2DOR + DAC channel2 data output + 0 + 12 + + + + + SR + SR + status register + 0x34 + 0x20 + read-write + 0x00000000 + + + DMAUDR2 + DAC channel2 DMA underrun flag + 29 + 1 + + + + DMAUDR1 + DAC channel1 DMA underrun flag + 13 + 1 + + DMAUDR1 + read-write + + NoUnderrun + No DMA underrun error condition occurred for DAC channel X + 0 + + + Underrun + DMA underrun error condition occurred for DAC channel X + 1 + + + + + + + + + PWR + Power control + PWR + 0x40007000 + + 0x0 + 0x400 + registers + + + PVD + PVD through EXTI line detection interrupt + 1 + + + + CR1 + CR1 + power control register + 0x0 + 0x20 + read-write + 0x0000C000 + + + LPDS + Low-power deep sleep + 0 + 1 + + + PDDS + Power down deepsleep + 1 + 1 + + PDDS + read-write + + STOP_MODE + Enter Stop mode when the CPU enters deepsleep + 0 + + + STANDBY_MODE + Enter Standby mode when the CPU enters deepsleep + 1 + + + + + CSBF + Clear standby flag + 3 + 1 + + + PVDE + Power voltage detector enable + 4 + 1 + + + PLS + PVD level selection + 5 + 3 + + + DBP + Disable backup domain write protection + 8 + 1 + + + FPDS + Flash power down in Stop mode + 9 + 1 + + + LPUDS + Low-power regulator in deepsleep under-drive mode + 10 + 1 + + + MRUDS + Main regulator in deepsleep under-drive mode + 11 + 1 + + + ADCDC1 + ADCDC1 + 13 + 1 + + + VOS + Regulator voltage scaling output selection + 14 + 2 + + VOS + read-write + + SCALE3 + Scale 3 mode + 1 + + + SCALE2 + Scale 2 mode + 2 + + + SCALE1 + Scale 1 mode (reset value) + 3 + + + + + ODEN + Over-drive enable + 16 + 1 + + + ODSWEN + Over-drive switching enabled + 17 + 1 + + + UDEN + Under-drive enable in stop mode + 18 + 2 + + + + + CSR1 + CSR1 + power control/status register + 0x4 + 0x20 + 0x00000000 + + + WUIF + Wakeup internal flag + 0 + 1 + read-only + + + SBF + Standby flag + 1 + 1 + read-only + + + PVDO + PVD output + 2 + 1 + read-only + + + BRR + Backup regulator ready + 3 + 1 + read-only + + + BRE + Backup regulator enable + 9 + 1 + read-write + + + VOSRDY + Regulator voltage scaling output selection ready bit + 14 + 1 + read-write + + + ODRDY + Over-drive mode ready + 16 + 1 + read-write + + + ODSWRDY + Over-drive mode switching ready + 17 + 1 + read-write + + + UDRDY + Under-drive ready flag + 18 + 2 + read-write + + + + + CR2 + CR2 + power control register + 0x8 + 0x20 + 0x00000000 + + + CWUPF1 + Clear Wakeup Pin flag for PA0 + 0 + 1 + read-only + + + CWUPF2 + Clear Wakeup Pin flag for PA2 + 1 + 1 + read-only + + + CWUPF3 + Clear Wakeup Pin flag for PC1 + 2 + 1 + read-only + + + CWUPF4 + Clear Wakeup Pin flag for PC13 + 3 + 1 + read-only + + + CWUPF5 + Clear Wakeup Pin flag for PI8 + 4 + 1 + read-only + + + CWUPF6 + Clear Wakeup Pin flag for PI11 + 5 + 1 + read-only + + + WUPP1 + Wakeup pin polarity bit for PA0 + 8 + 1 + read-write + + + WUPP2 + Wakeup pin polarity bit for PA2 + 9 + 1 + read-write + + + WUPP3 + Wakeup pin polarity bit for PC1 + 10 + 1 + read-write + + + WUPP4 + Wakeup pin polarity bit for PC13 + 11 + 1 + read-write + + + WUPP5 + Wakeup pin polarity bit for PI8 + 12 + 1 + read-write + + + WUPP6 + Wakeup pin polarity bit for PI11 + 13 + 1 + read-write + + + + + CSR2 + CSR2 + power control/status register + 0xC + 0x20 + 0x00000000 + + + WUPF1 + Wakeup Pin flag for PA0 + 0 + 1 + read-only + + + WUPF2 + Wakeup Pin flag for PA2 + 1 + 1 + read-only + + + WUPF3 + Wakeup Pin flag for PC1 + 2 + 1 + read-only + + + WUPF4 + Wakeup Pin flag for PC13 + 3 + 1 + read-only + + + WUPF5 + Wakeup Pin flag for PI8 + 4 + 1 + read-only + + + WUPF6 + Wakeup Pin flag for PI11 + 5 + 1 + read-only + + + EWUP1 + Enable Wakeup pin for PA0 + 8 + 1 + read-write + + + EWUP2 + Enable Wakeup pin for PA2 + 9 + 1 + read-write + + + EWUP3 + Enable Wakeup pin for PC1 + 10 + 1 + read-write + + + EWUP4 + Enable Wakeup pin for PC13 + 11 + 1 + read-write + + + EWUP5 + Enable Wakeup pin for PI8 + 12 + 1 + read-write + + + EWUP6 + Enable Wakeup pin for PI11 + 13 + 1 + read-write + + + + + + + IWDG + Independent watchdog + IWDG + 0x40003000 + + 0x0 + 0x400 + registers + + + + KR + KR + Key register + 0x0 + 0x20 + write-only + 0x00000000 + + + KEY + Key value (write only, read 0000h) + 0 + 16 + + KEY + write + + Enable + Enable access to PR, RLR and WINR registers (0x5555) + 21845 + + + Reset + Reset the watchdog value (0xAAAA) + 43690 + + + Start + Start the watchdog (0xCCCC) + 52428 + + + + + + + PR + PR + Prescaler register + 0x4 + 0x20 + read-write + 0x00000000 + + + PR + Prescaler divider + 0 + 3 + + PR + read-write + + DivideBy4 + Divider /4 + 0 + + + DivideBy8 + Divider /8 + 1 + + + DivideBy16 + Divider /16 + 2 + + + DivideBy32 + Divider /32 + 3 + + + DivideBy64 + Divider /64 + 4 + + + DivideBy128 + Divider /128 + 5 + + + DivideBy256 + Divider /256 + 6 + + + DivideBy256bis + Divider /256 + 7 + + + + + + + RLR + RLR + Reload register + 0x8 + 0x20 + read-write + 0x00000FFF + + + RL + Watchdog counter reload value + 0 + 12 + + + 0 + 4095 + + + + + + + SR + SR + Status register + 0xC + 0x20 + read-only + 0x00000000 + + + RVU + Watchdog counter reload value update + 1 + 1 + + + PVU + Watchdog prescaler value update + 0 + 1 + + + + + WINR + WINR + Window register + 0x10 + 0x20 + read-write + 0x00000000 + + + WIN + Watchdog counter window value + 0 + 12 + + + 0 + 4095 + + + + + + + + + WWDG + Window watchdog + WWDG + 0x40002C00 + + 0x0 + 0x400 + registers + + + WWDG + Window Watchdog interrupt + 0 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x0000007F + + + WDGA + Activation bit + 7 + 1 + + WDGA + read-write + + Disabled + Watchdog disabled + 0 + + + Enabled + Watchdog enabled + 1 + + + + + T + 7-bit counter (MSB to LSB) + 0 + 7 + + + 0 + 127 + + + + + + + CFR + CFR + Configuration register + 0x4 + 0x20 + read-write + 0x0000007F + + + EWI + Early wakeup interrupt + 9 + 1 + + EWIW + write + + Enable + interrupt occurs whenever the counter reaches the value 0x40 + 1 + + + + + W + 7-bit window value + 0 + 7 + + + 0 + 127 + + + + + WDGTB + Timer base + 7 + 2 + + WDGTB + read-write + + Div1 + Counter clock (PCLK1 div 4096) div 1 + 0 + + + Div2 + Counter clock (PCLK1 div 4096) div 2 + 1 + + + Div4 + Counter clock (PCLK1 div 4096) div 4 + 2 + + + Div8 + Counter clock (PCLK1 div 4096) div 8 + 3 + + + + + + + SR + SR + Status register + 0x8 + 0x20 + read-write + 0x00000000 + + + EWIF + Early wakeup interrupt flag + 0 + 1 + zeroToClear + + EWIFR + read + + Finished + The EWI Interrupt Service Routine has been serviced + 0 + + + Pending + The EWI Interrupt Service Routine has been triggered + 1 + + + + EWIFW + write + + Finished + The EWI Interrupt Service Routine has been serviced + 0 + + + + + + + + + ADC_Common + Common ADC registers + ADC_Common + 0x40012300 + + 0x0 + 0x400 + registers + + + + CSR + CSR + ADC Common status register + 0x0 + 0x20 + read-only + 0x00000000 + + + OVR3 + Overrun flag of ADC3 + 21 + 1 + + + + STRT3 + Regular channel Start flag of ADC 3 + 20 + 1 + + + + JSTRT3 + Injected channel Start flag of ADC 3 + 19 + 1 + + + + JEOC3 + Injected channel end of conversion of ADC 3 + 18 + 1 + + + + EOC3 + End of conversion of ADC 3 + 17 + 1 + + + + AWD3 + Analog watchdog flag of ADC 3 + 16 + 1 + + + + OVR2 + Overrun flag of ADC 2 + 13 + 1 + + + + STRT2 + Regular channel Start flag of ADC 2 + 12 + 1 + + + + JSTRT2 + Injected channel Start flag of ADC 2 + 11 + 1 + + + + JEOC2 + Injected channel end of conversion of ADC 2 + 10 + 1 + + + + EOC2 + End of conversion of ADC 2 + 9 + 1 + + + + AWD2 + Analog watchdog flag of ADC 2 + 8 + 1 + + + + OVR1 + Overrun flag of ADC 1 + 5 + 1 + + OVR1 + read + + NoOverrun + No overrun occurred + 0 + + + Overrun + Overrun occurred + 1 + + + + + STRT1 + Regular channel Start flag of ADC 1 + 4 + 1 + + STRT1 + read + + NotStarted + No regular channel conversion started + 0 + + + Started + Regular channel conversion has started + 1 + + + + + JSTRT1 + Injected channel Start flag of ADC 1 + 3 + 1 + + JSTRT1 + read + + NotStarted + No injected channel conversion started + 0 + + + Started + Injected channel conversion has started + 1 + + + + + JEOC1 + Injected channel end of conversion of ADC 1 + 2 + 1 + + JEOC1 + read + + NotComplete + Conversion is not complete + 0 + + + Complete + Conversion complete + 1 + + + + + EOC1 + End of conversion of ADC 1 + 1 + 1 + + EOC1 + read + + NotComplete + Conversion is not complete + 0 + + + Complete + Conversion complete + 1 + + + + + AWD1 + Analog watchdog flag of ADC 1 + 0 + 1 + + AWD1 + read + + NoEvent + No analog watchdog event occurred + 0 + + + Event + Analog watchdog event occurred + 1 + + + + + + + CCR + CCR + ADC common control register + 0x4 + 0x20 + read-write + 0x00000000 + + + TSVREFE + Temperature sensor and VREFINT enable + 23 + 1 + + TSVREFE + read-write + + Disabled + Temperature sensor and V_REFINT channel disabled + 0 + + + Enabled + Temperature sensor and V_REFINT channel enabled + 1 + + + + + VBATE + VBAT enable + 22 + 1 + + VBATE + read-write + + Disabled + V_BAT channel disabled + 0 + + + Enabled + V_BAT channel enabled + 1 + + + + + ADCPRE + ADC prescaler + 16 + 2 + + ADCPRE + read-write + + Div2 + PCLK2 divided by 2 + 0 + + + Div4 + PCLK2 divided by 4 + 1 + + + Div6 + PCLK2 divided by 6 + 2 + + + Div8 + PCLK2 divided by 8 + 3 + + + + + DMA + Direct memory access mode for multi ADC mode + 14 + 2 + + DMA + read-write + + Disabled + DMA mode disabled + 0 + + + Mode1 + DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3) + 1 + + + Mode2 + DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2) + 2 + + + Mode3 + DMA mode 3 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2) + 3 + + + + + DDS + DMA disable selection for multi-ADC mode + 13 + 1 + + DDS + read-write + + Single + No new DMA request is issued after the last transfer + 0 + + + Continuous + DMA requests are issued as long as data are converted and DMA=01, 10 or 11 + 1 + + + + + DELAY + Delay between 2 sampling phases + 8 + 4 + + + 0 + 15 + + + + + MULTI + Multi ADC mode selection + 0 + 5 + + MULTI + read-write + + Independent + All the ADCs independent: independent mode + 0 + + + DualRJ + Dual ADC1 and ADC2, combined regular and injected simultaneous mode + 1 + + + DualRA + Dual ADC1 and ADC2, combined regular and alternate trigger mode + 2 + + + DualJ + Dual ADC1 and ADC2, injected simultaneous mode only + 5 + + + DualR + Dual ADC1 and ADC2, regular simultaneous mode only + 6 + + + DualI + Dual ADC1 and ADC2, interleaved mode only + 7 + + + DualA + Dual ADC1 and ADC2, alternate trigger mode only + 9 + + + TripleRJ + Triple ADC, regular and injected simultaneous mode + 17 + + + TripleRA + Triple ADC, regular and alternate trigger mode + 18 + + + TripleJ + Triple ADC, injected simultaneous mode only + 21 + + + TripleR + Triple ADC, regular simultaneous mode only + 22 + + + TripleI + Triple ADC, interleaved mode only + 23 + + + TripleA + Triple ADC, alternate trigger mode only + 24 + + + + + + + CDR + CDR + ADC common regular data register for dual and triple modes + 0x8 + 0x20 + read-only + 0x00000000 + + + DATA2 + 2nd data item of a pair of regular conversions + 16 + 16 + + + DATA1 + 1st data item of a pair of regular conversions + 0 + 16 + + + + + + + TIM1 + Advanced-timers + TIM + 0x40010000 + + 0x0 + 0x400 + registers + + + TIM1_BRK_TIM9 + TIM1 Break interrupt and TIM9 global + interrupt + 24 + + + TIM1_UP_TIM10 + TIM1 Update interrupt and TIM10 + 25 + + + TIM1_TRG_COM_TIM11 + TIM1 Trigger and Commutation interrupts and + TIM11 global interrupt + 26 + + + TIM1_CC + TIM1 Capture Compare interrupt + 27 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + CMS + Center-aligned mode selection + 5 + 2 + + CMS + read-write + + EdgeAligned + The counter counts up or down depending on the direction bit + 0 + + + CenterAligned1 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting down. + 1 + + + CenterAligned2 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting up. + 2 + + + CenterAligned3 + The counter counts up and down alternatively. Output compare interrupt flags are set both when the counter is counting up or down. + 3 + + + + + DIR + Direction + 4 + 1 + + DIR + read-write + + Up + Counter used as upcounter + 0 + + + Down + Counter used as downcounter + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + OIS4 + Output Idle state 4 + 14 + 1 + + + + OIS3N + Output Idle state 3 + 13 + 1 + + + + OIS3 + Output Idle state 3 + 12 + 1 + + + + OIS2N + Output Idle state 2 + 11 + 1 + + + + OIS2 + Output Idle state 2 + 10 + 1 + + + + OIS1N + Output Idle state 1 + 9 + 1 + + OIS1N + read-write + + Reset + OCxN=0 after a dead-time when MOE=0 + 0 + + + Set + OCxN=1 after a dead-time when MOE=0 + 1 + + + + + OIS1 + Output Idle state 1 + 8 + 1 + + OIS1 + read-write + + Reset + OCx=0 (after a dead-time if OCx(N) is implemented) when MOE=0 + 0 + + + Set + OCx=1 (after a dead-time if OCx(N) is implemented) when MOE=0 + 1 + + + + + TI1S + TI1 selection + 7 + 1 + + TI1S + read-write + + Normal + The TIMx_CH1 pin is connected to TI1 input + 0 + + + XOR + The TIMx_CH1, CH2, CH3 pins are connected to TI1 input + 1 + + + + + MMS + Master mode selection + 4 + 3 + + MMS + read-write + + Reset + The UG bit from the TIMx_EGR register is used as trigger output + 0 + + + Enable + The counter enable signal, CNT_EN, is used as trigger output + 1 + + + Update + The update event is selected as trigger output + 2 + + + ComparePulse + The trigger output send a positive pulse when the CC1IF flag it to be set, as soon as a capture or a compare match occurred + 3 + + + CompareOC1 + OC1REF signal is used as trigger output + 4 + + + CompareOC2 + OC2REF signal is used as trigger output + 5 + + + CompareOC3 + OC3REF signal is used as trigger output + 6 + + + CompareOC4 + OC4REF signal is used as trigger output + 7 + + + + + CCDS + Capture/compare DMA selection + 3 + 1 + + CCDS + read-write + + OnCompare + CCx DMA request sent when CCx event occurs + 0 + + + OnUpdate + CCx DMA request sent when update event occurs + 1 + + + + + CCUS + Capture/compare control update selection + 2 + 1 + + + CCPC + Capture/compare preloaded control + 0 + 1 + + + OIS5 + Output Idle state 5 (OC5 output) + 16 + 1 + + + + OIS6 + Output Idle state 6 (OC6 output) + 18 + 1 + + + + MMS2 + Master mode selection 2 + 20 + 4 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x00000000 + + + SMS_3 + Slave model selection - bit[3] + 16 + 1 + + + ETP + External trigger polarity + 15 + 1 + + ETP + read-write + + NotInverted + ETR is noninverted, active at high level or rising edge + 0 + + + Inverted + ETR is inverted, active at low level or falling edge + 1 + + + + + ECE + External clock enable + 14 + 1 + + ECE + read-write + + Disabled + External clock mode 2 disabled + 0 + + + Enabled + External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF signal. + 1 + + + + + ETPS + External trigger prescaler + 12 + 2 + + ETPS + read-write + + Div1 + Prescaler OFF + 0 + + + Div2 + ETRP frequency divided by 2 + 1 + + + Div4 + ETRP frequency divided by 4 + 2 + + + Div8 + ETRP frequency divided by 8 + 3 + + + + + ETF + External trigger filter + 8 + 4 + + ETF + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + MSM + Master/Slave mode + 7 + 1 + + MSM + read-write + + NoSync + No action + 0 + + + Sync + 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 useful if we want to synchronize several timers on a single external event. + 1 + + + + + TS + Trigger selection + 4 + 3 + + TS + read-write + + ITR0 + Internal Trigger 0 (ITR0) + 0 + + + ITR1 + Internal Trigger 1 (ITR1) + 1 + + + ITR2 + Internal Trigger 2 (ITR2) + 2 + + + TI1F_ED + TI1 Edge Detector (TI1F_ED) + 4 + + + TI1FP1 + Filtered Timer Input 1 (TI1FP1) + 5 + + + TI2FP2 + Filtered Timer Input 2 (TI2FP2) + 6 + + + ETRF + External Trigger input (ETRF) + 7 + + + + + SMS + Slave mode selection - bit[2:0] + 0 + 3 + + SMS + read-write + + Disabled + Slave mode disabled - if CEN = ‘1 then the prescaler is clocked directly by the internal clock. + 0 + + + Encoder_Mode_1 + Encoder mode 1 - Counter counts up/down on TI2FP1 edge depending on TI1FP2 level. + 1 + + + Encoder_Mode_2 + Encoder mode 2 - Counter counts up/down on TI1FP2 edge depending on TI2FP1 level. + 2 + + + Encoder_Mode_3 + Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. + 3 + + + Reset_Mode + Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers. + 4 + + + Gated_Mode + Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled. + 5 + + + Trigger_Mode + Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled. + 6 + + + Ext_Clock_Mode + External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter. + 7 + + + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + TDE + Trigger DMA request enable + 14 + 1 + + TDE + read-write + + Disabled + Trigger DMA request disabled + 0 + + + Enabled + Trigger DMA request enabled + 1 + + + + + COMDE + COM DMA request enable + 13 + 1 + + + CC4DE + Capture/Compare 4 DMA request enable + 12 + 1 + + + + CC3DE + Capture/Compare 3 DMA request enable + 11 + 1 + + + + CC2DE + Capture/Compare 2 DMA request enable + 10 + 1 + + + + CC1DE + Capture/Compare 1 DMA request enable + 9 + 1 + + CC1DE + read-write + + Disabled + CCx DMA request disabled + 0 + + + Enabled + CCx DMA request enabled + 1 + + + + + UDE + Update DMA request enable + 8 + 1 + + UDE + read-write + + Disabled + Update DMA request disabled + 0 + + + Enabled + Update DMA request enabled + 1 + + + + + TIE + Trigger interrupt enable + 6 + 1 + + TIE + read-write + + Disabled + Trigger interrupt disabled + 0 + + + Enabled + Trigger interrupt enabled + 1 + + + + + CC4IE + Capture/Compare 4 interrupt enable + 4 + 1 + + + + CC3IE + Capture/Compare 3 interrupt enable + 3 + 1 + + + + CC2IE + Capture/Compare 2 interrupt enable + 2 + 1 + + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + CC1IE + read-write + + Disabled + CCx interrupt disabled + 0 + + + Enabled + CCx interrupt enabled + 1 + + + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + BIE + Break interrupt enable + 7 + 1 + + + COMIE + COM interrupt enable + 5 + 1 + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC4OF + Capture/Compare 4 overcapture flag + 12 + 1 + zeroToClear + + read + + + write + + + + CC3OF + Capture/Compare 3 overcapture flag + 11 + 1 + zeroToClear + + read + + + write + + + + CC2OF + Capture/compare 2 overcapture flag + 10 + 1 + zeroToClear + + read + + + write + + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + zeroToClear + + CC1OFR + read + + Overcapture + The counter value has been captured in TIMx_CCRx register while CCxIF flag was already set + 1 + + + + CC1OFW + write + + Clear + Clear flag + 0 + + + + + BIF + Break interrupt flag + 7 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + zeroToClear + + TIFR + read + + NoTrigger + No trigger event occurred + 0 + + + Trigger + Trigger interrupt pending + 1 + + + + TIFW + write + + Clear + Clear flag + 0 + + + + + COMIF + COM interrupt flag + 5 + 1 + + + CC4IF + Capture/Compare 4 interrupt flag + 4 + 1 + zeroToClear + + read + + + write + + + + CC3IF + Capture/Compare 3 interrupt flag + 3 + 1 + zeroToClear + + read + + + write + + + + CC2IF + Capture/Compare 2 interrupt flag + 2 + 1 + zeroToClear + + read + + + write + + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + zeroToClear + + CC1IFR + read + + Match + If CC1 is an output: The content of the counter TIMx_CNT matches the content of the TIMx_CCR1 register. If CC1 is an input: The counter value has been captured in TIMx_CCR1 register. + 1 + + + + CC1IFW + write + + Clear + Clear flag + 0 + + + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + B2IF + Break 2 interrupt flag + 8 + 1 + + + CC5IF + Compare 5 interrupt flag + 16 + 1 + + + CC6IF + Compare 6 interrupt flag + 17 + 1 + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + BG + Break generation + 7 + 1 + + + TG + Trigger generation + 6 + 1 + + TGW + write + + Trigger + The TIF flag is set in TIMx_SR register. Related interrupt or DMA transfer can occur if enabled. + 1 + + + + + COMG + Capture/Compare control update generation + 5 + 1 + + + CC4G + Capture/compare 4 generation + 4 + 1 + + + + CC3G + Capture/compare 3 generation + 3 + 1 + + + + CC2G + Capture/compare 2 generation + 2 + 1 + + + + CC1G + Capture/compare 1 generation + 1 + 1 + + CC1GW + write + + Trigger + If CC1 is an output: CC1IF flag is set, Corresponding interrupt or DMA request is sent if enabled. If CC1 is an input: The current value of the counter is captured in TIMx_CCR1 register. + 1 + + + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + B2G + Break 2 generation + 8 + 1 + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC2CE + Output Compare 2 clear enable + 15 + 1 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + + OC2PE + Output Compare 2 preload enable + 11 + 1 + + OC2PE + read-write + + Disabled + Preload register on CCR2 disabled. New values written to CCR2 are taken into account immediately + 0 + + + Enabled + Preload register on CCR2 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC2FE + Output Compare 2 fast enable + 10 + 1 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + CC2S + read-write + + Output + CC2 channel is configured as output + 0 + + + + + OC1CE + Output Compare 1 clear enable + 7 + 1 + + + OC1M + Output Compare 1 mode + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC1PE + Output Compare 1 preload enable + 3 + 1 + + OC1PE + read-write + + Disabled + Preload register on CCR1 disabled. New values written to CCR1 are taken into account immediately + 0 + + + Enabled + Preload register on CCR1 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC1FE + Output Compare 1 fast enable + 2 + 1 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + CC1S + read-write + + Output + CC1 channel is configured as output + 0 + + + + + OC2M_3 + Output Compare 2 mode, bit 3 + 24 + 1 + + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + OC1M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + 0 + 15 + + + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + CC2S + read-write + + TI2 + CC2 channel is configured as input, IC2 is mapped on TI2 + 1 + + + TI1 + CC2 channel is configured as input, IC2 is mapped on TI1 + 2 + + + TRC + CC2 channel is configured as input, IC2 is mapped on TRC + 3 + + + + + IC1F + Input capture 1 filter + 4 + 4 + + IC1F + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + CC1S + read-write + + TI1 + CC1 channel is configured as input, IC1 is mapped on TI1 + 1 + + + TI2 + CC1 channel is configured as input, IC1 is mapped on TI2 + 2 + + + TRC + CC1 channel is configured as input, IC1 is mapped on TRC + 3 + + + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4CE + Output compare 4 clear enable + 15 + 1 + + + OC4M + Output compare 4 mode + 12 + 3 + + + + OC4PE + Output compare 4 preload enable + 11 + 1 + + OC4PE + read-write + + Disabled + Preload register on CCR4 disabled. New values written to CCR4 are taken into account immediately + 0 + + + Enabled + Preload register on CCR4 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC4FE + Output compare 4 fast enable + 10 + 1 + + + CC4S + Capture/Compare 4 selection + 8 + 2 + + CC4S + read-write + + Output + CC4 channel is configured as output + 0 + + + + + OC3CE + Output compare 3 clear enable + 7 + 1 + + + OC3M + Output compare 3 mode + 4 + 3 + + OC3M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC3PE + Output compare 3 preload enable + 3 + 1 + + OC3PE + read-write + + Disabled + Preload register on CCR3 disabled. New values written to CCR3 are taken into account immediately + 0 + + + Enabled + Preload register on CCR3 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC3FE + Output compare 3 fast enable + 2 + 1 + + + CC3S + Capture/Compare 3 selection + 0 + 2 + + CC3S + read-write + + Output + CC3 channel is configured as output + 0 + + + + + OC3M_3 + Output Compare 3 mode, bit 3 + 16 + 1 + + OC3M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + OC4M_3 + Output Compare 4 mode, bit 3 + 24 + 1 + + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + 0 + 15 + + + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + 0 + 3 + + + + + CC4S + Capture/Compare 4 selection + 8 + 2 + + CC4S + read-write + + TI4 + CC4 channel is configured as input, IC4 is mapped on TI4 + 1 + + + TI3 + CC4 channel is configured as input, IC4 is mapped on TI3 + 2 + + + TRC + CC4 channel is configured as input, IC4 is mapped on TRC + 3 + + + + + IC3F + Input capture 3 filter + 4 + 4 + + + 0 + 15 + + + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + 0 + 3 + + + + + CC3S + Capture/compare 3 selection + 0 + 2 + + CC3S + read-write + + TI3 + CC3 channel is configured as input, IC3 is mapped on TI3 + 1 + + + TI4 + CC3 channel is configured as input, IC3 is mapped on TI4 + 2 + + + TRC + CC3 channel is configured as input, IC3 is mapped on TRC + 3 + + + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC4P + Capture/Compare 3 output Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output Polarity + 11 + 1 + + + CC3NE + Capture/Compare 3 complementary output enable + 10 + 1 + + + CC3P + Capture/Compare 3 output Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output Polarity + 7 + 1 + + + CC2NE + Capture/Compare 2 complementary output enable + 6 + 1 + + + CC2P + Capture/Compare 2 output Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1NE + Capture/Compare 1 complementary output enable + 2 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + CC5E + Capture/Compare 5 output enable + 16 + 1 + + + CC5P + Capture/Compare 5 output polarity + 17 + 1 + + + CC6E + Capture/Compare 6 output enable + 20 + 1 + + + CC6P + Capture/Compare 6 output polarity + 21 + 1 + + + CC4NP + Capture/Compare 4 complementary output polarity + 15 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + counter value + 0 + 16 + + + 0 + 65535 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + 0 + 65535 + + + + + + + 4 + 0x4 + 1-4 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + 0 + 65535 + + + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x00000000 + + + DBL + DMA burst length + 8 + 5 + + + 0 + 18 + + + + + DBA + DMA base address + 0 + 5 + + + 0 + 31 + + + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x00000000 + + + DMAB + DMA register for burst accesses + 0 + 32 + + + + + RCR + RCR + repetition counter register + 0x30 + 0x20 + read-write + 0x00000000 + + + REP + Repetition counter value + 0 + 8 + + + + + BDTR + BDTR + break and dead-time register + 0x44 + 0x20 + read-write + 0x00000000 + + + MOE + Main output enable + 15 + 1 + + MOE + read-write + + DisabledIdle + OC/OCN are disabled or forced idle depending on OSSI + 0 + + + Enabled + OC/OCN are enabled if CCxE/CCxNE are set + 1 + + + + + AOE + Automatic output enable + 14 + 1 + + AOE + read-write + + Manual + MOE can be set only by software + 0 + + + Automatic + MOE can be set by software or automatically at the next update event (if none of the break inputs BRK and BRK2 is active) + 1 + + + + + BKP + Break polarity + 13 + 1 + + BKP + read-write + + ActiveLow + Break input BRKx is active low + 0 + + + ActiveHigh + Break input BRKx is active high + 1 + + + + + BKE + Break enable + 12 + 1 + + BKE + read-write + + Disabled + Break function x disabled + 0 + + + Enabled + Break function x disabled + 1 + + + + + OSSR + Off-state selection for Run mode + 11 + 1 + + OSSR + read-write + + Disabled + When inactive, OC/OCN outputs are disabled + 0 + + + IdleLevel + When inactive, OC/OCN outputs are enabled with their inactive level + 1 + + + + + OSSI + Off-state selection for Idle mode + 10 + 1 + + OSSI + read-write + + Disabled + When inactive, OC/OCN outputs are disabled + 0 + + + IdleLevel + When inactive, OC/OCN outputs are forced to idle level + 1 + + + + + LOCK + Lock configuration + 8 + 2 + + LOCK + read-write + + Off + No bit is write protected + 0 + + + Level1 + Any bits except MOE, OSSR, OSSI and LOCK in TIMx_BDTR register, OISx and OISxN bits in TIMx_CR2 register can no longer be written + 1 + + + Level2 + LOCK Level 1 + CC Polarity bits (CCxP/CCxNP bits in TIMx_CCER register, as long as the related channel is configured in output through the CCxS bits) as well as OSSR and OSSI bits can no longer be written + 2 + + + Level3 + LOCK Level 2 + CC Control bits (OCxM and OCxPE bits in TIMx_CCMRx registers, as long as the related channel is configured in output through the CCxS bits) can no longer be written + 3 + + + + + DTG + Dead-time generator setup + 0 + 8 + + + 0 + 255 + + + + + BKF + Break filter + 16 + 4 + + + BK2F + Break 2 filter + 20 + 4 + + + BK2E + Break 2 enable + 24 + 1 + + + + BK2P + Break 2 polarity + 25 + 1 + + + + + + CCMR3_Output + CCMR3_Output + capture/compare mode register 3 (output mode) + 0x54 + 0x20 + read-write + 0x00000000 + + + OC5FE + Output compare 5 fast enable + 2 + 1 + + + OC5PE + Output compare 5 preload enable + 3 + 1 + + + OC5M + Output compare 5 mode + 4 + 3 + + OC5M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC5CE + Output compare 5 clear enable + 7 + 1 + + + OC6FE + Output compare 6 fast enable + 10 + 1 + + + OC6PE + Output compare 6 preload enable + 11 + 1 + + + OC6M + Output compare 6 mode + 12 + 3 + + + + OC6CE + Output compare 6 clear enable + 15 + 1 + + + OC5M_3 + Output Compare 5 mode + 16 + 1 + + OC5M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + OC6M_3 + Output Compare 6 mode + 24 + 1 + + + + + + CCR5 + CCR5 + capture/compare register + 0x58 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + GC5C1 + Group Channel 5 and Channel 1 + 29 + 1 + + + GC5C2 + Group Channel 5 and Channel 2 + 30 + 1 + + + GC5C3 + Group Channel 5 and Channel 3 + 31 + 1 + + + + + CCR6 + CRR6 + capture/compare register + 0x5C + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + + + AF1 + alternate function option register 1 + 0x60 + 0x20 + read-write + 0x00000001 + + + BKINE + BRK BKIN input enable + 0 + 1 + + + BKDFBKE + BRK DFSDM_BREAK[0] enable + 8 + 1 + + + BKINP + BRK BKIN input polarity + 9 + 1 + + + + + AF2 + alternate function option register 2 + 0x64 + 0x20 + read-write + 0x00000001 + + + BK2INE + BRK2 BKIN input enable + 0 + 1 + + + BK2DFBKE + BRK2 DFSDM_BREAK[0] enable + 8 + 1 + + + BK2INP + BRK2 BKIN input polarity + 9 + 1 + + + + + + + TIM8 + TIM + 0x40010400 + + TIM8_BRK_TIM12 + TIM8 Break interrupt and TIM12 global + interrupt + 43 + + + TIM8_UP_TIM13 + TIM8 Update interrupt and TIM13 global + interrupt + 44 + + + TIM8_TRG_COM_TIM14 + TIM8 Trigger and Commutation interrupts and + TIM14 global interrupt + 45 + + + TIM8_CC + TIM8 Capture Compare interrupt + 46 + + + + TIM2 + General purpose timers + TIM + 0x40000000 + + 0x0 + 0x400 + registers + + + TIM2 + TIM2 global interrupt + 28 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + CMS + Center-aligned mode selection + 5 + 2 + + CMS + read-write + + EdgeAligned + The counter counts up or down depending on the direction bit + 0 + + + CenterAligned1 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting down. + 1 + + + CenterAligned2 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting up. + 2 + + + CenterAligned3 + The counter counts up and down alternatively. Output compare interrupt flags are set both when the counter is counting up or down. + 3 + + + + + DIR + Direction + 4 + 1 + + DIR + read-write + + Up + Counter used as upcounter + 0 + + + Down + Counter used as downcounter + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + TI1S + TI1 selection + 7 + 1 + + TI1S + read-write + + Normal + The TIMx_CH1 pin is connected to TI1 input + 0 + + + XOR + The TIMx_CH1, CH2, CH3 pins are connected to TI1 input + 1 + + + + + MMS + Master mode selection + 4 + 3 + + MMS + read-write + + Reset + The UG bit from the TIMx_EGR register is used as trigger output + 0 + + + Enable + The counter enable signal, CNT_EN, is used as trigger output + 1 + + + Update + The update event is selected as trigger output + 2 + + + ComparePulse + The trigger output send a positive pulse when the CC1IF flag it to be set, as soon as a capture or a compare match occurred + 3 + + + CompareOC1 + OC1REF signal is used as trigger output + 4 + + + CompareOC2 + OC2REF signal is used as trigger output + 5 + + + CompareOC3 + OC3REF signal is used as trigger output + 6 + + + CompareOC4 + OC4REF signal is used as trigger output + 7 + + + + + CCDS + Capture/compare DMA selection + 3 + 1 + + CCDS + read-write + + OnCompare + CCx DMA request sent when CCx event occurs + 0 + + + OnUpdate + CCx DMA request sent when update event occurs + 1 + + + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x00000000 + + + SMS + Slave mode selection + 0 + 3 + + SMS + read-write + + Disabled + Slave mode disabled - if CEN = ‘1 then the prescaler is clocked directly by the internal clock. + 0 + + + Encoder_Mode_1 + Encoder mode 1 - Counter counts up/down on TI2FP1 edge depending on TI1FP2 level. + 1 + + + Encoder_Mode_2 + Encoder mode 2 - Counter counts up/down on TI1FP2 edge depending on TI2FP1 level. + 2 + + + Encoder_Mode_3 + Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. + 3 + + + Reset_Mode + Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers. + 4 + + + Gated_Mode + Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled. + 5 + + + Trigger_Mode + Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled. + 6 + + + Ext_Clock_Mode + External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter. + 7 + + + + + TS + Trigger selection + 4 + 3 + + TS + read-write + + ITR0 + Internal Trigger 0 (ITR0) + 0 + + + ITR1 + Internal Trigger 1 (ITR1) + 1 + + + ITR2 + Internal Trigger 2 (ITR2) + 2 + + + TI1F_ED + TI1 Edge Detector (TI1F_ED) + 4 + + + TI1FP1 + Filtered Timer Input 1 (TI1FP1) + 5 + + + TI2FP2 + Filtered Timer Input 2 (TI2FP2) + 6 + + + ETRF + External Trigger input (ETRF) + 7 + + + + + MSM + Master/Slave mode + 7 + 1 + + MSM + read-write + + NoSync + No action + 0 + + + Sync + 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 useful if we want to synchronize several timers on a single external event. + 1 + + + + + ETF + External trigger filter + 8 + 4 + + ETF + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + ETPS + External trigger prescaler + 12 + 2 + + ETPS + read-write + + Div1 + Prescaler OFF + 0 + + + Div2 + ETRP frequency divided by 2 + 1 + + + Div4 + ETRP frequency divided by 4 + 2 + + + Div8 + ETRP frequency divided by 8 + 3 + + + + + ECE + External clock enable + 14 + 1 + + ECE + read-write + + Disabled + External clock mode 2 disabled + 0 + + + Enabled + External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF signal. + 1 + + + + + ETP + External trigger polarity + 15 + 1 + + ETP + read-write + + NotInverted + ETR is noninverted, active at high level or rising edge + 0 + + + Inverted + ETR is inverted, active at low level or falling edge + 1 + + + + + SMS_3 + Slave model selection - bit[3] + 16 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + TDE + Trigger DMA request enable + 14 + 1 + + TDE + read-write + + Disabled + Trigger DMA request disabled + 0 + + + Enabled + Trigger DMA request enabled + 1 + + + + + CC4DE + Capture/Compare 4 DMA request enable + 12 + 1 + + + + CC3DE + Capture/Compare 3 DMA request enable + 11 + 1 + + + + CC2DE + Capture/Compare 2 DMA request enable + 10 + 1 + + + + CC1DE + Capture/Compare 1 DMA request enable + 9 + 1 + + CC1DE + read-write + + Disabled + CCx DMA request disabled + 0 + + + Enabled + CCx DMA request enabled + 1 + + + + + UDE + Update DMA request enable + 8 + 1 + + UDE + read-write + + Disabled + Update DMA request disabled + 0 + + + Enabled + Update DMA request enabled + 1 + + + + + TIE + Trigger interrupt enable + 6 + 1 + + TIE + read-write + + Disabled + Trigger interrupt disabled + 0 + + + Enabled + Trigger interrupt enabled + 1 + + + + + CC4IE + Capture/Compare 4 interrupt enable + 4 + 1 + + + + CC3IE + Capture/Compare 3 interrupt enable + 3 + 1 + + + + CC2IE + Capture/Compare 2 interrupt enable + 2 + 1 + + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + CC1IE + read-write + + Disabled + CCx interrupt disabled + 0 + + + Enabled + CCx interrupt enabled + 1 + + + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC4OF + Capture/Compare 4 overcapture flag + 12 + 1 + zeroToClear + + read + + + write + + + + CC3OF + Capture/Compare 3 overcapture flag + 11 + 1 + zeroToClear + + read + + + write + + + + CC2OF + Capture/compare 2 overcapture flag + 10 + 1 + zeroToClear + + read + + + write + + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + zeroToClear + + CC1OFR + read + + Overcapture + The counter value has been captured in TIMx_CCRx register while CCxIF flag was already set + 1 + + + + CC1OFW + write + + Clear + Clear flag + 0 + + + + + TIF + Trigger interrupt flag + 6 + 1 + zeroToClear + + TIFR + read + + NoTrigger + No trigger event occurred + 0 + + + Trigger + Trigger interrupt pending + 1 + + + + TIFW + write + + Clear + Clear flag + 0 + + + + + CC4IF + Capture/Compare 4 interrupt flag + 4 + 1 + zeroToClear + + read + + + write + + + + CC3IF + Capture/Compare 3 interrupt flag + 3 + 1 + zeroToClear + + read + + + write + + + + CC2IF + Capture/Compare 2 interrupt flag + 2 + 1 + zeroToClear + + read + + + write + + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + zeroToClear + + CC1IFR + read + + Match + If CC1 is an output: The content of the counter TIMx_CNT matches the content of the TIMx_CCR1 register. If CC1 is an input: The counter value has been captured in TIMx_CCR1 register. + 1 + + + + CC1IFW + write + + Clear + Clear flag + 0 + + + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + TG + Trigger generation + 6 + 1 + + TGW + write + + Trigger + The TIF flag is set in TIMx_SR register. Related interrupt or DMA transfer can occur if enabled. + 1 + + + + + CC4G + Capture/compare 4 generation + 4 + 1 + + + + CC3G + Capture/compare 3 generation + 3 + 1 + + + + CC2G + Capture/compare 2 generation + 2 + 1 + + + + CC1G + Capture/compare 1 generation + 1 + 1 + + CC1GW + write + + Trigger + If CC1 is an output: CC1IF flag is set, Corresponding interrupt or DMA request is sent if enabled. If CC1 is an input: The current value of the counter is captured in TIMx_CCR1 register. + 1 + + + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC2CE + OC2CE + 15 + 1 + + + OC2M + OC2M + 12 + 3 + + + + OC2PE + OC2PE + 11 + 1 + + OC2PE + read-write + + Disabled + Preload register on CCR2 disabled. New values written to CCR2 are taken into account immediately + 0 + + + Enabled + Preload register on CCR2 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC2FE + OC2FE + 10 + 1 + + + CC2S + CC2S + 8 + 2 + + CC2S + read-write + + Output + CC2 channel is configured as output + 0 + + + + + OC1CE + OC1CE + 7 + 1 + + + OC1M + OC1M + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC1PE + OC1PE + 3 + 1 + + OC1PE + read-write + + Disabled + Preload register on CCR1 disabled. New values written to CCR1 are taken into account immediately + 0 + + + Enabled + Preload register on CCR1 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC1FE + OC1FE + 2 + 1 + + + CC1S + CC1S + 0 + 2 + + CC1S + read-write + + Output + CC1 channel is configured as output + 0 + + + + + OC2M_3 + Output Compare 2 mode, bit 3 + 24 + 1 + + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + OC1M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + 0 + 15 + + + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + CC2S + read-write + + TI2 + CC2 channel is configured as input, IC2 is mapped on TI2 + 1 + + + TI1 + CC2 channel is configured as input, IC2 is mapped on TI1 + 2 + + + TRC + CC2 channel is configured as input, IC2 is mapped on TRC + 3 + + + + + IC1F + Input capture 1 filter + 4 + 4 + + IC1F + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + CC1S + read-write + + TI1 + CC1 channel is configured as input, IC1 is mapped on TI1 + 1 + + + TI2 + CC1 channel is configured as input, IC1 is mapped on TI2 + 2 + + + TRC + CC1 channel is configured as input, IC1 is mapped on TRC + 3 + + + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4CE + O24CE + 15 + 1 + + + OC4M + OC4M + 12 + 3 + + + + OC4PE + OC4PE + 11 + 1 + + OC4PE + read-write + + Disabled + Preload register on CCR4 disabled. New values written to CCR4 are taken into account immediately + 0 + + + Enabled + Preload register on CCR4 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC4FE + OC4FE + 10 + 1 + + + CC4S + CC4S + 8 + 2 + + CC4S + read-write + + Output + CC4 channel is configured as output + 0 + + + + + OC3CE + OC3CE + 7 + 1 + + + OC3M + OC3M + 4 + 3 + + OC3M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC3PE + OC3PE + 3 + 1 + + OC3PE + read-write + + Disabled + Preload register on CCR3 disabled. New values written to CCR3 are taken into account immediately + 0 + + + Enabled + Preload register on CCR3 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC3FE + OC3FE + 2 + 1 + + + CC3S + CC3S + 0 + 2 + + CC3S + read-write + + Output + CC3 channel is configured as output + 0 + + + + + OC3M_3 + Output Compare 3 mode, bit 3 + 16 + 1 + + OC3M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + OC4M_3 + Output Compare 4 mode, bit 3 + 24 + 1 + + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + 0 + 15 + + + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + 0 + 3 + + + + + CC4S + Capture/Compare 4 selection + 8 + 2 + + CC4S + read-write + + TI4 + CC4 channel is configured as input, IC4 is mapped on TI4 + 1 + + + TI3 + CC4 channel is configured as input, IC4 is mapped on TI3 + 2 + + + TRC + CC4 channel is configured as input, IC4 is mapped on TRC + 3 + + + + + IC3F + Input capture 3 filter + 4 + 4 + + + 0 + 15 + + + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + 0 + 3 + + + + + CC3S + Capture/compare 3 selection + 0 + 2 + + CC3S + read-write + + TI3 + CC3 channel is configured as input, IC3 is mapped on TI3 + 1 + + + TI4 + CC3 channel is configured as input, IC3 is mapped on TI4 + 2 + + + TRC + CC3 channel is configured as input, IC3 is mapped on TRC + 3 + + + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC4NP + Capture/Compare 4 output Polarity + 15 + 1 + + + CC4P + Capture/Compare 3 output Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output Polarity + 11 + 1 + + + CC3P + Capture/Compare 3 output Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Counter value + 0 + 32 + + + 0 + 4294967295 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 32 + + + 0 + 4294967295 + + + + + + + 4 + 0x4 + 1-4 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 32 + + + 0 + 4294967295 + + + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x00000000 + + + DBL + DMA burst length + 8 + 5 + + + 0 + 18 + + + + + DBA + DMA base address + 0 + 5 + + + 0 + 31 + + + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x00000000 + + + DMAB + DMA register for burst accesses + 0 + 32 + + + + + OR + OR1 + TIM2 option register 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + ITR1_RMP + Internal trigger 1 remap + 10 + 2 + + + + + + + TIM3 + General purpose timers + TIM + 0x40000400 + + 0x0 + 0x400 + registers + + + TIM3 + TIM3 global interrupt + 29 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + CMS + Center-aligned mode selection + 5 + 2 + + CMS + read-write + + EdgeAligned + The counter counts up or down depending on the direction bit + 0 + + + CenterAligned1 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting down. + 1 + + + CenterAligned2 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting up. + 2 + + + CenterAligned3 + The counter counts up and down alternatively. Output compare interrupt flags are set both when the counter is counting up or down. + 3 + + + + + DIR + Direction + 4 + 1 + + DIR + read-write + + Up + Counter used as upcounter + 0 + + + Down + Counter used as downcounter + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + TI1S + TI1 selection + 7 + 1 + + TI1S + read-write + + Normal + The TIMx_CH1 pin is connected to TI1 input + 0 + + + XOR + The TIMx_CH1, CH2, CH3 pins are connected to TI1 input + 1 + + + + + MMS + Master mode selection + 4 + 3 + + MMS + read-write + + Reset + The UG bit from the TIMx_EGR register is used as trigger output + 0 + + + Enable + The counter enable signal, CNT_EN, is used as trigger output + 1 + + + Update + The update event is selected as trigger output + 2 + + + ComparePulse + The trigger output send a positive pulse when the CC1IF flag it to be set, as soon as a capture or a compare match occurred + 3 + + + CompareOC1 + OC1REF signal is used as trigger output + 4 + + + CompareOC2 + OC2REF signal is used as trigger output + 5 + + + CompareOC3 + OC3REF signal is used as trigger output + 6 + + + CompareOC4 + OC4REF signal is used as trigger output + 7 + + + + + CCDS + Capture/compare DMA selection + 3 + 1 + + CCDS + read-write + + OnCompare + CCx DMA request sent when CCx event occurs + 0 + + + OnUpdate + CCx DMA request sent when update event occurs + 1 + + + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x00000000 + + + SMS + Slave mode selection + 0 + 3 + + SMS + read-write + + Disabled + Slave mode disabled - if CEN = ‘1 then the prescaler is clocked directly by the internal clock. + 0 + + + Encoder_Mode_1 + Encoder mode 1 - Counter counts up/down on TI2FP1 edge depending on TI1FP2 level. + 1 + + + Encoder_Mode_2 + Encoder mode 2 - Counter counts up/down on TI1FP2 edge depending on TI2FP1 level. + 2 + + + Encoder_Mode_3 + Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. + 3 + + + Reset_Mode + Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers. + 4 + + + Gated_Mode + Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled. + 5 + + + Trigger_Mode + Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled. + 6 + + + Ext_Clock_Mode + External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter. + 7 + + + + + TS + Trigger selection + 4 + 3 + + TS + read-write + + ITR0 + Internal Trigger 0 (ITR0) + 0 + + + ITR1 + Internal Trigger 1 (ITR1) + 1 + + + ITR2 + Internal Trigger 2 (ITR2) + 2 + + + TI1F_ED + TI1 Edge Detector (TI1F_ED) + 4 + + + TI1FP1 + Filtered Timer Input 1 (TI1FP1) + 5 + + + TI2FP2 + Filtered Timer Input 2 (TI2FP2) + 6 + + + ETRF + External Trigger input (ETRF) + 7 + + + + + MSM + Master/Slave mode + 7 + 1 + + MSM + read-write + + NoSync + No action + 0 + + + Sync + 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 useful if we want to synchronize several timers on a single external event. + 1 + + + + + ETF + External trigger filter + 8 + 4 + + ETF + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + ETPS + External trigger prescaler + 12 + 2 + + ETPS + read-write + + Div1 + Prescaler OFF + 0 + + + Div2 + ETRP frequency divided by 2 + 1 + + + Div4 + ETRP frequency divided by 4 + 2 + + + Div8 + ETRP frequency divided by 8 + 3 + + + + + ECE + External clock enable + 14 + 1 + + ECE + read-write + + Disabled + External clock mode 2 disabled + 0 + + + Enabled + External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF signal. + 1 + + + + + ETP + External trigger polarity + 15 + 1 + + ETP + read-write + + NotInverted + ETR is noninverted, active at high level or rising edge + 0 + + + Inverted + ETR is inverted, active at low level or falling edge + 1 + + + + + SMS_3 + Slave model selection - bit[3] + 16 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + TDE + Trigger DMA request enable + 14 + 1 + + TDE + read-write + + Disabled + Trigger DMA request disabled + 0 + + + Enabled + Trigger DMA request enabled + 1 + + + + + CC4DE + Capture/Compare 4 DMA request enable + 12 + 1 + + + + CC3DE + Capture/Compare 3 DMA request enable + 11 + 1 + + + + CC2DE + Capture/Compare 2 DMA request enable + 10 + 1 + + + + CC1DE + Capture/Compare 1 DMA request enable + 9 + 1 + + CC1DE + read-write + + Disabled + CCx DMA request disabled + 0 + + + Enabled + CCx DMA request enabled + 1 + + + + + UDE + Update DMA request enable + 8 + 1 + + UDE + read-write + + Disabled + Update DMA request disabled + 0 + + + Enabled + Update DMA request enabled + 1 + + + + + TIE + Trigger interrupt enable + 6 + 1 + + TIE + read-write + + Disabled + Trigger interrupt disabled + 0 + + + Enabled + Trigger interrupt enabled + 1 + + + + + CC4IE + Capture/Compare 4 interrupt enable + 4 + 1 + + + + CC3IE + Capture/Compare 3 interrupt enable + 3 + 1 + + + + CC2IE + Capture/Compare 2 interrupt enable + 2 + 1 + + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + CC1IE + read-write + + Disabled + CCx interrupt disabled + 0 + + + Enabled + CCx interrupt enabled + 1 + + + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC4OF + Capture/Compare 4 overcapture flag + 12 + 1 + zeroToClear + + read + + + write + + + + CC3OF + Capture/Compare 3 overcapture flag + 11 + 1 + zeroToClear + + read + + + write + + + + CC2OF + Capture/compare 2 overcapture flag + 10 + 1 + zeroToClear + + read + + + write + + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + zeroToClear + + CC1OFR + read + + Overcapture + The counter value has been captured in TIMx_CCRx register while CCxIF flag was already set + 1 + + + + CC1OFW + write + + Clear + Clear flag + 0 + + + + + TIF + Trigger interrupt flag + 6 + 1 + zeroToClear + + TIFR + read + + NoTrigger + No trigger event occurred + 0 + + + Trigger + Trigger interrupt pending + 1 + + + + TIFW + write + + Clear + Clear flag + 0 + + + + + CC4IF + Capture/Compare 4 interrupt flag + 4 + 1 + zeroToClear + + read + + + write + + + + CC3IF + Capture/Compare 3 interrupt flag + 3 + 1 + zeroToClear + + read + + + write + + + + CC2IF + Capture/Compare 2 interrupt flag + 2 + 1 + zeroToClear + + read + + + write + + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + zeroToClear + + CC1IFR + read + + Match + If CC1 is an output: The content of the counter TIMx_CNT matches the content of the TIMx_CCR1 register. If CC1 is an input: The counter value has been captured in TIMx_CCR1 register. + 1 + + + + CC1IFW + write + + Clear + Clear flag + 0 + + + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + TG + Trigger generation + 6 + 1 + + TGW + write + + Trigger + The TIF flag is set in TIMx_SR register. Related interrupt or DMA transfer can occur if enabled. + 1 + + + + + CC4G + Capture/compare 4 generation + 4 + 1 + + + + CC3G + Capture/compare 3 generation + 3 + 1 + + + + CC2G + Capture/compare 2 generation + 2 + 1 + + + + CC1G + Capture/compare 1 generation + 1 + 1 + + CC1GW + write + + Trigger + If CC1 is an output: CC1IF flag is set, Corresponding interrupt or DMA request is sent if enabled. If CC1 is an input: The current value of the counter is captured in TIMx_CCR1 register. + 1 + + + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC2CE + OC2CE + 15 + 1 + + + OC2M + OC2M + 12 + 3 + + + + OC2PE + OC2PE + 11 + 1 + + OC2PE + read-write + + Disabled + Preload register on CCR2 disabled. New values written to CCR2 are taken into account immediately + 0 + + + Enabled + Preload register on CCR2 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC2FE + OC2FE + 10 + 1 + + + CC2S + CC2S + 8 + 2 + + CC2S + read-write + + Output + CC2 channel is configured as output + 0 + + + + + OC1CE + OC1CE + 7 + 1 + + + OC1M + OC1M + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC1PE + OC1PE + 3 + 1 + + OC1PE + read-write + + Disabled + Preload register on CCR1 disabled. New values written to CCR1 are taken into account immediately + 0 + + + Enabled + Preload register on CCR1 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC1FE + OC1FE + 2 + 1 + + + CC1S + CC1S + 0 + 2 + + CC1S + read-write + + Output + CC1 channel is configured as output + 0 + + + + + OC2M_3 + Output Compare 2 mode, bit 3 + 24 + 1 + + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + OC1M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + 0 + 15 + + + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + CC2S + read-write + + TI2 + CC2 channel is configured as input, IC2 is mapped on TI2 + 1 + + + TI1 + CC2 channel is configured as input, IC2 is mapped on TI1 + 2 + + + TRC + CC2 channel is configured as input, IC2 is mapped on TRC + 3 + + + + + IC1F + Input capture 1 filter + 4 + 4 + + IC1F + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + CC1S + read-write + + TI1 + CC1 channel is configured as input, IC1 is mapped on TI1 + 1 + + + TI2 + CC1 channel is configured as input, IC1 is mapped on TI2 + 2 + + + TRC + CC1 channel is configured as input, IC1 is mapped on TRC + 3 + + + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4CE + O24CE + 15 + 1 + + + OC4M + OC4M + 12 + 3 + + + + OC4PE + OC4PE + 11 + 1 + + OC4PE + read-write + + Disabled + Preload register on CCR4 disabled. New values written to CCR4 are taken into account immediately + 0 + + + Enabled + Preload register on CCR4 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC4FE + OC4FE + 10 + 1 + + + CC4S + CC4S + 8 + 2 + + CC4S + read-write + + Output + CC4 channel is configured as output + 0 + + + + + OC3CE + OC3CE + 7 + 1 + + + OC3M + OC3M + 4 + 3 + + OC3M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC3PE + OC3PE + 3 + 1 + + OC3PE + read-write + + Disabled + Preload register on CCR3 disabled. New values written to CCR3 are taken into account immediately + 0 + + + Enabled + Preload register on CCR3 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC3FE + OC3FE + 2 + 1 + + + CC3S + CC3S + 0 + 2 + + CC3S + read-write + + Output + CC3 channel is configured as output + 0 + + + + + OC3M_3 + Output Compare 3 mode, bit 3 + 16 + 1 + + OC3M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + OC4M_3 + Output Compare 4 mode, bit 3 + 24 + 1 + + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + 0 + 15 + + + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + 0 + 3 + + + + + CC4S + Capture/Compare 4 selection + 8 + 2 + + CC4S + read-write + + TI4 + CC4 channel is configured as input, IC4 is mapped on TI4 + 1 + + + TI3 + CC4 channel is configured as input, IC4 is mapped on TI3 + 2 + + + TRC + CC4 channel is configured as input, IC4 is mapped on TRC + 3 + + + + + IC3F + Input capture 3 filter + 4 + 4 + + + 0 + 15 + + + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + 0 + 3 + + + + + CC3S + Capture/compare 3 selection + 0 + 2 + + CC3S + read-write + + TI3 + CC3 channel is configured as input, IC3 is mapped on TI3 + 1 + + + TI4 + CC3 channel is configured as input, IC3 is mapped on TI4 + 2 + + + TRC + CC3 channel is configured as input, IC3 is mapped on TRC + 3 + + + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC4NP + Capture/Compare 4 output Polarity + 15 + 1 + + + CC4P + Capture/Compare 3 output Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output Polarity + 11 + 1 + + + CC3P + Capture/Compare 3 output Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + 0 + 65535 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + 0 + 65535 + + + + + + + 4 + 0x4 + 1-4 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + 0 + 65535 + + + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x00000000 + + + DBL + DMA burst length + 8 + 5 + + + 0 + 18 + + + + + DBA + DMA base address + 0 + 5 + + + 0 + 31 + + + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x00000000 + + + DMAB + DMA register for burst accesses + 0 + 32 + + + + + + + TIM4 + General purpose timers + TIM + 0x40000800 + + TIM4 + TIM4 global interrupt + 30 + + + + TIM5 + General purpose timers + TIM + 0x40000C00 + + 0x0 + 0x400 + registers + + + TIM5 + TIM5 global interrupt + 50 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + CMS + Center-aligned mode selection + 5 + 2 + + CMS + read-write + + EdgeAligned + The counter counts up or down depending on the direction bit + 0 + + + CenterAligned1 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting down. + 1 + + + CenterAligned2 + The counter counts up and down alternatively. Output compare interrupt flags are set only when the counter is counting up. + 2 + + + CenterAligned3 + The counter counts up and down alternatively. Output compare interrupt flags are set both when the counter is counting up or down. + 3 + + + + + DIR + Direction + 4 + 1 + + DIR + read-write + + Up + Counter used as upcounter + 0 + + + Down + Counter used as downcounter + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + TI1S + TI1 selection + 7 + 1 + + TI1S + read-write + + Normal + The TIMx_CH1 pin is connected to TI1 input + 0 + + + XOR + The TIMx_CH1, CH2, CH3 pins are connected to TI1 input + 1 + + + + + MMS + Master mode selection + 4 + 3 + + MMS + read-write + + Reset + The UG bit from the TIMx_EGR register is used as trigger output + 0 + + + Enable + The counter enable signal, CNT_EN, is used as trigger output + 1 + + + Update + The update event is selected as trigger output + 2 + + + ComparePulse + The trigger output send a positive pulse when the CC1IF flag it to be set, as soon as a capture or a compare match occurred + 3 + + + CompareOC1 + OC1REF signal is used as trigger output + 4 + + + CompareOC2 + OC2REF signal is used as trigger output + 5 + + + CompareOC3 + OC3REF signal is used as trigger output + 6 + + + CompareOC4 + OC4REF signal is used as trigger output + 7 + + + + + CCDS + Capture/compare DMA selection + 3 + 1 + + CCDS + read-write + + OnCompare + CCx DMA request sent when CCx event occurs + 0 + + + OnUpdate + CCx DMA request sent when update event occurs + 1 + + + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x00000000 + + + SMS + Slave mode selection + 0 + 3 + + SMS + read-write + + Disabled + Slave mode disabled - if CEN = ‘1 then the prescaler is clocked directly by the internal clock. + 0 + + + Encoder_Mode_1 + Encoder mode 1 - Counter counts up/down on TI2FP1 edge depending on TI1FP2 level. + 1 + + + Encoder_Mode_2 + Encoder mode 2 - Counter counts up/down on TI1FP2 edge depending on TI2FP1 level. + 2 + + + Encoder_Mode_3 + Encoder mode 3 - Counter counts up/down on both TI1FP1 and TI2FP2 edges depending on the level of the other input. + 3 + + + Reset_Mode + Reset Mode - Rising edge of the selected trigger input (TRGI) reinitializes the counter and generates an update of the registers. + 4 + + + Gated_Mode + Gated Mode - The counter clock is enabled when the trigger input (TRGI) is high. The counter stops (but is not reset) as soon as the trigger becomes low. Both start and stop of the counter are controlled. + 5 + + + Trigger_Mode + Trigger Mode - The counter starts at a rising edge of the trigger TRGI (but it is not reset). Only the start of the counter is controlled. + 6 + + + Ext_Clock_Mode + External Clock Mode 1 - Rising edges of the selected trigger (TRGI) clock the counter. + 7 + + + + + TS + Trigger selection + 4 + 3 + + TS + read-write + + ITR0 + Internal Trigger 0 (ITR0) + 0 + + + ITR1 + Internal Trigger 1 (ITR1) + 1 + + + ITR2 + Internal Trigger 2 (ITR2) + 2 + + + TI1F_ED + TI1 Edge Detector (TI1F_ED) + 4 + + + TI1FP1 + Filtered Timer Input 1 (TI1FP1) + 5 + + + TI2FP2 + Filtered Timer Input 2 (TI2FP2) + 6 + + + ETRF + External Trigger input (ETRF) + 7 + + + + + MSM + Master/Slave mode + 7 + 1 + + MSM + read-write + + NoSync + No action + 0 + + + Sync + 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 useful if we want to synchronize several timers on a single external event. + 1 + + + + + ETF + External trigger filter + 8 + 4 + + ETF + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + ETPS + External trigger prescaler + 12 + 2 + + ETPS + read-write + + Div1 + Prescaler OFF + 0 + + + Div2 + ETRP frequency divided by 2 + 1 + + + Div4 + ETRP frequency divided by 4 + 2 + + + Div8 + ETRP frequency divided by 8 + 3 + + + + + ECE + External clock enable + 14 + 1 + + ECE + read-write + + Disabled + External clock mode 2 disabled + 0 + + + Enabled + External clock mode 2 enabled. The counter is clocked by any active edge on the ETRF signal. + 1 + + + + + ETP + External trigger polarity + 15 + 1 + + ETP + read-write + + NotInverted + ETR is noninverted, active at high level or rising edge + 0 + + + Inverted + ETR is inverted, active at low level or falling edge + 1 + + + + + SMS_3 + Slave model selection - bit[3] + 16 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + TDE + Trigger DMA request enable + 14 + 1 + + TDE + read-write + + Disabled + Trigger DMA request disabled + 0 + + + Enabled + Trigger DMA request enabled + 1 + + + + + CC4DE + Capture/Compare 4 DMA request enable + 12 + 1 + + + + CC3DE + Capture/Compare 3 DMA request enable + 11 + 1 + + + + CC2DE + Capture/Compare 2 DMA request enable + 10 + 1 + + + + CC1DE + Capture/Compare 1 DMA request enable + 9 + 1 + + CC1DE + read-write + + Disabled + CCx DMA request disabled + 0 + + + Enabled + CCx DMA request enabled + 1 + + + + + UDE + Update DMA request enable + 8 + 1 + + UDE + read-write + + Disabled + Update DMA request disabled + 0 + + + Enabled + Update DMA request enabled + 1 + + + + + TIE + Trigger interrupt enable + 6 + 1 + + TIE + read-write + + Disabled + Trigger interrupt disabled + 0 + + + Enabled + Trigger interrupt enabled + 1 + + + + + CC4IE + Capture/Compare 4 interrupt enable + 4 + 1 + + + + CC3IE + Capture/Compare 3 interrupt enable + 3 + 1 + + + + CC2IE + Capture/Compare 2 interrupt enable + 2 + 1 + + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + CC1IE + read-write + + Disabled + CCx interrupt disabled + 0 + + + Enabled + CCx interrupt enabled + 1 + + + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC4OF + Capture/Compare 4 overcapture flag + 12 + 1 + zeroToClear + + read + + + write + + + + CC3OF + Capture/Compare 3 overcapture flag + 11 + 1 + zeroToClear + + read + + + write + + + + CC2OF + Capture/compare 2 overcapture flag + 10 + 1 + zeroToClear + + read + + + write + + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + zeroToClear + + CC1OFR + read + + Overcapture + The counter value has been captured in TIMx_CCRx register while CCxIF flag was already set + 1 + + + + CC1OFW + write + + Clear + Clear flag + 0 + + + + + TIF + Trigger interrupt flag + 6 + 1 + zeroToClear + + TIFR + read + + NoTrigger + No trigger event occurred + 0 + + + Trigger + Trigger interrupt pending + 1 + + + + TIFW + write + + Clear + Clear flag + 0 + + + + + CC4IF + Capture/Compare 4 interrupt flag + 4 + 1 + zeroToClear + + read + + + write + + + + CC3IF + Capture/Compare 3 interrupt flag + 3 + 1 + zeroToClear + + read + + + write + + + + CC2IF + Capture/Compare 2 interrupt flag + 2 + 1 + zeroToClear + + read + + + write + + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + zeroToClear + + CC1IFR + read + + Match + If CC1 is an output: The content of the counter TIMx_CNT matches the content of the TIMx_CCR1 register. If CC1 is an input: The counter value has been captured in TIMx_CCR1 register. + 1 + + + + CC1IFW + write + + Clear + Clear flag + 0 + + + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + TG + Trigger generation + 6 + 1 + + TGW + write + + Trigger + The TIF flag is set in TIMx_SR register. Related interrupt or DMA transfer can occur if enabled. + 1 + + + + + CC4G + Capture/compare 4 generation + 4 + 1 + + + + CC3G + Capture/compare 3 generation + 3 + 1 + + + + CC2G + Capture/compare 2 generation + 2 + 1 + + + + CC1G + Capture/compare 1 generation + 1 + 1 + + CC1GW + write + + Trigger + If CC1 is an output: CC1IF flag is set, Corresponding interrupt or DMA request is sent if enabled. If CC1 is an input: The current value of the counter is captured in TIMx_CCR1 register. + 1 + + + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC2CE + OC2CE + 15 + 1 + + + OC2M + OC2M + 12 + 3 + + + + OC2PE + OC2PE + 11 + 1 + + OC2PE + read-write + + Disabled + Preload register on CCR2 disabled. New values written to CCR2 are taken into account immediately + 0 + + + Enabled + Preload register on CCR2 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC2FE + OC2FE + 10 + 1 + + + CC2S + CC2S + 8 + 2 + + CC2S + read-write + + Output + CC2 channel is configured as output + 0 + + + + + OC1CE + OC1CE + 7 + 1 + + + OC1M + OC1M + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC1PE + OC1PE + 3 + 1 + + OC1PE + read-write + + Disabled + Preload register on CCR1 disabled. New values written to CCR1 are taken into account immediately + 0 + + + Enabled + Preload register on CCR1 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC1FE + OC1FE + 2 + 1 + + + CC1S + CC1S + 0 + 2 + + CC1S + read-write + + Output + CC1 channel is configured as output + 0 + + + + + OC2M_3 + Output Compare 2 mode, bit 3 + 24 + 1 + + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + OC1M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 4 + + + 0 + 15 + + + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + CC2S + read-write + + TI2 + CC2 channel is configured as input, IC2 is mapped on TI2 + 1 + + + TI1 + CC2 channel is configured as input, IC2 is mapped on TI1 + 2 + + + TRC + CC2 channel is configured as input, IC2 is mapped on TRC + 3 + + + + + IC1F + Input capture 1 filter + 4 + 4 + + IC1F + read-write + + NoFilter + No filter, sampling is done at fDTS + 0 + + + FCK_INT_N2 + fSAMPLING=fCK_INT, N=2 + 1 + + + FCK_INT_N4 + fSAMPLING=fCK_INT, N=4 + 2 + + + FCK_INT_N8 + fSAMPLING=fCK_INT, N=8 + 3 + + + FDTS_Div2_N6 + fSAMPLING=fDTS/2, N=6 + 4 + + + FDTS_Div2_N8 + fSAMPLING=fDTS/2, N=8 + 5 + + + FDTS_Div4_N6 + fSAMPLING=fDTS/4, N=6 + 6 + + + FDTS_Div4_N8 + fSAMPLING=fDTS/4, N=8 + 7 + + + FDTS_Div8_N6 + fSAMPLING=fDTS/8, N=6 + 8 + + + FDTS_Div8_N8 + fSAMPLING=fDTS/8, N=8 + 9 + + + FDTS_Div16_N5 + fSAMPLING=fDTS/16, N=5 + 10 + + + FDTS_Div16_N6 + fSAMPLING=fDTS/16, N=6 + 11 + + + FDTS_Div16_N8 + fSAMPLING=fDTS/16, N=8 + 12 + + + FDTS_Div32_N5 + fSAMPLING=fDTS/32, N=5 + 13 + + + FDTS_Div32_N6 + fSAMPLING=fDTS/32, N=6 + 14 + + + FDTS_Div32_N8 + fSAMPLING=fDTS/32, N=8 + 15 + + + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + CC1S + read-write + + TI1 + CC1 channel is configured as input, IC1 is mapped on TI1 + 1 + + + TI2 + CC1 channel is configured as input, IC1 is mapped on TI2 + 2 + + + TRC + CC1 channel is configured as input, IC1 is mapped on TRC + 3 + + + + + + + CCMR2_Output + CCMR2_Output + capture/compare mode register 2 (output mode) + 0x1C + 0x20 + read-write + 0x00000000 + + + OC4CE + O24CE + 15 + 1 + + + OC4M + OC4M + 12 + 3 + + + + OC4PE + OC4PE + 11 + 1 + + OC4PE + read-write + + Disabled + Preload register on CCR4 disabled. New values written to CCR4 are taken into account immediately + 0 + + + Enabled + Preload register on CCR4 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC4FE + OC4FE + 10 + 1 + + + CC4S + CC4S + 8 + 2 + + CC4S + read-write + + Output + CC4 channel is configured as output + 0 + + + + + OC3CE + OC3CE + 7 + 1 + + + OC3M + OC3M + 4 + 3 + + OC3M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / AsymmetricPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC outputs OC1REF when the counter is counting up, OC2REF when it is counting down + 6 + + + PwmMode2 + Inversely to PwmMode1 / AsymmetricPwmMode2: Inversely to AsymmetricPwmMode1 + 7 + + + + + OC3PE + OC3PE + 3 + 1 + + OC3PE + read-write + + Disabled + Preload register on CCR3 disabled. New values written to CCR3 are taken into account immediately + 0 + + + Enabled + Preload register on CCR3 enabled. Preload value is loaded into active register on each update event + 1 + + + + + OC3FE + OC3FE + 2 + 1 + + + CC3S + CC3S + 0 + 2 + + CC3S + read-write + + Output + CC3 channel is configured as output + 0 + + + + + OC3M_3 + Output Compare 3 mode, bit 3 + 16 + 1 + + OC3M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + OC4M_3 + Output Compare 4 mode, bit 3 + 24 + 1 + + + + + + CCMR2_Input + CCMR2_Input + capture/compare mode register 2 (input mode) + CCMR2_Output + 0x1C + 0x20 + read-write + 0x00000000 + + + IC4F + Input capture 4 filter + 12 + 4 + + + 0 + 15 + + + + + IC4PSC + Input capture 4 prescaler + 10 + 2 + + + 0 + 3 + + + + + CC4S + Capture/Compare 4 selection + 8 + 2 + + CC4S + read-write + + TI4 + CC4 channel is configured as input, IC4 is mapped on TI4 + 1 + + + TI3 + CC4 channel is configured as input, IC4 is mapped on TI3 + 2 + + + TRC + CC4 channel is configured as input, IC4 is mapped on TRC + 3 + + + + + IC3F + Input capture 3 filter + 4 + 4 + + + 0 + 15 + + + + + IC3PSC + Input capture 3 prescaler + 2 + 2 + + + 0 + 3 + + + + + CC3S + Capture/compare 3 selection + 0 + 2 + + CC3S + read-write + + TI3 + CC3 channel is configured as input, IC3 is mapped on TI3 + 1 + + + TI4 + CC3 channel is configured as input, IC3 is mapped on TI4 + 2 + + + TRC + CC3 channel is configured as input, IC3 is mapped on TRC + 3 + + + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC4NP + Capture/Compare 4 output Polarity + 15 + 1 + + + CC4P + Capture/Compare 3 output Polarity + 13 + 1 + + + CC4E + Capture/Compare 4 output enable + 12 + 1 + + + CC3NP + Capture/Compare 3 output Polarity + 11 + 1 + + + CC3P + Capture/Compare 3 output Polarity + 9 + 1 + + + CC3E + Capture/Compare 3 output enable + 8 + 1 + + + CC2NP + Capture/Compare 2 output Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Counter value + 0 + 32 + + + 0 + 4294967295 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 32 + + + 0 + 4294967295 + + + + + + + 4 + 0x4 + 1-4 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 32 + + + 0 + 4294967295 + + + + + + + DCR + DCR + DMA control register + 0x48 + 0x20 + read-write + 0x00000000 + + + DBL + DMA burst length + 8 + 5 + + + 0 + 18 + + + + + DBA + DMA base address + 0 + 5 + + + 0 + 31 + + + + + + + DMAR + DMAR + DMA address for full transfer + 0x4C + 0x20 + read-write + 0x00000000 + + + DMAB + DMA register for burst accesses + 0 + 32 + + + + + OR + OR1 + TIM2 option register 1 + 0x50 + 0x20 + read-write + 0x00000000 + + + TI4_RMP + Input Capture 4 remap + 6 + 2 + + + + + + + TIM9 + General purpose timers + TIM + 0x40014000 + + 0x0 + 0x400 + registers + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + SMCR + SMCR + slave mode control register + 0x8 + 0x20 + read-write + 0x00000000 + + + MSM + Master/Slave mode + 7 + 1 + + + TS + Trigger selection + 4 + 3 + + + SMS + Slave mode selection + 0 + 3 + + + SMS_3 + Slave mode selection - bit 3 + 16 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + TIE + Trigger interrupt enable + 6 + 1 + + + CC2IE + Capture/Compare 2 interrupt enable + 2 + 1 + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC2OF + Capture/compare 2 overcapture flag + 10 + 1 + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + + + TIF + Trigger interrupt flag + 6 + 1 + + + CC2IF + Capture/Compare 2 interrupt flag + 2 + 1 + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + TG + Trigger generation + 6 + 1 + + + CC2G + Capture/compare 2 generation + 2 + 1 + + + CC1G + Capture/compare 1 generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC2M + Output Compare 2 mode + 12 + 3 + + + + OC2PE + Output Compare 2 preload enable + 11 + 1 + + + OC2FE + Output Compare 2 fast enable + 10 + 1 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + + OC1M + Output Compare 1 mode + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs / OpmMode1: Retriggerable OPM mode 1 - In up-counting mode, the channel is active until a trigger event is detected (on TRGI signal). In down-counting mode, the channel is inactive + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register / OpmMode2: Inversely to OpmMode1 + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register / Reserved + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy / Reserved + 3 + + + ForceInactive + OCyREF is forced low / CombinedPwmMode1: OCyREF has the same behavior as in PWM mode 1. OCyREFC is the logical OR between OC1REF and OC2REF + 4 + + + ForceActive + OCyREF is forced high / CombinedPwmMode2: OCyREF has the same behavior as in PWM mode 2. OCyREFC is the logical AND between OC1REF and OC2REF + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active / Reserved + 6 + + + PwmMode2 + Inversely to PwmMode1 / Reserved + 7 + + + + + OC1PE + Output Compare 1 preload enable + 3 + 1 + + + OC1FE + Output Compare 1 fast enable + 2 + 1 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + + OC2M_3 + Output Compare 2 mode, bit 3 + 24 + 1 + + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + OC1M_3 + read-write + + Normal + Normal output compare mode (modes 0-7) + 0 + + + Extended + Extended output compare mode (modes 7-15) + 1 + + + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC2F + Input capture 2 filter + 12 + 3 + + + IC2PSC + Input capture 2 prescaler + 10 + 2 + + + CC2S + Capture/Compare 2 selection + 8 + 2 + + + IC1F + Input capture 1 filter + 4 + 3 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC2NP + Capture/Compare 2 output Polarity + 7 + 1 + + + CC2P + Capture/Compare 2 output Polarity + 5 + 1 + + + CC2E + Capture/Compare 2 output enable + 4 + 1 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + counter value + 0 + 16 + + + 0 + 65535 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + 0 + 65535 + + + + + + + 2 + 0x4 + 1-2 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + 0 + 65535 + + + + + + + + + TIM12 + TIM + 0x40001800 + + + TIM10 + General-purpose-timers + TIM + 0x40014400 + + 0x0 + 0x400 + registers + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + CKD + Clock division + 8 + 2 + + CKD + read-write + + Div1 + t_DTS = t_CK_INT + 0 + + + Div2 + t_DTS = 2 × t_CK_INT + 1 + + + Div4 + t_DTS = 4 × t_CK_INT + 2 + + + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + CC1IE + Capture/Compare 1 interrupt enable + 1 + 1 + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + CC1OF + Capture/Compare 1 overcapture flag + 9 + 1 + + + CC1IF + Capture/compare 1 interrupt flag + 1 + 1 + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + CC1G + Capture/compare 1 generation + 1 + 1 + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CCMR1_Output + CCMR1_Output + capture/compare mode register 1 (output mode) + 0x18 + 0x20 + read-write + 0x00000000 + + + OC1M + Output Compare 1 mode + 4 + 3 + + OC1M + read-write + + Frozen + The comparison between the output compare register TIMx_CCRy and the counter TIMx_CNT has no effect on the outputs + 0 + + + ActiveOnMatch + Set channel to active level on match. OCyREF signal is forced high when the counter matches the capture/compare register + 1 + + + InactiveOnMatch + Set channel to inactive level on match. OCyREF signal is forced low when the counter matches the capture/compare register + 2 + + + Toggle + OCyREF toggles when TIMx_CNT=TIMx_CCRy + 3 + + + ForceInactive + OCyREF is forced low + 4 + + + ForceActive + OCyREF is forced high + 5 + + + PwmMode1 + In upcounting, channel is active as long as TIMx_CNT<TIMx_CCRy else inactive. In downcounting, channel is inactive as long as TIMx_CNT>TIMx_CCRy else active + 6 + + + PwmMode2 + Inversely to PwmMode1 + 7 + + + + + OC1PE + Output Compare 1 preload enable + 3 + 1 + + + OC1FE + Output Compare 1 fast enable + 2 + 1 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + + OC1M_3 + Output Compare 1 mode, bit 3 + 16 + 1 + + + + + CCMR1_Input + CCMR1_Input + capture/compare mode register 1 (input mode) + CCMR1_Output + 0x18 + 0x20 + read-write + 0x00000000 + + + IC1F + Input capture 1 filter + 4 + 4 + + + IC1PSC + Input capture 1 prescaler + 2 + 2 + + + CC1S + Capture/Compare 1 selection + 0 + 2 + + + + + CCER + CCER + capture/compare enable register + 0x20 + 0x20 + read-write + 0x00000000 + + + CC1NP + Capture/Compare 1 output Polarity + 3 + 1 + + + CC1P + Capture/Compare 1 output Polarity + 1 + 1 + + + CC1E + Capture/Compare 1 output enable + 0 + 1 + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + counter value + 0 + 16 + + + 0 + 65535 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Auto-reload value + 0 + 16 + + + 0 + 65535 + + + + + + + 1 + 0x0 + 1-1 + CCR%s + CCR1 + capture/compare register + 0x34 + 0x20 + read-write + 0x00000000 + + + CCR + Capture/Compare value + 0 + 16 + + + 0 + 65535 + + + + + + + OR + OR + option register + 0x50 + 0x20 + read-write + 0x00000000 + + + TI1_RMP + TIM11 Input 1 remapping capability + 0 + 2 + + + + + + + TIM11 + TIM + 0x40014800 + + + TIM13 + TIM + 0x40001C00 + + + TIM14 + TIM + 0x40002000 + + + TIM6 + Basic timers + TIM + 0x40001000 + + 0x0 + 0x400 + registers + + + TIM6_DAC + TIM6 global interrupt, DAC1 and DAC2 underrun + error interrupt + 54 + + + + CR1 + CR1 + control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + ARPE + Auto-reload preload enable + 7 + 1 + + ARPE + read-write + + Disabled + TIMx_APRR register is not buffered + 0 + + + Enabled + TIMx_APRR register is buffered + 1 + + + + + OPM + One-pulse mode + 3 + 1 + + OPM + read-write + + Disabled + Counter is not stopped at update event + 0 + + + Enabled + Counter stops counting at the next update event (clearing the CEN bit) + 1 + + + + + URS + Update request source + 2 + 1 + + URS + read-write + + AnyEvent + Any of counter overflow/underflow, setting UG, or update through slave mode, generates an update interrupt or DMA request + 0 + + + CounterOnly + Only counter overflow/underflow generates an update interrupt or DMA request + 1 + + + + + UDIS + Update disable + 1 + 1 + + UDIS + read-write + + Enabled + Update event enabled + 0 + + + Disabled + Update event disabled + 1 + + + + + CEN + Counter enable + 0 + 1 + + CEN + read-write + + Disabled + Counter disabled + 0 + + + Enabled + Counter enabled + 1 + + + + + UIFREMAP + UIF status bit remapping + 11 + 1 + + + + + CR2 + CR2 + control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + MMS + Master mode selection + 4 + 3 + + MMS + read-write + + Reset + Use UG bit from TIMx_EGR register + 0 + + + Enable + Use CNT bit from TIMx_CEN register + 1 + + + Update + Use the update event + 2 + + + + + + + DIER + DIER + DMA/Interrupt enable register + 0xC + 0x20 + read-write + 0x00000000 + + + UDE + Update DMA request enable + 8 + 1 + + UDE + read-write + + Disabled + Update DMA request disabled + 0 + + + Enabled + Update DMA request enabled + 1 + + + + + UIE + Update interrupt enable + 0 + 1 + + UIE + read-write + + Disabled + Update interrupt disabled + 0 + + + Enabled + Update interrupt enabled + 1 + + + + + + + SR + SR + status register + 0x10 + 0x20 + read-write + 0x00000000 + + + UIF + Update interrupt flag + 0 + 1 + zeroToClear + + UIFR + read + + NoUpdateOccurred + No update occurred + 0 + + + UpdatePending + Update interrupt pending + 1 + + + + UIFW + write + + Clear + Clear flag + 0 + + + + + + + EGR + EGR + event generation register + 0x14 + 0x20 + write-only + 0x00000000 + + + UG + Update generation + 0 + 1 + + UG + write + + Update + Re-initializes the timer counter and generates an update of the registers. + 1 + + + + + + + CNT + CNT + counter + 0x24 + 0x20 + read-write + 0x00000000 + + + CNT + Low counter value + 0 + 16 + + + 0 + 65535 + + + + + UIFCPY + UIF copy This bit is a read-only copy of the UIF bit of the TIMx_ISR register. If the UIFREMAP bit in the TIMxCR1 is reset, bit 31 is reserved and read at 0 + + 31 + 1 + read-only + + + + + PSC + PSC + prescaler + 0x28 + 0x20 + read-write + 0x00000000 + + + PSC + Prescaler value + 0 + 16 + + + 0 + 65535 + + + + + + + ARR + ARR + auto-reload register + 0x2C + 0x20 + read-write + 0x00000000 + + + ARR + Low Auto-reload value + 0 + 16 + + + 0 + 65535 + + + + + + + + + TIM7 + TIM + 0x40001400 + + TIM7 + TIM7 global interrupt + 55 + + + + Ethernet_MAC + Ethernet: media access control (MAC) + Ethernet + 0x40028000 + + 0x0 + 0x100 + registers + + + + MACCR + MACCR + Ethernet MAC configuration register + 0x0 + 0x20 + read-write + 0x00008000 + + + RE + Receiver enable + 2 + 1 + + RE + read-write + + Disabled + MAC receive state machine is disabled after the completion of the reception of the current frame + 0 + + + Enabled + MAC receive state machine is enabled + 1 + + + + + TE + Transmitter enable + 3 + 1 + + TE + read-write + + Disabled + MAC transmit state machine is disabled after completion of the transmission of the current frame + 0 + + + Enabled + MAC transmit state machine is enabled + 1 + + + + + DC + Deferral check + 4 + 1 + + DC + read-write + + Disabled + MAC defers until CRS signal goes inactive + 0 + + + Enabled + Deferral check function enabled + 1 + + + + + BL + Back-off limit + 5 + 2 + + BL + read-write + + BL10 + For retransmission n, wait up to 2^min(n, 10) time slots + 0 + + + BL8 + For retransmission n, wait up to 2^min(n, 8) time slots + 1 + + + BL4 + For retransmission n, wait up to 2^min(n, 4) time slots + 2 + + + BL1 + For retransmission n, wait up to 2^min(n, 1) time slots + 3 + + + + + APCS + Automatic pad/CRC stripping + 7 + 1 + + APCS + read-write + + Disabled + MAC passes all incoming frames unmodified + 0 + + + Strip + MAC strips the Pad/FCS field on incoming frames only for lengths less than or equal to 1500 bytes + 1 + + + + + RD + Retry disable + 9 + 1 + + RD + read-write + + Enabled + MAC attempts retries based on the settings of BL + 0 + + + Disabled + MAC attempts only 1 transmission + 1 + + + + + IPCO + IPv4 checksum offload + 10 + 1 + + IPCO + read-write + + Disabled + IPv4 checksum offload disabled + 0 + + + Offload + IPv4 checksums are checked in received frames + 1 + + + + + DM + Duplex mode + 11 + 1 + + DM + read-write + + HalfDuplex + MAC operates in half-duplex mode + 0 + + + FullDuplex + MAC operates in full-duplex mode + 1 + + + + + LM + Loopback mode + 12 + 1 + + LM + read-write + + Normal + Normal mode + 0 + + + Loopback + MAC operates in loopback mode at the MII + 1 + + + + + ROD + Receive own disable + 13 + 1 + + ROD + read-write + + Enabled + MAC receives all packets from PHY while transmitting + 0 + + + Disabled + MAC disables reception of frames in half-duplex mode + 1 + + + + + FES + Fast Ethernet speed + 14 + 1 + + FES + read-write + + FES10 + 10 Mbit/s + 0 + + + FES100 + 100 Mbit/s + 1 + + + + + CSD + Carrier sense disable + 16 + 1 + + CSD + read-write + + Enabled + Errors generated due to loss of carrier + 0 + + + Disabled + No error generated due to loss of carrier + 1 + + + + + IFG + Interframe gap + 17 + 3 + + IFG + read-write + + IFG96 + 96 bit times + 0 + + + IFG88 + 88 bit times + 1 + + + IFG80 + 80 bit times + 2 + + + IFG72 + 72 bit times + 3 + + + IFG64 + 64 bit times + 4 + + + IFG56 + 56 bit times + 5 + + + IFG48 + 48 bit times + 6 + + + IFG40 + 40 bit times + 7 + + + + + JD + Jabber disable + 22 + 1 + + JD + read-write + + Enabled + Jabber enabled, transmit frames up to 2048 bytes + 0 + + + Disabled + Jabber disabled, transmit frames up to 16384 bytes + 1 + + + + + WD + Watchdog disable + 23 + 1 + + WD + read-write + + Enabled + Watchdog enabled, receive frames limited to 2048 bytes + 0 + + + Disabled + Watchdog disabled, receive frames may be up to to 16384 bytes + 1 + + + + + CSTF + CRC stripping for type frames + 25 + 1 + + CSTF + read-write + + Disabled + CRC not stripped + 0 + + + Enabled + CRC stripped + 1 + + + + + + + MACFFR + MACFFR + Ethernet MAC frame filter register + 0x4 + 0x20 + read-write + 0x00000000 + + + PM + Promiscuous mode + 0 + 1 + + PM + read-write + + Disabled + Normal address filtering + 0 + + + Enabled + Address filters pass all incoming frames regardless of their destination or source address + 1 + + + + + HU + Hash unicast + 1 + 1 + + HU + read-write + + Perfect + MAC performs a perfect destination address filtering for unicast frames + 0 + + + Hash + MAC performs destination address filtering of received unicast frames according to the hash table + 1 + + + + + HM + Hash multicast + 2 + 1 + + HM + read-write + + Perfect + MAC performs a perfect destination address filtering for multicast frames + 0 + + + Hash + MAC performs destination address filtering of received multicast frames according to the hash table + 1 + + + + + DAIF + Destination address unique filtering + 3 + 1 + + DAIF + read-write + + Normal + Normal filtering of frames + 0 + + + Invert + Address check block operates in inverse filtering mode for the DA address comparison + 1 + + + + + PAM + Pass all multicast + 4 + 1 + + PAM + read-write + + Disabled + Filtering of multicast frames depends on HM + 0 + + + Enabled + All received frames with a multicast destination address are passed + 1 + + + + + BFD + Broadcast frames disable + 5 + 1 + + BFD + read-write + + Enabled + Address filters pass all received broadcast frames + 0 + + + Disabled + Address filters filter all incoming broadcast frames + 1 + + + + + PCF + Pass control frames + 6 + 2 + + PCF + read-write + + PreventAll + MAC prevents all control frames from reaching the application + 0 + + + ForwardAllExceptPause + MAC forwards all control frames to application except Pause + 1 + + + ForwardAll + MAC forwards all control frames to application even if they fail the address filter + 2 + + + ForwardAllFiltered + MAC forwards control frames that pass the address filter + 3 + + + + + SAIF + Source address inverse filtering + 7 + 1 + + SAIF + read-write + + Normal + Source address filter operates normally + 0 + + + Invert + Source address filter operation inverted + 1 + + + + + SAF + Source address filter + 8 + 1 + + SAF + read-write + + Disabled + Source address ignored + 0 + + + Enabled + MAC drops frames that fail the source address filter + 1 + + + + + HPF + Hash or perfect filter + 9 + 1 + + HPF + read-write + + HashOnly + If HM or HU is set, only frames that match the Hash filter are passed + 0 + + + HashOrPerfect + If HM or HU is set, frames that match either the perfect filter or the hash filter are passed + 1 + + + + + RA + Receive all + 31 + 1 + + RA + read-write + + Disabled + MAC receiver passes on to the application only those frames that have passed the SA/DA address file + 0 + + + Enabled + MAC receiver passes oll received frames on to the application + 1 + + + + + + + MACHTHR + MACHTHR + Ethernet MAC hash table high register + 0x8 + 0x20 + read-write + 0x00000000 + + + HTH + Upper 32 bits of hash table + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACHTLR + MACHTLR + Ethernet MAC hash table low register + 0xC + 0x20 + read-write + 0x00000000 + + + HTL + Lower 32 bits of hash table + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACMIIAR + MACMIIAR + Ethernet MAC MII address register + 0x10 + 0x20 + read-write + 0x00000000 + + + MB + MII busy + 0 + 1 + + MB + read-write + + Busy + This bit is set to 1 by the application to indicate that a read or write access is in progress + 1 + + + + + MW + MII write + 1 + 1 + + MW + read-write + + Read + Read operation + 0 + + + Write + Write operation + 1 + + + + + CR + Clock range + 2 + 3 + + CR + read-write + + CR_60_100 + 60-100MHz HCLK/42 + 0 + + + CR_100_150 + 100-150 MHz HCLK/62 + 1 + + + CR_20_35 + 20-35MHz HCLK/16 + 2 + + + CR_35_60 + 35-60MHz HCLK/16 + 3 + + + CR_150_168 + 150-168MHz HCLK/102 + 4 + + + + + MR + MII register - select the desired MII register in the PHY device + 6 + 5 + + + 0 + 31 + + + + + PA + PHY address - select which of possible 32 PHYs is being accessed + 11 + 5 + + + 0 + 31 + + + + + + + MACMIIDR + MACMIIDR + Ethernet MAC MII data register + 0x14 + 0x20 + read-write + 0x00000000 + + + MD + MII data read from/written to the PHY + 0 + 16 + + + 0 + 65535 + + + + + + + MACFCR + MACFCR + Ethernet MAC flow control register + 0x18 + 0x20 + read-write + 0x00000000 + + + FCB + Flow control busy/back pressure activate + 0 + 1 + + FCB + read-write + + DisableBackPressure + In half duplex only, deasserts back pressure + 0 + + + PauseOrBackPressure + In full duplex, initiate a Pause control frame. In half duplex, assert back pressure + 1 + + + + + TFCE + Transmit flow control enable + 1 + 1 + + TFCE + read-write + + Disabled + In full duplex, flow control is disabled. In half duplex, back pressure is disabled + 0 + + + Enabled + In full duplex, flow control is enabled. In half duplex, back pressure is enabled + 1 + + + + + RFCE + Receive flow control enable + 2 + 1 + + RFCE + read-write + + Disabled + Pause frames are not decoded + 0 + + + Enabled + MAC decodes received Pause frames and disables its transmitted for a specified time + 1 + + + + + UPFD + Unicast pause frame detect + 3 + 1 + + UPFD + read-write + + Disabled + MAC detects only a Pause frame with the multicast address specified in the 802.3x standard + 0 + + + Enabled + MAC additionally detects Pause frames with the station's unicast address + 1 + + + + + PLT + Pause low threshold + 4 + 2 + + PLT + read-write + + PLT4 + Pause time minus 4 slot times + 0 + + + PLT28 + Pause time minus 28 slot times + 1 + + + PLT144 + Pause time minus 144 slot times + 2 + + + PLT256 + Pause time minus 256 slot times + 3 + + + + + ZQPD + Zero-quanta pause disable + 7 + 1 + + ZQPD + read-write + + Enabled + Normal operation with automatic zero-quanta pause control frame generation + 0 + + + Disabled + Automatic generation of zero-quanta pause control frames is disabled + 1 + + + + + PT + Pause time + 16 + 16 + + + 0 + 65535 + + + + + + + MACVLANTR + MACVLANTR + Ethernet MAC VLAN tag register + 0x1C + 0x20 + read-write + 0x00000000 + + + VLANTI + VLAN tag identifier (for receive frames) + 0 + 16 + + + 0 + 65535 + + + + + VLANTC + 12-bit VLAN tag comparison + 16 + 1 + + VLANTC + read-write + + VLANTC16 + Full 16 bit VLAN identifiers are used for comparison and filtering + 0 + + + VLANTC12 + 12 bit VLAN identifies are used for comparison and filtering + 1 + + + + + + + MACPMTCSR + MACPMTCSR + Ethernet MAC PMT control and status register + 0x2C + 0x20 + read-write + 0x00000000 + + + PD + Power down + 0 + 1 + + PD + read-write + + Enabled + All received frames will be dropped. Cleared automatically when a magic packet or wakeup frame is received + 1 + + + + + MPE + Magic packet enable + 1 + 1 + + MPE + read-write + + Disabled + No power management event generated due to Magic Packet reception + 0 + + + Enabled + Enable generation of a power management event due to Magic Packet reception + 1 + + + + + WFE + Wakeup frame enable + 2 + 1 + + WFE + read-write + + Disabled + No power management event generated due to wakeup frame reception + 0 + + + Enabled + Enable generation of a power management event due to wakeup frame reception + 1 + + + + + MPR + Magic packet received + 5 + 1 + + + WFR + Wakeup frame received + 6 + 1 + + + GU + Global unicast + 9 + 1 + + GU + read-write + + Disabled + Normal operation + 0 + + + Enabled + Any unicast packet filtered by the MAC address recognition may be a wakeup frame + 1 + + + + + WFFRPR + Wakeup frame filter register pointer reset + 31 + 1 + + WFFRPR + read-write + + Reset + Reset wakeup frame filter register point to 0b000. Automatically cleared + 1 + + + + + + + MACDBGR + MACDBGR + Ethernet MAC debug register + 0x34 + 0x20 + read-only + 0x00000000 + + + TFF + Tx FIFO full + 25 + 1 + + + TFNE + Tx FIFO not empty + 24 + 1 + + + TFWA + Tx FIFO write active + 22 + 1 + + + TFRS + Tx FIFO read status + 20 + 2 + + + MTP + MAC transmitter in pause + 19 + 1 + + + MTFCS + MAC transmit frame controller status + 17 + 2 + + + MMTEA + MAC MII transmit engine active + 16 + 1 + + + RFFL + Rx FIFO fill level + 8 + 2 + + + RFRCS + Rx FIFO read controller status + 5 + 2 + + + RFWRA + Rx FIFO write controller active + 4 + 1 + + + MSFRWCS + MAC small FIFO read/write controllers status + 1 + 2 + + + MMRPEA + MAC MII receive protocol engine active + 0 + 1 + + + + + MACSR + MACSR + Ethernet MAC interrupt status register + 0x38 + 0x20 + 0x00000000 + + + PMTS + PMT status + 3 + 1 + read-only + + + MMCS + MMC status + 4 + 1 + read-only + + + MMCRS + MMC receive status + 5 + 1 + read-only + + + MMCTS + MMC transmit status + 6 + 1 + read-only + + + TSTS + Time stamp trigger status + 9 + 1 + read-write + + + + + MACIMR + MACIMR + Ethernet MAC interrupt mask register + 0x3C + 0x20 + read-write + 0x00000000 + + + PMTIM + PMT interrupt mask + 3 + 1 + + PMTIM + read-write + + Unmasked + PMT Status interrupt generation enabled + 0 + + + Masked + PMT Status interrupt generation disabled + 1 + + + + + TSTIM + Time stamp trigger interrupt mask + 9 + 1 + + TSTIM + read-write + + Unmasked + Time stamp interrupt generation enabled + 0 + + + Masked + Time stamp interrupt generation disabled + 1 + + + + + + + MACA0HR + MACA0HR + Ethernet MAC address 0 high register + 0x40 + 0x20 + 0x0010FFFF + + + MACA0H + MAC address0 high + 0 + 16 + read-write + + + 0 + 65535 + + + + + MO + Always 1 + 31 + 1 + read-only + + + + + MACA0LR + MACA0LR + Ethernet MAC address 0 low register + 0x44 + 0x20 + read-write + 0xFFFFFFFF + + + MACA0L + 0 + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACA1HR + MACA1HR + Ethernet MAC address 1 high register + 0x48 + 0x20 + read-write + 0x0000FFFF + + + MACA1H + MACA1H + 0 + 16 + + + 0 + 65535 + + + + + MBC + MBC + 24 + 6 + + + 0 + 63 + + + + + SA + SA + 30 + 1 + + SA + read-write + + Destination + This address is used for comparison with DA fields of the received frame + 0 + + + Source + This address is used for comparison with SA fields of received frames + 1 + + + + + AE + AE + 31 + 1 + + AE + read-write + + Disabled + Address filters ignore this address + 0 + + + Enabled + Address filters use this address + 1 + + + + + + + MACA1LR + MACA1LR + Ethernet MAC address1 low register + 0x4C + 0x20 + read-write + 0xFFFFFFFF + + + MACA1L + MACA1LR + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACA2HR + MACA2HR + Ethernet MAC address 2 high register + 0x50 + 0x20 + read-write + 0x0000FFFF + + + MACA2H + MAC2AH + 0 + 16 + + + 0 + 65535 + + + + + MBC + MBC + 24 + 6 + + + 0 + 63 + + + + + SA + SA + 30 + 1 + + SA + read-write + + Destination + This address is used for comparison with DA fields of the received frame + 0 + + + Source + This address is used for comparison with SA fields of received frames + 1 + + + + + AE + AE + 31 + 1 + + AE + read-write + + Disabled + Address filters ignore this address + 0 + + + Enabled + Address filters use this address + 1 + + + + + + + MACA2LR + MACA2LR + Ethernet MAC address 2 low register + 0x54 + 0x20 + read-write + 0xFFFFFFFF + + + MACA2L + MACA2L + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACA3HR + MACA3HR + Ethernet MAC address 3 high register + 0x58 + 0x20 + read-write + 0x0000FFFF + + + MACA3H + MACA3H + 0 + 16 + + + 0 + 65535 + + + + + MBC + MBC + 24 + 6 + + + 0 + 63 + + + + + SA + SA + 30 + 1 + + SA + read-write + + Destination + This address is used for comparison with DA fields of the received frame + 0 + + + Source + This address is used for comparison with SA fields of received frames + 1 + + + + + AE + AE + 31 + 1 + + AE + read-write + + Disabled + Address filters ignore this address + 0 + + + Enabled + Address filters use this address + 1 + + + + + + + MACA3LR + MACA3LR + Ethernet MAC address 3 low register + 0x5C + 0x20 + read-write + 0xFFFFFFFF + + + MACA3L + MBCA3L + 0 + 32 + + + 0 + 4294967295 + + + + + + + MACRWUFFER + MACRWUFFER + Ethernet MAC remote wakeup frame filter register + 0x60 + 0x20 + read-write + 0xFFFFFFFF + + + + + Ethernet_MMC + Ethernet: MAC management counters + Ethernet + 0x40028100 + + 0x0 + 0x400 + registers + + + + MMCCR + MMCCR + Ethernet MMC control register + 0x0 + 0x20 + read-write + 0x00000000 + + + CR + Counter reset + 0 + 1 + + CR + read-write + + Reset + Reset all counters. Cleared automatically + 1 + + + + + CSR + Counter stop rollover + 1 + 1 + + CSR + read-write + + Disabled + Counters roll over to zero after reaching the maximum value + 0 + + + Enabled + Counters do not roll over to zero after reaching the maximum value + 1 + + + + + ROR + Reset on read + 2 + 1 + + ROR + read-write + + Disabled + MMC counters do not reset on read + 0 + + + Enabled + MMC counters reset to zero after read + 1 + + + + + MCF + MMC counter freeze + 3 + 1 + + MCF + read-write + + Unfrozen + All MMC counters update normally + 0 + + + Frozen + All MMC counters frozen to their current value + 1 + + + + + MCP + MMC counter preset + 4 + 1 + + MCP + read-write + + Preset + MMC counters will be preset to almost full or almost half. Cleared automatically + 1 + + + + + MCFHP + MMC counter Full-Half preset + 5 + 1 + + MCFHP + read-write + + AlmostHalf + When MCP is set, MMC counters are preset to almost-half value 0x7FFF_FFF0 + 0 + + + AlmostFull + When MCP is set, MMC counters are preset to almost-full value 0xFFFF_FFF0 + 1 + + + + + + + MMCRIR + MMCRIR + Ethernet MMC receive interrupt register + 0x4 + 0x20 + read-write + 0x00000000 + + + RFCES + Received frames CRC error status + 5 + 1 + + + RFAES + Received frames alignment error status + 6 + 1 + + + RGUFS + Received good Unicast frames status + 17 + 1 + + + + + MMCTIR + MMCTIR + Ethernet MMC transmit interrupt register + 0x8 + 0x20 + read-only + 0x00000000 + + + TGFSCS + Transmitted good frames single collision status + 14 + 1 + + + TGFMSCS + Transmitted good frames more than single collision status + 15 + 1 + + + TGFS + Transmitted good frames status + 21 + 1 + + + + + MMCRIMR + MMCRIMR + Ethernet MMC receive interrupt mask register + 0xC + 0x20 + read-write + 0x00000000 + + + RFCEM + Received frame CRC error mask + 5 + 1 + + RFCEM + read-write + + Unmasked + Received-crc-error counter half-full interrupt enabled + 0 + + + Masked + Received-crc-error counter half-full interrupt disabled + 1 + + + + + RFAEM + Received frames alignment error mask + 6 + 1 + + RFAEM + read-write + + Unmasked + Received-alignment-error counter half-full interrupt enabled + 0 + + + Masked + Received-alignment-error counter half-full interrupt disabled + 1 + + + + + RGUFM + Received good Unicast frames mask + 17 + 1 + + RGUFM + read-write + + Unmasked + Received-good-unicast counter half-full interrupt enabled + 0 + + + Masked + Received-good-unicast counter half-full interrupt disabled + 1 + + + + + + + MMCTIMR + MMCTIMR + Ethernet MMC transmit interrupt mask register + 0x10 + 0x20 + read-write + 0x00000000 + + + TGFSCM + Transmitted good frames single collision mask + 14 + 1 + + TGFSCM + read-write + + Unmasked + Transmitted-good-single-collision half-full interrupt enabled + 0 + + + Masked + Transmitted-good-single-collision half-full interrupt disabled + 1 + + + + + TGFMSCM + Transmitted good frames more than single collision mask + 15 + 1 + + TGFMSCM + read-write + + Unmasked + Transmitted-good-multiple-collision half-full interrupt enabled + 0 + + + Masked + Transmitted-good-multiple-collision half-full interrupt disabled + 1 + + + + + TGFM + Transmitted good frames mask + 21 + 1 + + TGFM + read-write + + Unmasked + Transmitted-good counter half-full interrupt enabled + 0 + + + Masked + Transmitted-good counter half-full interrupt disabled + 1 + + + + + + + MMCTGFSCCR + MMCTGFSCCR + Ethernet MMC transmitted good frames after a single collision counter + 0x4C + 0x20 + read-only + 0x00000000 + + + TGFSCC + Transmitted good frames single collision counter + 0 + 32 + + + + + MMCTGFMSCCR + MMCTGFMSCCR + Ethernet MMC transmitted good frames after more than a single collision + 0x50 + 0x20 + read-only + 0x00000000 + + + TGFMSCC + TGFMSCC + 0 + 32 + + + + + MMCTGFCR + MMCTGFCR + Ethernet MMC transmitted good frames counter register + 0x68 + 0x20 + read-only + 0x00000000 + + + TGFC + HTL + 0 + 32 + + + + + MMCRFCECR + MMCRFCECR + Ethernet MMC received frames with CRC error counter register + 0x94 + 0x20 + read-only + 0x00000000 + + + RFCFC + RFCFC + 0 + 32 + + + + + MMCRFAECR + MMCRFAECR + Ethernet MMC received frames with alignment error counter register + 0x98 + 0x20 + read-only + 0x00000000 + + + RFAEC + RFAEC + 0 + 32 + + + + + MMCRGUFCR + MMCRGUFCR + MMC received good unicast frames counter register + 0xC4 + 0x20 + read-only + 0x00000000 + + + RGUFC + RGUFC + 0 + 32 + + + + + + + Ethernet_PTP + Ethernet: Precision time protocol + Ethernet + 0x40028700 + + 0x0 + 0x400 + registers + + + + PTPTSCR + PTPTSCR + Ethernet PTP time stamp control register + 0x0 + 0x20 + read-write + 0x00002000 + + + TSE + TSE + 0 + 1 + + + TSFCU + TSFCU + 1 + 1 + + + TSPTPPSV2E + TSPTPPSV2E + 10 + 1 + + + TSSPTPOEFE + TSSPTPOEFE + 11 + 1 + + + TSSIPV6FE + TSSIPV6FE + 12 + 1 + + + TSSIPV4FE + TSSIPV4FE + 13 + 1 + + + TSSEME + TSSEME + 14 + 1 + + + TSSMRME + TSSMRME + 15 + 1 + + + TSCNT + TSCNT + 16 + 2 + + + TSPFFMAE + TSPFFMAE + 18 + 1 + + + TSSTI + TSSTI + 2 + 1 + + + TSSTU + TSSTU + 3 + 1 + + + TSITE + TSITE + 4 + 1 + + + TTSARU + TTSARU + 5 + 1 + + + TSSARFE + TSSARFE + 8 + 1 + + + TSSSR + TSSSR + 9 + 1 + + + + + PTPSSIR + PTPSSIR + Ethernet PTP subsecond increment register + 0x4 + 0x20 + read-write + 0x00000000 + + + STSSI + STSSI + 0 + 8 + + + + + PTPTSHR + PTPTSHR + Ethernet PTP time stamp high register + 0x8 + 0x20 + read-only + 0x00000000 + + + STS + STS + 0 + 32 + + + + + PTPTSLR + PTPTSLR + Ethernet PTP time stamp low register + 0xC + 0x20 + read-only + 0x00000000 + + + STSS + STSS + 0 + 31 + + + STPNS + STPNS + 31 + 1 + + + + + PTPTSHUR + PTPTSHUR + Ethernet PTP time stamp high update register + 0x10 + 0x20 + read-write + 0x00000000 + + + TSUS + TSUS + 0 + 32 + + + + + PTPTSLUR + PTPTSLUR + Ethernet PTP time stamp low update register + 0x14 + 0x20 + read-write + 0x00000000 + + + TSUSS + TSUSS + 0 + 31 + + + TSUPNS + TSUPNS + 31 + 1 + + + + + PTPTSAR + PTPTSAR + Ethernet PTP time stamp addend register + 0x18 + 0x20 + read-write + 0x00000000 + + + TSA + TSA + 0 + 32 + + + + + PTPTTHR + PTPTTHR + Ethernet PTP target time high register + 0x1C + 0x20 + read-write + 0x00000000 + + + TTSH + 0 + 0 + 32 + + + + + PTPTTLR + PTPTTLR + Ethernet PTP target time low register + 0x20 + 0x20 + read-write + 0x00000000 + + + TTSL + TTSL + 0 + 32 + + + + + PTPTSSR + PTPTSSR + Ethernet PTP time stamp status register + 0x28 + 0x20 + read-only + 0x00000000 + + + TSSO + TSSO + 0 + 1 + + + TSTTR + TSTTR + 1 + 1 + + + + + PTPPPSCR + PTPPPSCR + Ethernet PTP PPS control register + 0x2C + 0x20 + read-only + 0x00000000 + + + TSSO + TSSO + 0 + 1 + + + TSTTR + TSTTR + 1 + 1 + + + + + + + Ethernet_DMA + Ethernet: DMA controller operation + Ethernet + 0x40029000 + + 0x0 + 0x400 + registers + + + ETH + Ethernet global interrupt + 61 + + + ETH_WKUP + Ethernet Wakeup through EXTI line + interrupt + 62 + + + + DMABMR + DMABMR + Ethernet DMA bus mode register + 0x0 + 0x20 + read-write + 0x00002101 + + + SR + Software reset + 0 + 1 + + SR + read-write + + Reset + Reset all MAC subsystem internal registers and logic. Cleared automatically + 1 + + + + + DA + DMA arbitration + 1 + 1 + + DA + read-write + + RoundRobin + Round-robin with Rx:Tx priority given by PM + 0 + + + RxPriority + Rx has priority over Tx + 1 + + + + + DSL + Descriptor skip length + 2 + 5 + + + 0 + 31 + + + + + EDFE + Enhanced descriptor format enable + 7 + 1 + + EDFE + read-write + + Disabled + Normal descriptor format + 0 + + + Enabled + Enhanced 32-byte descriptor format, required for timestamping and IPv4 checksum offload + 1 + + + + + PBL + Programmable burst length + 8 + 6 + + PBL + read-write + + PBL1 + Maximum of 1 beat per DMA transaction + 1 + + + PBL2 + Maximum of 2 beats per DMA transaction + 2 + + + PBL4 + Maximum of 4 beats per DMA transaction + 4 + + + PBL8 + Maximum of 8 beats per DMA transaction + 8 + + + PBL16 + Maximum of 16 beats per DMA transaction + 16 + + + PBL32 + Maximum of 32 beats per DMA transaction + 32 + + + + + PM + Rx-Tx priority ratio + 14 + 2 + + PM + read-write + + OneToOne + RxDMA priority over TxDMA is 1:1 + 0 + + + TwoToOne + RxDMA priority over TxDMA is 2:1 + 1 + + + ThreeToOne + RxDMA priority over TxDMA is 3:1 + 2 + + + FourToOne + RxDMA priority over TxDMA is 4:1 + 3 + + + + + FB + Fixed burst + 16 + 1 + + FB + read-write + + Variable + AHB uses SINGLE and INCR burst transfers + 0 + + + Fixed + AHB uses only fixed burst transfers + 1 + + + + + RDP + Rx DMA PBL + 17 + 6 + + RDP + read-write + + RDP1 + 1 beat per RxDMA transaction + 1 + + + RDP2 + 2 beats per RxDMA transaction + 2 + + + RDP4 + 4 beats per RxDMA transaction + 4 + + + RDP8 + 8 beats per RxDMA transaction + 8 + + + RDP16 + 16 beats per RxDMA transaction + 16 + + + RDP32 + 32 beats per RxDMA transaction + 32 + + + + + USP + Use separate PBL + 23 + 1 + + USP + read-write + + Combined + PBL value used for both Rx and Tx DMA + 0 + + + Separate + RxDMA uses RDP value, TxDMA uses PBL value + 1 + + + + + FPM + 4xPBL mode + 24 + 1 + + FPM + read-write + + x1 + PBL values used as-is + 0 + + + x4 + PBL values multiplied by 4 + 1 + + + + + AAB + Address-aligned beats + 25 + 1 + + AAB + read-write + + Unaligned + Bursts are not aligned + 0 + + + Aligned + Align bursts to start address LS bits. First burst alignment depends on FB bit + 1 + + + + + MB + Mixed burst + 26 + 1 + + MB + read-write + + Normal + Fixed burst transfers (INCRx and SINGLE) for burst lengths of 16 and below + 0 + + + Mixed + If FB is low, start all bursts greater than 16 with INCR (undefined burst) + 1 + + + + + + + DMATPDR + DMATPDR + Ethernet DMA transmit poll demand register + 0x4 + 0x20 + read-write + 0x00000000 + + + TPD + Transmit poll demand + 0 + 32 + + TPD + read-write + + Poll + Poll the transmit descriptor list + 0 + + + + + + + DMARPDR + DMARPDR + EHERNET DMA receive poll demand register + 0x8 + 0x20 + read-write + 0x00000000 + + + RPD + Receive poll demand + 0 + 32 + + RPD + read-write + + Poll + Poll the receive descriptor list + 0 + + + + + + + DMARDLAR + DMARDLAR + Ethernet DMA receive descriptor list address register + 0xC + 0x20 + read-write + 0x00000000 + + + SRL + Start of receive list + 0 + 32 + + + + + DMATDLAR + DMATDLAR + Ethernet DMA transmit descriptor list address register + 0x10 + 0x20 + read-write + 0x00000000 + + + STL + Start of transmit list + 0 + 32 + + + + + DMASR + DMASR + Ethernet DMA status register + 0x14 + 0x20 + 0x00000000 + + + TS + Transmit status + 0 + 1 + read-write + + + TPSS + Transmit process stopped status + 1 + 1 + read-write + + + TBUS + Transmit buffer unavailable status + 2 + 1 + read-write + + + TJTS + Transmit jabber timeout status + 3 + 1 + read-write + + + ROS + Receive overflow status + 4 + 1 + read-write + + + TUS + Transmit underflow status + 5 + 1 + read-write + + + RS + Receive status + 6 + 1 + read-write + + + RBUS + Receive buffer unavailable status + 7 + 1 + read-write + + + RPSS + Receive process stopped status + 8 + 1 + read-write + + + PWTS + PWTS + 9 + 1 + read-write + + + ETS + Early transmit status + 10 + 1 + read-write + + + FBES + Fatal bus error status + 13 + 1 + read-write + + + ERS + Early receive status + 14 + 1 + read-write + + + AIS + Abnormal interrupt summary + 15 + 1 + read-write + + + NIS + Normal interrupt summary + 16 + 1 + read-write + + + RPS + Receive process state + 17 + 3 + read-only + + RPS + read + + Stopped + Stopped, reset or Stop Receive command issued + 0 + + + RunningFetching + Running, fetching receive transfer descriptor + 1 + + + RunningWaiting + Running, waiting for receive packet + 3 + + + Suspended + Suspended, receive descriptor unavailable + 4 + + + RunningWriting + Running, writing data to host memory buffer + 7 + + + + + TPS + Transmit process state + 20 + 3 + read-only + + TPS + read + + Stopped + Stopped, Reset or Stop Transmit command issued + 0 + + + RunningFetching + Running, fetching transmit transfer descriptor + 1 + + + RunningWaiting + Running, waiting for status + 2 + + + RunningReading + Running, reading data from host memory buffer + 3 + + + Suspended + Suspended, transmit descriptor unavailable or transmit buffer underflow + 6 + + + Running + Running, closing transmit descriptor + 7 + + + + + EBS + Error bits status + 23 + 3 + read-only + + + MMCS + MMC status + 27 + 1 + read-only + + + PMTS + PMT status + 28 + 1 + read-only + + + TSTS + Time stamp trigger status + 29 + 1 + read-only + + + + + DMAOMR + DMAOMR + Ethernet DMA operation mode register + 0x18 + 0x20 + read-write + 0x00000000 + + + SR + Start/stop receive + 1 + 1 + + SR + read-write + + Stopped + Reception is stopped after transfer of the current frame + 0 + + + Started + Reception is placed in the Running state + 1 + + + + + OSF + Operate on second frame + 2 + 1 + + + RTC + Receive threshold control + 3 + 2 + + RTC + read-write + + RTC64 + 64 bytes + 0 + + + RTC32 + 32 bytes + 1 + + + RTC96 + 96 bytes + 2 + + + RTC128 + 128 bytes + 3 + + + + + FUGF + Forward undersized good frames + 6 + 1 + + FUGF + read-write + + Drop + Rx FIFO drops all frames of less than 64 bytes + 0 + + + Forward + Rx FIFO forwards undersized frames + 1 + + + + + FEF + Forward error frames + 7 + 1 + + FEF + read-write + + Drop + Rx FIFO drops frames with error status + 0 + + + Forward + All frames except runt error frames are forwarded to the DMA + 1 + + + + + ST + Start/stop transmission + 13 + 1 + + ST + read-write + + Stopped + Transmission is placed in the Stopped state + 0 + + + Started + Transmission is placed in Running state + 1 + + + + + TTC + Transmit threshold control + 14 + 3 + + TTC + read-write + + TTC64 + 64 bytes + 0 + + + TTC128 + 128 bytes + 1 + + + TTC192 + 192 bytes + 2 + + + TTC256 + 256 bytes + 3 + + + TTC40 + 40 bytes + 4 + + + TTC32 + 32 bytes + 5 + + + TTC24 + 24 bytes + 6 + + + TTC16 + 16 bytes + 7 + + + + + FTF + Flush transmit FIFO + 20 + 1 + + FTF + read-write + + Flush + Transmit FIFO controller logic is reset to its default values. Cleared automatically + 1 + + + + + TSF + Transmit store and forward + 21 + 1 + + TSF + read-write + + CutThrough + Transmission starts when the frame size in the Tx FIFO exceeds TTC threshold + 0 + + + StoreForward + Transmission starts when a full frame is in the Tx FIFO + 1 + + + + + DFRF + Disable flushing of received frames + 24 + 1 + + + RSF + Receive store and forward + 25 + 1 + + RSF + read-write + + CutThrough + Rx FIFO operates in cut-through mode, subject to RTC bits + 0 + + + StoreForward + Frames are read from Rx FIFO after complete frame has been written + 1 + + + + + DTCEFD + Dropping of TCP/IP checksum error frames disable + 26 + 1 + + DTCEFD + read-write + + Enabled + Drop frames with errors only in the receive checksum offload engine + 0 + + + Disabled + Do not drop frames that only have errors in the receive checksum offload engine + 1 + + + + + + + DMAIER + DMAIER + Ethernet DMA interrupt enable register + 0x1C + 0x20 + read-write + 0x00000000 + + + TIE + Transmit interrupt enable + 0 + 1 + + + TPSIE + Transmit process stopped interrupt enable + 1 + 1 + + + TBUIE + Transmit buffer unavailable interrupt enable + 2 + 1 + + + TJTIE + Transmit jabber timeout interrupt enable + 3 + 1 + + + ROIE + Receive overflow interrupt enable + 4 + 1 + + + TUIE + Transmit underflow interrupt enable + 5 + 1 + + + RIE + Receive interrupt enable + 6 + 1 + + + RBUIE + Receive buffer unavailable interrupt enable + 7 + 1 + + + RPSIE + Receive process stopped interrupt enable + 8 + 1 + + + RWTIE + Receive watchdog timeout interrupt enable + 9 + 1 + + + ETIE + Early transmit interrupt enable + 10 + 1 + + + FBEIE + Fatal bus error interrupt enable + 13 + 1 + + + ERIE + Early receive interrupt enable + 14 + 1 + + + AISE + Abnormal interrupt summary enable + 15 + 1 + + + NISE + Normal interrupt summary enable + 16 + 1 + + + + + DMAMFBOCR + DMAMFBOCR + Ethernet DMA missed frame and buffer overflow counter register + 0x20 + 0x20 + read-write + 0x00000000 + + + MFC + Missed frames by the controller + 0 + 16 + + + OMFC + Overflow bit for missed frame counter + 16 + 1 + + + MFA + Missed frames by the application + 17 + 11 + + + OFOC + Overflow bit for FIFO overflow counter + 28 + 1 + + + + + DMARSWTR + DMARSWTR + Ethernet DMA receive status watchdog timer register + 0x24 + 0x20 + read-write + 0x00000000 + + + RSWTC + Receive status watchdog timer count + 0 + 8 + + + 0 + 255 + + + + + + + DMACHTDR + DMACHTDR + Ethernet DMA current host transmit descriptor register + 0x48 + 0x20 + read-only + 0x00000000 + + + HTDAP + Host transmit descriptor address pointer + 0 + 32 + + + + + DMACHRDR + DMACHRDR + Ethernet DMA current host receive descriptor register + 0x4C + 0x20 + read-only + 0x00000000 + + + HRDAP + Host receive descriptor address pointer + 0 + 32 + + + + + DMACHTBAR + DMACHTBAR + Ethernet DMA current host transmit buffer address register + 0x50 + 0x20 + read-only + 0x00000000 + + + HTBAP + Host transmit buffer address pointer + 0 + 32 + + + + + DMACHRBAR + DMACHRBAR + Ethernet DMA current host receive buffer address register + 0x54 + 0x20 + read-only + 0x00000000 + + + HRBAP + Host receive buffer address pointer + 0 + 32 + + + + + + + CRC + Cryptographic processor + CRC + 0x40023000 + + 0x0 + 0x400 + registers + + + HDMI_CEC + HDMI-CEC global interrupt + 94 + + + + DR + DR + Data register + 0x0 + 0x20 + read-write + 0xFFFFFFFF + + + DR + Data Register + 0 + 32 + + + 0 + 4294967295 + + + + + + + IDR + IDR + Independent Data register + 0x4 + 0x20 + read-write + 0x00000000 + + + IDR + Independent Data register + 0 + 8 + + + 0 + 255 + + + + + + + CR + CR + Control register + 0x8 + 0x20 + write-only + 0x00000000 + + + RESET + RESET bit + 0 + 1 + + RESETW + write + + Reset + Resets the CRC calculation unit and sets the data register to 0xFFFF FFFF + 1 + + + + + REV_OUT + Reverse output data + 7 + 1 + read-write + + REV_OUT + read-write + + Normal + Bit order not affected + 0 + + + Reversed + Bit reversed output + 1 + + + + + REV_IN + Reverse input data + 5 + 2 + read-write + + REV_IN + read-write + + Normal + Bit order not affected + 0 + + + Byte + Bit reversal done by byte + 1 + + + HalfWord + Bit reversal done by half-word + 2 + + + Word + Bit reversal done by word + 3 + + + + + POLYSIZE + Polynomial size + 3 + 2 + read-write + + POLYSIZE + read-write + + Polysize32 + 32-bit polynomial + 0 + + + Polysize16 + 16-bit polynomial + 1 + + + Polysize8 + 8-bit polynomial + 2 + + + Polysize7 + 7-bit polynomial + 3 + + + + + + + INIT + INIT + Initial CRC value + 0x10 + 0x20 + read-write + 0x00000000 + + + INIT + Programmable initial CRC value + 0 + 32 + + + 0 + 4294967295 + + + + + + + POL + POL + CRC polynomial + 0x14 + 0x20 + read-write + 0x00000000 + + + POL + Programmable polynomial + 0 + 32 + + + 0 + 4294967295 + + + + + + + DR8 + Data register - byte sized + DR + 0x0 + 0x8 + read-write + 0x000000FF + + + DR8 + Data register bits + 0 + 8 + + + 0 + 255 + + + + + + + DR16 + Data register - half-word sized + DR + 0x0 + 0x10 + read-write + 0x0000FFFF + + + DR16 + Data register bits + 0 + 16 + + + 0 + 65535 + + + + + + + + + CAN1 + Controller area network + CAN + 0x40006400 + + 0x0 + 0x400 + registers + + + CAN1_TX + CAN1 TX interrupts + 19 + + + CAN1_RX0 + CAN1 RX0 interrupts + 20 + + + CAN1_RX1 + CAN1 RX1 interrupts + 21 + + + CAN1_SCE + CAN1 SCE interrupt + 22 + + + + MCR + MCR + master control register + 0x0 + 0x20 + read-write + 0x00010002 + + + DBF + DBF + 16 + 1 + + + RESET + RESET + 15 + 1 + + + TTCM + TTCM + 7 + 1 + + + ABOM + ABOM + 6 + 1 + + + AWUM + AWUM + 5 + 1 + + + NART + NART + 4 + 1 + + + RFLM + RFLM + 3 + 1 + + + TXFP + TXFP + 2 + 1 + + + SLEEP + SLEEP + 1 + 1 + + + INRQ + INRQ + 0 + 1 + + + + + MSR + MSR + master status register + 0x4 + 0x20 + 0x00000C02 + + + RX + RX + 11 + 1 + read-only + + + SAMP + SAMP + 10 + 1 + read-only + + + RXM + RXM + 9 + 1 + read-only + + + TXM + TXM + 8 + 1 + read-only + + + SLAKI + SLAKI + 4 + 1 + read-write + + + WKUI + WKUI + 3 + 1 + read-write + + + ERRI + ERRI + 2 + 1 + read-write + + + SLAK + SLAK + 1 + 1 + read-only + + + INAK + INAK + 0 + 1 + read-only + + + + + TSR + TSR + transmit status register + 0x8 + 0x20 + 0x1C000000 + + + LOW2 + Lowest priority flag for mailbox 2 + 31 + 1 + read-only + + + LOW1 + Lowest priority flag for mailbox 1 + 30 + 1 + read-only + + + LOW0 + Lowest priority flag for mailbox 0 + 29 + 1 + read-only + + + TME2 + Lowest priority flag for mailbox 2 + 28 + 1 + read-only + + + TME1 + Lowest priority flag for mailbox 1 + 27 + 1 + read-only + + + TME0 + Lowest priority flag for mailbox 0 + 26 + 1 + read-only + + + CODE + CODE + 24 + 2 + read-only + + + ABRQ2 + ABRQ2 + 23 + 1 + read-write + + + TERR2 + TERR2 + 19 + 1 + read-write + + + ALST2 + ALST2 + 18 + 1 + read-write + + + TXOK2 + TXOK2 + 17 + 1 + read-write + + + RQCP2 + RQCP2 + 16 + 1 + read-write + + + ABRQ1 + ABRQ1 + 15 + 1 + read-write + + + TERR1 + TERR1 + 11 + 1 + read-write + + + ALST1 + ALST1 + 10 + 1 + read-write + + + TXOK1 + TXOK1 + 9 + 1 + read-write + + + RQCP1 + RQCP1 + 8 + 1 + read-write + + + ABRQ0 + ABRQ0 + 7 + 1 + read-write + + + TERR0 + TERR0 + 3 + 1 + read-write + + + ALST0 + ALST0 + 2 + 1 + read-write + + + TXOK0 + TXOK0 + 1 + 1 + read-write + + + RQCP0 + RQCP0 + 0 + 1 + read-write + + + + + 2 + 0x4 + 0-1 + RF%sR + RF0R + receive FIFO %s register + 0xC + 0x20 + 0x00000000 + + + RFOM + RFOM0 + 5 + 1 + read-write + + RFOM0W + write + + Release + Set by software to release the output mailbox of the FIFO + 1 + + + + + FOVR + FOVR0 + 4 + 1 + read-write + + FOVR0R + read + + NoOverrun + No FIFO x overrun + 0 + + + Overrun + FIFO x overrun + 1 + + + + FOVR0W + write + + Clear + Clear flag + 1 + + + + + FULL + FULL0 + 3 + 1 + read-write + + FULL0R + read + + NotFull + FIFO x is not full + 0 + + + Full + FIFO x is full + 1 + + + + FULL0W + write + + Clear + Clear flag + 1 + + + + + FMP + FMP0 + 0 + 2 + read-only + + + + + IER + IER + interrupt enable register + 0x14 + 0x20 + read-write + 0x00000000 + + + SLKIE + SLKIE + 17 + 1 + + SLKIE + read-write + + Disabled + No interrupt when SLAKI bit is set + 0 + + + Enabled + Interrupt generated when SLAKI bit is set + 1 + + + + + WKUIE + WKUIE + 16 + 1 + + WKUIE + read-write + + Disabled + No interrupt when WKUI is set + 0 + + + Enabled + Interrupt generated when WKUI bit is set + 1 + + + + + ERRIE + ERRIE + 15 + 1 + + ERRIE + read-write + + Disabled + No interrupt will be generated when an error condition is pending in the CAN_ESR + 0 + + + Enabled + An interrupt will be generation when an error condition is pending in the CAN_ESR + 1 + + + + + LECIE + LECIE + 11 + 1 + + LECIE + read-write + + Disabled + ERRI bit will not be set when the error code in LEC[2:0] is set by hardware on error detection + 0 + + + Enabled + ERRI bit will be set when the error code in LEC[2:0] is set by hardware on error detection + 1 + + + + + BOFIE + BOFIE + 10 + 1 + + BOFIE + read-write + + Disabled + ERRI bit will not be set when BOFF is set + 0 + + + Enabled + ERRI bit will be set when BOFF is set + 1 + + + + + EPVIE + EPVIE + 9 + 1 + + EPVIE + read-write + + Disabled + ERRI bit will not be set when EPVF is set + 0 + + + Enabled + ERRI bit will be set when EPVF is set + 1 + + + + + EWGIE + EWGIE + 8 + 1 + + EWGIE + read-write + + Disabled + ERRI bit will not be set when EWGF is set + 0 + + + Enabled + ERRI bit will be set when EWGF is set + 1 + + + + + FOVIE1 + FOVIE1 + 6 + 1 + + FOVIE1 + read-write + + Disabled + No interrupt when FOVR is set + 0 + + + Enabled + Interrupt generation when FOVR is set + 1 + + + + + FFIE1 + FFIE1 + 5 + 1 + + FFIE1 + read-write + + Disabled + No interrupt when FULL bit is set + 0 + + + Enabled + Interrupt generated when FULL bit is set + 1 + + + + + FMPIE1 + FMPIE1 + 4 + 1 + + FMPIE1 + read-write + + Disabled + No interrupt generated when state of FMP[1:0] bits are not 00b + 0 + + + Enabled + Interrupt generated when state of FMP[1:0] bits are not 00b + 1 + + + + + FOVIE0 + FOVIE0 + 3 + 1 + + FOVIE0 + read-write + + Disabled + No interrupt when FOVR bit is set + 0 + + + Enabled + Interrupt generated when FOVR bit is set + 1 + + + + + FFIE0 + FFIE0 + 2 + 1 + + FFIE0 + read-write + + Disabled + No interrupt when FULL bit is set + 0 + + + Enabled + Interrupt generated when FULL bit is set + 1 + + + + + FMPIE0 + FMPIE0 + 1 + 1 + + FMPIE0 + read-write + + Disabled + No interrupt generated when state of FMP[1:0] bits are not 00 + 0 + + + Enabled + Interrupt generated when state of FMP[1:0] bits are not 00b + 1 + + + + + TMEIE + TMEIE + 0 + 1 + + TMEIE + read-write + + Disabled + No interrupt when RQCPx bit is set + 0 + + + Enabled + Interrupt generated when RQCPx bit is set + 1 + + + + + + + ESR + ESR + interrupt enable register + 0x18 + 0x20 + 0x00000000 + + + REC + REC + 24 + 8 + read-only + + + TEC + TEC + 16 + 8 + read-only + + + LEC + LEC + 4 + 3 + read-write + + LEC + read-write + + NoError + No Error + 0 + + + Stuff + Stuff Error + 1 + + + Form + Form Error + 2 + + + Ack + Acknowledgment Error + 3 + + + BitRecessive + Bit recessive Error + 4 + + + BitDominant + Bit dominant Error + 5 + + + Crc + CRC Error + 6 + + + Custom + Set by software + 7 + + + + + BOFF + BOFF + 2 + 1 + read-only + + + EPVF + EPVF + 1 + 1 + read-only + + + EWGF + EWGF + 0 + 1 + read-only + + + + + BTR + BTR + bit timing register + 0x1C + 0x20 + read-write + 0x00000000 + + + SILM + SILM + 31 + 1 + + SILM + read-write + + Normal + Normal operation + 0 + + + Silent + Silent Mode + 1 + + + + + LBKM + LBKM + 30 + 1 + + LBKM + read-write + + Disabled + Loop Back Mode disabled + 0 + + + Enabled + Loop Back Mode enabled + 1 + + + + + SJW + SJW + 24 + 2 + + + TS2 + TS2 + 20 + 3 + + + TS1 + TS1 + 16 + 4 + + + BRP + BRP + 0 + 10 + + + + + 3 + 0x10 + 0-2 + TX%s + CAN Transmit cluster + 0x180 + + TIR + TI0R + TX mailbox identifier register + 0x0 + 0x20 + read-write + 0x00000000 + + + STID + STID + 21 + 11 + + + EXID + EXID + 3 + 18 + + + IDE + IDE + 2 + 1 + + IDE + read-write + + Standard + Standard identifier + 0 + + + Extended + Extended identifier + 1 + + + + + RTR + RTR + 1 + 1 + + RTR + read-write + + Data + Data frame + 0 + + + Remote + Remote frame + 1 + + + + + TXRQ + TXRQ + 0 + 1 + + + + + TDTR + TDT0R + mailbox data length control and time stamp register + 0x4 + 0x20 + read-write + 0x00000000 + + + TIME + TIME + 16 + 16 + + + TGT + TGT + 8 + 1 + + + DLC + DLC + 0 + 4 + + + 0 + 8 + + + + + + + TDLR + TDL0R + mailbox data low register + 0x8 + 0x20 + read-write + 0x00000000 + + + DATA3 + DATA3 + 24 + 8 + + + DATA2 + DATA2 + 16 + 8 + + + DATA1 + DATA1 + 8 + 8 + + + DATA0 + DATA0 + 0 + 8 + + + + + TDHR + TDH0R + mailbox data high register + 0xC + 0x20 + read-write + 0x00000000 + + + DATA7 + DATA7 + 24 + 8 + + + DATA6 + DATA6 + 16 + 8 + + + DATA5 + DATA5 + 8 + 8 + + + DATA4 + DATA4 + 0 + 8 + + + + + + 2 + 0x10 + 0-1 + RX%s + CAN Receive cluster + 0x1B0 + + RIR + RI0R + receive FIFO mailbox identifier register + 0x0 + 0x20 + read-only + 0x00000000 + + + STID + STID + 21 + 11 + + + EXID + EXID + 3 + 18 + + + IDE + IDE + 2 + 1 + + IDE + read + + Standard + Standard identifier + 0 + + + Extended + Extended identifier + 1 + + + + + RTR + RTR + 1 + 1 + + RTR + read + + Data + Data frame + 0 + + + Remote + Remote frame + 1 + + + + + + + RDTR + RDT0R + mailbox data high register + 0x4 + 0x20 + read-only + 0x00000000 + + + TIME + TIME + 16 + 16 + + + FMI + FMI + 8 + 8 + + + DLC + DLC + 0 + 4 + + + 0 + 8 + + + + + + + RDLR + RDL0R + mailbox data high register + 0x8 + 0x20 + read-only + 0x00000000 + + + DATA3 + DATA3 + 24 + 8 + + + DATA2 + DATA2 + 16 + 8 + + + DATA1 + DATA1 + 8 + 8 + + + DATA0 + DATA0 + 0 + 8 + + + + + RDHR + RDH0R + receive FIFO mailbox data high register + 0xC + 0x20 + read-only + 0x00000000 + + + DATA7 + DATA7 + 24 + 8 + + + DATA6 + DATA6 + 16 + 8 + + + DATA5 + DATA5 + 8 + 8 + + + DATA4 + DATA4 + 0 + 8 + + + + + + FMR + FMR + filter master register + 0x200 + 0x20 + read-write + 0x2A1C0E01 + + + CAN2SB + CAN2SB + 8 + 6 + + + FINIT + FINIT + 0 + 1 + + + + + FM1R + FM1R + filter mode register + 0x204 + 0x20 + read-write + 0x00000000 + + + FBM0 + Filter mode + 0 + 1 + + + FBM1 + Filter mode + 1 + 1 + + + FBM2 + Filter mode + 2 + 1 + + + FBM3 + Filter mode + 3 + 1 + + + FBM4 + Filter mode + 4 + 1 + + + FBM5 + Filter mode + 5 + 1 + + + FBM6 + Filter mode + 6 + 1 + + + FBM7 + Filter mode + 7 + 1 + + + FBM8 + Filter mode + 8 + 1 + + + FBM9 + Filter mode + 9 + 1 + + + FBM10 + Filter mode + 10 + 1 + + + FBM11 + Filter mode + 11 + 1 + + + FBM12 + Filter mode + 12 + 1 + + + FBM13 + Filter mode + 13 + 1 + + + FBM14 + Filter mode + 14 + 1 + + + FBM15 + Filter mode + 15 + 1 + + + FBM16 + Filter mode + 16 + 1 + + + FBM17 + Filter mode + 17 + 1 + + + FBM18 + Filter mode + 18 + 1 + + + FBM19 + Filter mode + 19 + 1 + + + FBM20 + Filter mode + 20 + 1 + + + FBM21 + Filter mode + 21 + 1 + + + FBM22 + Filter mode + 22 + 1 + + + FBM23 + Filter mode + 23 + 1 + + + FBM24 + Filter mode + 24 + 1 + + + FBM25 + Filter mode + 25 + 1 + + + FBM26 + Filter mode + 26 + 1 + + + FBM27 + Filter mode + 27 + 1 + + + + + FS1R + FS1R + filter scale register + 0x20C + 0x20 + read-write + 0x00000000 + + + FSC0 + Filter scale configuration + 0 + 1 + + + FSC1 + Filter scale configuration + 1 + 1 + + + FSC2 + Filter scale configuration + 2 + 1 + + + FSC3 + Filter scale configuration + 3 + 1 + + + FSC4 + Filter scale configuration + 4 + 1 + + + FSC5 + Filter scale configuration + 5 + 1 + + + FSC6 + Filter scale configuration + 6 + 1 + + + FSC7 + Filter scale configuration + 7 + 1 + + + FSC8 + Filter scale configuration + 8 + 1 + + + FSC9 + Filter scale configuration + 9 + 1 + + + FSC10 + Filter scale configuration + 10 + 1 + + + FSC11 + Filter scale configuration + 11 + 1 + + + FSC12 + Filter scale configuration + 12 + 1 + + + FSC13 + Filter scale configuration + 13 + 1 + + + FSC14 + Filter scale configuration + 14 + 1 + + + FSC15 + Filter scale configuration + 15 + 1 + + + FSC16 + Filter scale configuration + 16 + 1 + + + FSC17 + Filter scale configuration + 17 + 1 + + + FSC18 + Filter scale configuration + 18 + 1 + + + FSC19 + Filter scale configuration + 19 + 1 + + + FSC20 + Filter scale configuration + 20 + 1 + + + FSC21 + Filter scale configuration + 21 + 1 + + + FSC22 + Filter scale configuration + 22 + 1 + + + FSC23 + Filter scale configuration + 23 + 1 + + + FSC24 + Filter scale configuration + 24 + 1 + + + FSC25 + Filter scale configuration + 25 + 1 + + + FSC26 + Filter scale configuration + 26 + 1 + + + FSC27 + Filter scale configuration + 27 + 1 + + + + + FFA1R + FFA1R + filter FIFO assignment register + 0x214 + 0x20 + read-write + 0x00000000 + + + FFA0 + Filter FIFO assignment for filter 0 + 0 + 1 + + + FFA1 + Filter FIFO assignment for filter 1 + 1 + 1 + + + FFA2 + Filter FIFO assignment for filter 2 + 2 + 1 + + + FFA3 + Filter FIFO assignment for filter 3 + 3 + 1 + + + FFA4 + Filter FIFO assignment for filter 4 + 4 + 1 + + + FFA5 + Filter FIFO assignment for filter 5 + 5 + 1 + + + FFA6 + Filter FIFO assignment for filter 6 + 6 + 1 + + + FFA7 + Filter FIFO assignment for filter 7 + 7 + 1 + + + FFA8 + Filter FIFO assignment for filter 8 + 8 + 1 + + + FFA9 + Filter FIFO assignment for filter 9 + 9 + 1 + + + FFA10 + Filter FIFO assignment for filter 10 + 10 + 1 + + + FFA11 + Filter FIFO assignment for filter 11 + 11 + 1 + + + FFA12 + Filter FIFO assignment for filter 12 + 12 + 1 + + + FFA13 + Filter FIFO assignment for filter 13 + 13 + 1 + + + FFA14 + Filter FIFO assignment for filter 14 + 14 + 1 + + + FFA15 + Filter FIFO assignment for filter 15 + 15 + 1 + + + FFA16 + Filter FIFO assignment for filter 16 + 16 + 1 + + + FFA17 + Filter FIFO assignment for filter 17 + 17 + 1 + + + FFA18 + Filter FIFO assignment for filter 18 + 18 + 1 + + + FFA19 + Filter FIFO assignment for filter 19 + 19 + 1 + + + FFA20 + Filter FIFO assignment for filter 20 + 20 + 1 + + + FFA21 + Filter FIFO assignment for filter 21 + 21 + 1 + + + FFA22 + Filter FIFO assignment for filter 22 + 22 + 1 + + + FFA23 + Filter FIFO assignment for filter 23 + 23 + 1 + + + FFA24 + Filter FIFO assignment for filter 24 + 24 + 1 + + + FFA25 + Filter FIFO assignment for filter 25 + 25 + 1 + + + FFA26 + Filter FIFO assignment for filter 26 + 26 + 1 + + + FFA27 + Filter FIFO assignment for filter 27 + 27 + 1 + + + + + FA1R + FA1R + filter activation register + 0x21C + 0x20 + read-write + 0x00000000 + + + FACT0 + Filter active + 0 + 1 + + + FACT1 + Filter active + 1 + 1 + + + FACT2 + Filter active + 2 + 1 + + + FACT3 + Filter active + 3 + 1 + + + FACT4 + Filter active + 4 + 1 + + + FACT5 + Filter active + 5 + 1 + + + FACT6 + Filter active + 6 + 1 + + + FACT7 + Filter active + 7 + 1 + + + FACT8 + Filter active + 8 + 1 + + + FACT9 + Filter active + 9 + 1 + + + FACT10 + Filter active + 10 + 1 + + + FACT11 + Filter active + 11 + 1 + + + FACT12 + Filter active + 12 + 1 + + + FACT13 + Filter active + 13 + 1 + + + FACT14 + Filter active + 14 + 1 + + + FACT15 + Filter active + 15 + 1 + + + FACT16 + Filter active + 16 + 1 + + + FACT17 + Filter active + 17 + 1 + + + FACT18 + Filter active + 18 + 1 + + + FACT19 + Filter active + 19 + 1 + + + FACT20 + Filter active + 20 + 1 + + + FACT21 + Filter active + 21 + 1 + + + FACT22 + Filter active + 22 + 1 + + + FACT23 + Filter active + 23 + 1 + + + FACT24 + Filter active + 24 + 1 + + + FACT25 + Filter active + 25 + 1 + + + FACT26 + Filter active + 26 + 1 + + + FACT27 + Filter active + 27 + 1 + + + + + 28 + 0x8 + 0-27 + FB%s + CAN Filter Bank cluster + 0x240 + + FR1 + F0R1 + Filter bank 0 register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + FB + Filter bits + 0 + 32 + + + + + FR2 + F0R2 + Filter bank 0 register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + FB + Filter bits + 0 + 32 + + + + + + + + CAN2 + 0x40006800 + + CAN2_TX + CAN2 TX interrupts + 63 + + + CAN2_RX0 + CAN2 RX0 interrupts + 64 + + + CAN2_RX1 + CAN2 RX1 interrupts + 65 + + + CAN2_SCE + CAN2 SCE interrupt + 66 + + + + FLASH + FLASH + FLASH + 0x40023C00 + + 0x0 + 0x400 + registers + + + FLASH + Flash global interrupt + 4 + + + + ACR + ACR + Flash access control register + 0x0 + 0x20 + read-write + 0x00000000 + + + LATENCY + Latency + 0 + 4 + + LATENCY + read-write + + WS0 + 0 wait states + 0 + + + WS1 + 1 wait states + 1 + + + WS2 + 2 wait states + 2 + + + WS3 + 3 wait states + 3 + + + WS4 + 4 wait states + 4 + + + WS5 + 5 wait states + 5 + + + WS6 + 6 wait states + 6 + + + WS7 + 7 wait states + 7 + + + WS8 + 8 wait states + 8 + + + WS9 + 9 wait states + 9 + + + WS10 + 10 wait states + 10 + + + WS11 + 11 wait states + 11 + + + WS12 + 12 wait states + 12 + + + WS13 + 13 wait states + 13 + + + WS14 + 14 wait states + 14 + + + WS15 + 15 wait states + 15 + + + + + PRFTEN + Prefetch enable + 8 + 1 + + PRFTEN + read-write + + Disabled + Prefetch is disabled + 0 + + + Enabled + Prefetch is enabled + 1 + + + + + ARTEN + ART Accelerator Enable + 9 + 1 + + ARTEN + read-write + + Disabled + ART Accelerator is disabled + 0 + + + Enabled + ART Accelerator is enabled + 1 + + + + + ARTRST + ART Accelerator reset + 11 + 1 + + ARTRST + read-write + + NotReset + Accelerator is not reset + 0 + + + Reset + Accelerator is reset + 1 + + + + + + + KEYR + KEYR + Flash key register + 0x4 + 0x20 + write-only + 0x00000000 + + + KEY + FPEC key + 0 + 32 + + + 0 + 4294967295 + + + + + + + OPTKEYR + OPTKEYR + Flash option key register + 0x8 + 0x20 + write-only + 0x00000000 + + + OPTKEYR + Option byte key + 0 + 32 + + + 0 + 4294967295 + + + + + + + SR + SR + Status register + 0xC + 0x20 + 0x00000000 + + + EOP + End of operation + 0 + 1 + read-write + oneToClear + + EOPW + write + + Clear + Clear error flag + 1 + + + + + OPERR + Operation error + 1 + 1 + read-write + oneToClear + + OPERRW + write + + Clear + Clear error flag + 1 + + + + + WRPERR + Write protection error + 4 + 1 + read-write + oneToClear + + WRPERRW + write + + Clear + Clear error flag + 1 + + + + + PGAERR + Programming alignment error + 5 + 1 + read-write + oneToClear + + PGAERRW + write + + Clear + Clear error flag + 1 + + + + + PGPERR + Programming parallelism error + 6 + 1 + read-write + oneToClear + + PGPERRW + write + + Clear + Clear error flag + 1 + + + + + ERSERR + Programming sequence error + 7 + 1 + read-write + oneToClear + + ERSERRW + write + + Clear + Clear error flag + 1 + + + + + BSY + Busy + 16 + 1 + read-only + + BSYR + read + + NotBusy + no Flash memory operation ongoing + 0 + + + Busy + Flash memory operation ongoing + 1 + + + + + + + CR + CR + Control register + 0x10 + 0x20 + read-write + 0x80000000 + + + PG + Programming + 0 + 1 + + PG + read-write + + Program + Flash programming activated + 1 + + + + + SER + Sector Erase + 1 + 1 + + SER + read-write + + SectorErase + Erase activated for selected sector + 1 + + + + + MER + Mass Erase of sectors 0 to 11 + 2 + 1 + + MER + read-write + + MassErase + Erase activated for all user sectors + 1 + + + + + SNB + Sector number + 3 + 4 + + + 0 + 11 + + + + + PSIZE + Program size + 8 + 2 + + PSIZE + read-write + + PSIZE8 + Program x8 + 0 + + + PSIZE16 + Program x16 + 1 + + + PSIZE32 + Program x32 + 2 + + + PSIZE64 + Program x64 + 3 + + + + + STRT + Start + 16 + 1 + + STRT + read-write + + Start + Trigger an erase operation + 1 + + + + + EOPIE + End of operation interrupt enable + 24 + 1 + + EOPIE + read-write + + Disabled + End of operation interrupt disabled + 0 + + + Enabled + End of operation interrupt enabled + 1 + + + + + ERRIE + Error interrupt enable + 25 + 1 + + ERRIE + read-write + + Disabled + Error interrupt generation disabled + 0 + + + Enabled + Error interrupt generation enabled + 1 + + + + + LOCK + Lock + 31 + 1 + + LOCK + read-write + + Unlocked + FLASH_CR register is unlocked + 0 + + + Locked + FLASH_CR register is locked + 1 + + + + + + + OPTCR + OPTCR + Flash option control register + 0x14 + 0x20 + read-write + 0x0FFFAAED + + + OPTLOCK + Option lock + 0 + 1 + + + OPTSTRT + Option start + 1 + 1 + + + BOR_LEV + BOR reset Level + 2 + 2 + + + WWDG_SW + User option bytes + 4 + 1 + + + IWDG_SW + User option bytes + 5 + 1 + + + nRST_STOP + User option bytes + 6 + 1 + + + nRST_STDBY + User option bytes + 7 + 1 + + + RDP + Read protect + 8 + 8 + + + nWRP + Not write protect + 16 + 8 + + + IWDG_STDBY + Independent watchdog counter freeze in standby mode + 30 + 1 + + + IWDG_STOP + Independent watchdog counter freeze in Stop mode + 31 + 1 + + + + + OPTCR1 + OPTCR1 + Flash option control register 1 + 0x18 + 0x20 + read-write + 0x0FFF0000 + + + BOOT_ADD0 + Boot base address when Boot pin =0 + 0 + 16 + + + BOOT_ADD1 + Boot base address when Boot pin =1 + 16 + 16 + + + + + + + EXTI + External interrupt/event controller + EXTI + 0x40013C00 + + 0x0 + 0x400 + registers + + + PVD + PVD through EXTI line detection INTERRUPT + 1 + + + TAMP_STAMP + Tamper and TimeStamp interrupts through the + EXTI line + 2 + + + EXTI0 + EXTI Line0 interrupt + 6 + + + EXTI1 + EXTI Line1 interrupt + 7 + + + EXTI2 + EXTI Line2 interrupt + 8 + + + EXTI3 + EXTI Line3 interrupt + 9 + + + EXTI4 + EXTI Line4 interrupt + 10 + + + EXTI9_5 + EXTI Line[9:5] interrupts + 23 + + + EXTI15_10 + EXTI Line[15:10] interrupts + 40 + + + + IMR + IMR + Interrupt mask register (EXTI_IMR) + 0x0 + 0x20 + read-write + 0x00000000 + + + MR0 + Interrupt Mask on line 0 + 0 + 1 + + MR0 + read-write + + Masked + Interrupt request line is masked + 0 + + + Unmasked + Interrupt request line is unmasked + 1 + + + + + MR1 + Interrupt Mask on line 1 + 1 + 1 + + + + MR2 + Interrupt Mask on line 2 + 2 + 1 + + + + MR3 + Interrupt Mask on line 3 + 3 + 1 + + + + MR4 + Interrupt Mask on line 4 + 4 + 1 + + + + MR5 + Interrupt Mask on line 5 + 5 + 1 + + + + MR6 + Interrupt Mask on line 6 + 6 + 1 + + + + MR7 + Interrupt Mask on line 7 + 7 + 1 + + + + MR8 + Interrupt Mask on line 8 + 8 + 1 + + + + MR9 + Interrupt Mask on line 9 + 9 + 1 + + + + MR10 + Interrupt Mask on line 10 + 10 + 1 + + + + MR11 + Interrupt Mask on line 11 + 11 + 1 + + + + MR12 + Interrupt Mask on line 12 + 12 + 1 + + + + MR13 + Interrupt Mask on line 13 + 13 + 1 + + + + MR14 + Interrupt Mask on line 14 + 14 + 1 + + + + MR15 + Interrupt Mask on line 15 + 15 + 1 + + + + MR16 + Interrupt Mask on line 16 + 16 + 1 + + + + MR17 + Interrupt Mask on line 17 + 17 + 1 + + + + MR18 + Interrupt Mask on line 18 + 18 + 1 + + + + MR19 + Interrupt Mask on line 19 + 19 + 1 + + + + MR20 + Interrupt Mask on line 20 + 20 + 1 + + + + MR21 + Interrupt Mask on line 21 + 21 + 1 + + + + MR22 + Interrupt Mask on line 22 + 22 + 1 + + + + + + EMR + EMR + Event mask register (EXTI_EMR) + 0x4 + 0x20 + read-write + 0x00000000 + + + MR0 + Event Mask on line 0 + 0 + 1 + + MR0 + read-write + + Masked + Interrupt request line is masked + 0 + + + Unmasked + Interrupt request line is unmasked + 1 + + + + + MR1 + Event Mask on line 1 + 1 + 1 + + + + MR2 + Event Mask on line 2 + 2 + 1 + + + + MR3 + Event Mask on line 3 + 3 + 1 + + + + MR4 + Event Mask on line 4 + 4 + 1 + + + + MR5 + Event Mask on line 5 + 5 + 1 + + + + MR6 + Event Mask on line 6 + 6 + 1 + + + + MR7 + Event Mask on line 7 + 7 + 1 + + + + MR8 + Event Mask on line 8 + 8 + 1 + + + + MR9 + Event Mask on line 9 + 9 + 1 + + + + MR10 + Event Mask on line 10 + 10 + 1 + + + + MR11 + Event Mask on line 11 + 11 + 1 + + + + MR12 + Event Mask on line 12 + 12 + 1 + + + + MR13 + Event Mask on line 13 + 13 + 1 + + + + MR14 + Event Mask on line 14 + 14 + 1 + + + + MR15 + Event Mask on line 15 + 15 + 1 + + + + MR16 + Event Mask on line 16 + 16 + 1 + + + + MR17 + Event Mask on line 17 + 17 + 1 + + + + MR18 + Event Mask on line 18 + 18 + 1 + + + + MR19 + Event Mask on line 19 + 19 + 1 + + + + MR20 + Event Mask on line 20 + 20 + 1 + + + + MR21 + Event Mask on line 21 + 21 + 1 + + + + MR22 + Event Mask on line 22 + 22 + 1 + + + + + + RTSR + RTSR + Rising Trigger selection register (EXTI_RTSR) + 0x8 + 0x20 + read-write + 0x00000000 + + + TR0 + Rising trigger event configuration of line 0 + 0 + 1 + + TR0 + read-write + + Disabled + Rising edge trigger is disabled + 0 + + + Enabled + Rising edge trigger is enabled + 1 + + + + + TR1 + Rising trigger event configuration of line 1 + 1 + 1 + + + + TR2 + Rising trigger event configuration of line 2 + 2 + 1 + + + + TR3 + Rising trigger event configuration of line 3 + 3 + 1 + + + + TR4 + Rising trigger event configuration of line 4 + 4 + 1 + + + + TR5 + Rising trigger event configuration of line 5 + 5 + 1 + + + + TR6 + Rising trigger event configuration of line 6 + 6 + 1 + + + + TR7 + Rising trigger event configuration of line 7 + 7 + 1 + + + + TR8 + Rising trigger event configuration of line 8 + 8 + 1 + + + + TR9 + Rising trigger event configuration of line 9 + 9 + 1 + + + + TR10 + Rising trigger event configuration of line 10 + 10 + 1 + + + + TR11 + Rising trigger event configuration of line 11 + 11 + 1 + + + + TR12 + Rising trigger event configuration of line 12 + 12 + 1 + + + + TR13 + Rising trigger event configuration of line 13 + 13 + 1 + + + + TR14 + Rising trigger event configuration of line 14 + 14 + 1 + + + + TR15 + Rising trigger event configuration of line 15 + 15 + 1 + + + + TR16 + Rising trigger event configuration of line 16 + 16 + 1 + + + + TR17 + Rising trigger event configuration of line 17 + 17 + 1 + + + + TR18 + Rising trigger event configuration of line 18 + 18 + 1 + + + + TR19 + Rising trigger event configuration of line 19 + 19 + 1 + + + + TR20 + Rising trigger event configuration of line 20 + 20 + 1 + + + + TR21 + Rising trigger event configuration of line 21 + 21 + 1 + + + + TR22 + Rising trigger event configuration of line 22 + 22 + 1 + + + + + + FTSR + FTSR + Falling Trigger selection register (EXTI_FTSR) + 0xC + 0x20 + read-write + 0x00000000 + + + TR0 + Falling trigger event configuration of line 0 + 0 + 1 + + TR0 + read-write + + Disabled + Falling edge trigger is disabled + 0 + + + Enabled + Falling edge trigger is enabled + 1 + + + + + TR1 + Falling trigger event configuration of line 1 + 1 + 1 + + + + TR2 + Falling trigger event configuration of line 2 + 2 + 1 + + + + TR3 + Falling trigger event configuration of line 3 + 3 + 1 + + + + TR4 + Falling trigger event configuration of line 4 + 4 + 1 + + + + TR5 + Falling trigger event configuration of line 5 + 5 + 1 + + + + TR6 + Falling trigger event configuration of line 6 + 6 + 1 + + + + TR7 + Falling trigger event configuration of line 7 + 7 + 1 + + + + TR8 + Falling trigger event configuration of line 8 + 8 + 1 + + + + TR9 + Falling trigger event configuration of line 9 + 9 + 1 + + + + TR10 + Falling trigger event configuration of line 10 + 10 + 1 + + + + TR11 + Falling trigger event configuration of line 11 + 11 + 1 + + + + TR12 + Falling trigger event configuration of line 12 + 12 + 1 + + + + TR13 + Falling trigger event configuration of line 13 + 13 + 1 + + + + TR14 + Falling trigger event configuration of line 14 + 14 + 1 + + + + TR15 + Falling trigger event configuration of line 15 + 15 + 1 + + + + TR16 + Falling trigger event configuration of line 16 + 16 + 1 + + + + TR17 + Falling trigger event configuration of line 17 + 17 + 1 + + + + TR18 + Falling trigger event configuration of line 18 + 18 + 1 + + + + TR19 + Falling trigger event configuration of line 19 + 19 + 1 + + + + TR20 + Falling trigger event configuration of line 20 + 20 + 1 + + + + TR21 + Falling trigger event configuration of line 21 + 21 + 1 + + + + TR22 + Falling trigger event configuration of line 22 + 22 + 1 + + + + + + SWIER + SWIER + Software interrupt event register (EXTI_SWIER) + 0x10 + 0x20 + read-write + 0x00000000 + + + SWIER0 + Software Interrupt on line 0 + 0 + 1 + + SWIER0W + write + + Pend + Generates an interrupt request + 1 + + + + + SWIER1 + Software Interrupt on line 1 + 1 + 1 + + + + SWIER2 + Software Interrupt on line 2 + 2 + 1 + + + + SWIER3 + Software Interrupt on line 3 + 3 + 1 + + + + SWIER4 + Software Interrupt on line 4 + 4 + 1 + + + + SWIER5 + Software Interrupt on line 5 + 5 + 1 + + + + SWIER6 + Software Interrupt on line 6 + 6 + 1 + + + + SWIER7 + Software Interrupt on line 7 + 7 + 1 + + + + SWIER8 + Software Interrupt on line 8 + 8 + 1 + + + + SWIER9 + Software Interrupt on line 9 + 9 + 1 + + + + SWIER10 + Software Interrupt on line 10 + 10 + 1 + + + + SWIER11 + Software Interrupt on line 11 + 11 + 1 + + + + SWIER12 + Software Interrupt on line 12 + 12 + 1 + + + + SWIER13 + Software Interrupt on line 13 + 13 + 1 + + + + SWIER14 + Software Interrupt on line 14 + 14 + 1 + + + + SWIER15 + Software Interrupt on line 15 + 15 + 1 + + + + SWIER16 + Software Interrupt on line 16 + 16 + 1 + + + + SWIER17 + Software Interrupt on line 17 + 17 + 1 + + + + SWIER18 + Software Interrupt on line 18 + 18 + 1 + + + + SWIER19 + Software Interrupt on line 19 + 19 + 1 + + + + SWIER20 + Software Interrupt on line 20 + 20 + 1 + + + + SWIER21 + Software Interrupt on line 21 + 21 + 1 + + + + SWIER22 + Software Interrupt on line 22 + 22 + 1 + + + + + + PR + PR + Pending register (EXTI_PR) + 0x14 + 0x20 + read-write + 0x00000000 + + + PR0 + Pending bit 0 + 0 + 1 + oneToClear + + PR0R + read + + NotPending + No trigger request occurred + 0 + + + Pending + Selected trigger request occurred + 1 + + + + PR0W + write + + Clear + Clears pending bit + 1 + + + + + PR1 + Pending bit 1 + 1 + 1 + oneToClear + + read + + + write + + + + PR2 + Pending bit 2 + 2 + 1 + oneToClear + + read + + + write + + + + PR3 + Pending bit 3 + 3 + 1 + oneToClear + + read + + + write + + + + PR4 + Pending bit 4 + 4 + 1 + oneToClear + + read + + + write + + + + PR5 + Pending bit 5 + 5 + 1 + oneToClear + + read + + + write + + + + PR6 + Pending bit 6 + 6 + 1 + oneToClear + + read + + + write + + + + PR7 + Pending bit 7 + 7 + 1 + oneToClear + + read + + + write + + + + PR8 + Pending bit 8 + 8 + 1 + oneToClear + + read + + + write + + + + PR9 + Pending bit 9 + 9 + 1 + oneToClear + + read + + + write + + + + PR10 + Pending bit 10 + 10 + 1 + oneToClear + + read + + + write + + + + PR11 + Pending bit 11 + 11 + 1 + oneToClear + + read + + + write + + + + PR12 + Pending bit 12 + 12 + 1 + oneToClear + + read + + + write + + + + PR13 + Pending bit 13 + 13 + 1 + oneToClear + + read + + + write + + + + PR14 + Pending bit 14 + 14 + 1 + oneToClear + + read + + + write + + + + PR15 + Pending bit 15 + 15 + 1 + oneToClear + + read + + + write + + + + PR16 + Pending bit 16 + 16 + 1 + oneToClear + + read + + + write + + + + PR17 + Pending bit 17 + 17 + 1 + oneToClear + + read + + + write + + + + PR18 + Pending bit 18 + 18 + 1 + oneToClear + + read + + + write + + + + PR19 + Pending bit 19 + 19 + 1 + oneToClear + + read + + + write + + + + PR20 + Pending bit 20 + 20 + 1 + oneToClear + + read + + + write + + + + PR21 + Pending bit 21 + 21 + 1 + oneToClear + + read + + + write + + + + PR22 + Pending bit 22 + 22 + 1 + oneToClear + + read + + + write + + + + + + + + LTDC + LCD-TFT Controller + LTDC + 0x40016800 + + 0x0 + 0x400 + registers + + + LTDC + LTDC global interrupt + 88 + + + LTDC_ER + LTDC global error interrupt + 89 + + + + SSCR + SSCR + Synchronization Size Configuration Register + 0x8 + 0x20 + read-write + 0x00000000 + + + HSW + Horizontal Synchronization Width (in units of pixel clock period) + 16 + 12 + + + 0 + 4095 + + + + + VSH + Vertical Synchronization Height (in units of horizontal scan line) + 0 + 11 + + + 0 + 2047 + + + + + + + BPCR + BPCR + Back Porch Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + AHBP + Accumulated Horizontal back porch (in units of pixel clock period) + 16 + 12 + + + 0 + 4095 + + + + + AVBP + Accumulated Vertical back porch (in units of horizontal scan line) + 0 + 11 + + + 0 + 2047 + + + + + + + AWCR + AWCR + Active Width Configuration Register + 0x10 + 0x20 + read-write + 0x00000000 + + + AAW + Accumulated Active Width (in units of pixel clock period) + 16 + 12 + + + 0 + 4095 + + + + + AAH + Accumulated Active Height (in units of horizontal scan line) + 0 + 11 + + + 0 + 2047 + + + + + + + TWCR + TWCR + Total Width Configuration Register + 0x14 + 0x20 + read-write + 0x00000000 + + + TOTALW + Total Width (in units of pixel clock period) + 16 + 12 + + + 0 + 4095 + + + + + TOTALH + Total Height (in units of horizontal scan line) + 0 + 11 + + + 0 + 2047 + + + + + + + GCR + GCR + Global Control Register + 0x18 + 0x20 + 0x00002220 + + + HSPOL + Horizontal Synchronization Polarity + 31 + 1 + read-write + + HSPOL + read-write + + ActiveLow + Horizontal synchronization polarity is active low + 0 + + + ActiveHigh + Horizontal synchronization polarity is active high + 1 + + + + + VSPOL + Vertical Synchronization Polarity + 30 + 1 + read-write + + VSPOL + read-write + + ActiveLow + Vertical synchronization polarity is active low + 0 + + + ActiveHigh + Vertical synchronization polarity is active high + 1 + + + + + DEPOL + Data Enable Polarity + 29 + 1 + read-write + + DEPOL + read-write + + ActiveLow + Data enable polarity is active low + 0 + + + ActiveHigh + Data enable polarity is active high + 1 + + + + + PCPOL + Pixel Clock Polarity + 28 + 1 + read-write + + PCPOL + read-write + + RisingEdge + Pixel clock on rising edge + 0 + + + FallingEdge + Pixel clock on falling edge + 1 + + + + + DEN + Dither Enable + 16 + 1 + read-write + + DEN + read-write + + Disabled + Dither disabled + 0 + + + Enabled + Dither enabled + 1 + + + + + DRW + Dither Red Width + 12 + 3 + read-only + + + DGW + Dither Green Width + 8 + 3 + read-only + + + DBW + Dither Blue Width + 4 + 3 + read-only + + + LTDCEN + LCD-TFT controller enable bit + 0 + 1 + read-write + + LTDCEN + read-write + + Disabled + LCD-TFT controller disabled + 0 + + + Enabled + LCD-TFT controller enabled + 1 + + + + + + + SRCR + SRCR + Shadow Reload Configuration Register + 0x24 + 0x20 + read-write + 0x00000000 + + + VBR + Vertical Blanking Reload + 1 + 1 + + VBR + read-write + + NoEffect + This bit is set by software and cleared only by hardware after reload (it cannot be cleared through register write once it is set) + 0 + + + Reload + The shadow registers are reloaded during the vertical blanking period (at the beginning of the first line after the active display area). + 1 + + + + + IMR + Immediate Reload + 0 + 1 + + IMR + read-write + + NoEffect + This bit is set by software and cleared only by hardware after reload (it cannot be cleared through register write once it is set) + 0 + + + Reload + The shadow registers are reloaded immediately. This bit is set by software and cleared only by hardware after reload + 1 + + + + + + + BCCR + BCCR + Background Color Configuration Register + 0x2C + 0x20 + read-write + 0x00000000 + + + BCBLUE + Background color blue value + 0 + 8 + + + 0 + 255 + + + + + BCGREEN + Background color green value + 8 + 8 + + + 0 + 255 + + + + + BCRED + Background color red value + 16 + 8 + + + 0 + 255 + + + + + + + IER + IER + Interrupt Enable Register + 0x34 + 0x20 + read-write + 0x00000000 + + + RRIE + Register Reload interrupt enable + 3 + 1 + + RRIE + read-write + + Disabled + Register reload interrupt disabled + 0 + + + Enabled + Register reload interrupt enabled + 1 + + + + + TERRIE + Transfer Error Interrupt Enable + 2 + 1 + + TERRIE + read-write + + Disabled + Transfer error interrupt disabled + 0 + + + Enabled + Transfer error interrupt enabled + 1 + + + + + FUIE + FIFO Underrun Interrupt Enable + 1 + 1 + + FUIE + read-write + + Disabled + FIFO underrun interrupt disabled + 0 + + + Enabled + FIFO underrun interrupt enabled + 1 + + + + + LIE + Line Interrupt Enable + 0 + 1 + + LIE + read-write + + Disabled + Line interrupt disabled + 0 + + + Enabled + Line interrupt enabled + 1 + + + + + + + ISR + ISR + Interrupt Status Register + 0x38 + 0x20 + read-only + 0x00000000 + + + RRIF + Register Reload Interrupt Flag + 3 + 1 + + RRIF + read + + NoReload + No register reload + 0 + + + Reload + Register reload interrupt generated when a vertical blanking reload occurs (and the first line after the active area is reached) + 1 + + + + + TERRIF + Transfer Error interrupt flag + 2 + 1 + + TERRIF + read + + NoError + No transfer error + 0 + + + Error + Transfer error interrupt generated when a bus error occurs + 1 + + + + + FUIF + FIFO Underrun Interrupt flag + 1 + 1 + + FUIF + read + + NoUnderrun + No FIFO underrun + 0 + + + Underrun + FIFO underrun interrupt generated, if one of the layer FIFOs is empty and pixel data is read from the FIFO + 1 + + + + + LIF + Line Interrupt flag + 0 + 1 + + LIF + read + + NotReached + Programmed line not reached + 0 + + + Reached + Line interrupt generated when a programmed line is reached + 1 + + + + + + + ICR + ICR + Interrupt Clear Register + 0x3C + 0x20 + write-only + 0x00000000 + + + CRRIF + Clears Register Reload Interrupt Flag + 3 + 1 + oneToClear + + CRRIFW + write + + Clear + Clears the RRIF flag in the ISR register + 1 + + + + + CTERRIF + Clears the Transfer Error Interrupt Flag + 2 + 1 + oneToClear + + CTERRIFW + write + + Clear + Clears the TERRIF flag in the ISR register + 1 + + + + + CFUIF + Clears the FIFO Underrun Interrupt flag + 1 + 1 + oneToClear + + CFUIFW + write + + Clear + Clears the FUIF flag in the ISR register + 1 + + + + + CLIF + Clears the Line Interrupt Flag + 0 + 1 + oneToClear + + CLIFW + write + + Clear + Clears the LIF flag in the ISR register + 1 + + + + + + + LIPCR + LIPCR + Line Interrupt Position Configuration Register + 0x40 + 0x20 + read-write + 0x00000000 + + + LIPOS + Line Interrupt Position + 0 + 11 + + + 0 + 2047 + + + + + + + CPSR + CPSR + Current Position Status Register + 0x44 + 0x20 + read-only + 0x00000000 + + + CXPOS + Current X Position + 16 + 16 + + + CYPOS + Current Y Position + 0 + 16 + + + + + CDSR + CDSR + Current Display Status Register + 0x48 + 0x20 + read-only + 0x0000000F + + + HSYNCS + Horizontal Synchronization display Status + 3 + 1 + + HSYNCS + read + + NotActive + Currently not in HSYNC phase + 0 + + + Active + Currently in HSYNC phase + 1 + + + + + VSYNCS + Vertical Synchronization display Status + 2 + 1 + + VSYNCS + read + + NotActive + Currently not in VSYNC phase + 0 + + + Active + Currently in VSYNC phase + 1 + + + + + HDES + Horizontal Data Enable display Status + 1 + 1 + + HDES + read + + NotActive + Currently not in horizontal Data Enable phase + 0 + + + Active + Currently in horizontal Data Enable phase + 1 + + + + + VDES + Vertical Data Enable display Status + 0 + 1 + + VDES + read + + NotActive + Currently not in vertical Data Enable phase + 0 + + + Active + Currently in vertical Data Enable phase + 1 + + + + + + + 2 + 0x80 + 1-2 + LAYER%s + Cluster LAYER%s, containing L?CR, L?WHPCR, L?WVPCR, L?CKCR, L?PFCR, L?CACR, L?DCCR, L?BFCR, L?CFBAR, L?CFBLR, L?CFBLNR, L?CLUTWR + 0x84 + + CR + L1CR + Layerx Control Register + 0x0 + 0x20 + read-write + 0x00000000 + + + CLUTEN + Color Look-Up Table Enable + 4 + 1 + + CLUTEN + read-write + + Disabled + Color look-up table disabled + 0 + + + Enabled + Color look-up table enabled + 1 + + + + + COLKEN + Color Keying Enable + 1 + 1 + + COLKEN + read-write + + Disabled + Color keying disabled + 0 + + + Enabled + Color keying enabled + 1 + + + + + LEN + Layer Enable + 0 + 1 + + LEN + read-write + + Disabled + Layer disabled + 0 + + + Enabled + Layer enabled + 1 + + + + + + + WHPCR + L1WHPCR + Layerx Window Horizontal Position Configuration Register + 0x4 + 0x20 + read-write + 0x00000000 + + + WHSPPOS + Window Horizontal Stop Position + 16 + 12 + + + 0 + 4095 + + + + + WHSTPOS + Window Horizontal Start Position + 0 + 12 + + + 0 + 4095 + + + + + + + WVPCR + L1WVPCR + Layerx Window Vertical Position Configuration Register + 0x8 + 0x20 + read-write + 0x00000000 + + + WVSPPOS + Window Vertical Stop Position + 16 + 11 + + + 0 + 2047 + + + + + WVSTPOS + Window Vertical Start Position + 0 + 11 + + + 0 + 2047 + + + + + + + CKCR + L1CKCR + Layerx Color Keying Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + CKRED + Color Key Red value + 16 + 8 + + + 0 + 255 + + + + + CKGREEN + Color Key Green value + 8 + 8 + + + 0 + 255 + + + + + CKBLUE + Color Key Blue value + 0 + 8 + + + 0 + 255 + + + + + + + PFCR + L1PFCR + Layerx Pixel Format Configuration Register + 0x10 + 0x20 + read-write + 0x00000000 + + + PF + Pixel Format + 0 + 3 + + PF + read-write + + ARGB8888 + ARGB8888 + 0 + + + RGB888 + RGB888 + 1 + + + RGB565 + RGB565 + 2 + + + ARGB1555 + ARGB1555 + 3 + + + ARGB4444 + ARGB4444 + 4 + + + L8 + L8 (8-bit luminance) + 5 + + + AL44 + AL44 (4-bit alpha, 4-bit luminance) + 6 + + + AL88 + AL88 (8-bit alpha, 8-bit luminance) + 7 + + + + + + + CACR + L1CACR + Layerx Constant Alpha Configuration Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CONSTA + Constant Alpha + 0 + 8 + + + 0 + 255 + + + + + + + DCCR + L1DCCR + Layerx Default Color Configuration Register + 0x18 + 0x20 + read-write + 0x00000000 + + + DCALPHA + Default Color Alpha + 24 + 8 + + + 0 + 255 + + + + + DCRED + Default Color Red + 16 + 8 + + + 0 + 255 + + + + + DCGREEN + Default Color Green + 8 + 8 + + + 0 + 255 + + + + + DCBLUE + Default Color Blue + 0 + 8 + + + 0 + 255 + + + + + + + BFCR + L1BFCR + Layerx Blending Factors Configuration Register + 0x1C + 0x20 + read-write + 0x00000607 + + + BF1 + Blending Factor 1 + 8 + 3 + + BF1 + read-write + + Constant + BF1 = constant alpha + 4 + + + Pixel + BF1 = pixel alpha * constant alpha + 6 + + + + + BF2 + Blending Factor 2 + 0 + 3 + + BF2 + read-write + + Constant + BF2 = 1 - constant alpha + 5 + + + Pixel + BF2 = 1 - pixel alpha * constant alpha + 7 + + + + + + + CFBAR + L1CFBAR + Layerx Color Frame Buffer Address Register + 0x28 + 0x20 + read-write + 0x00000000 + + + CFBADD + Color Frame Buffer Start Address + 0 + 32 + + + 0 + 4294967295 + + + + + + + CFBLR + L1CFBLR + Layerx Color Frame Buffer Length Register + 0x2C + 0x20 + read-write + 0x00000000 + + + CFBP + Color Frame Buffer Pitch in bytes + 16 + 13 + + + 0 + 8191 + + + + + CFBLL + Color Frame Buffer Line Length + 0 + 13 + + + 0 + 8191 + + + + + + + CFBLNR + L1CFBLNR + Layerx ColorFrame Buffer Line Number Register + 0x30 + 0x20 + read-write + 0x00000000 + + + CFBLNBR + Frame Buffer Line Number + 0 + 11 + + + 0 + 2047 + + + + + + + CLUTWR + L1CLUTWR + Layerx CLUT Write Register + 0x40 + 0x20 + write-only + 0x00000000 + + + CLUTADD + CLUT Address + 24 + 8 + + + 0 + 255 + + + + + RED + Red value + 16 + 8 + + + 0 + 255 + + + + + GREEN + Green value + 8 + 8 + + + 0 + 255 + + + + + BLUE + Blue value + 0 + 8 + + + 0 + 255 + + + + + + + + + + SAI1 + Serial audio interface + SAI + 0x40015800 + + 0x0 + 0x400 + registers + + + SAI1 + SAI1 global interrupt + 87 + + + SAI2 + SAI2 global interrupt + 91 + + + + 2 + 0x20 + A,B + CH%s + Cluster CH%s, containing ?CR1, ?CR2, ?FRCR, ?SLOTR, ?IM, ?SR, ?CLRFR, ?DR + 0x4 + + CR1 + ACR1 + AConfiguration register 1 + 0x0 + 0x20 + read-write + 0x00000040 + + + MCKDIV + Master clock divider + 20 + 4 + + + NODIV + No divider + 19 + 1 + + NODIV + read-write + + MasterClock + MCLK output is enabled. Forces the ratio between FS and MCLK to 256 or 512 according to the OSR value + 0 + + + NoDiv + MCLK output enable set by the MCKEN bit (where present, else 0). Ratio between FS and MCLK depends on FRL. + 1 + + + + + DMAEN + DMA enable + 17 + 1 + + DMAEN + read-write + + Disabled + DMA disabled + 0 + + + Enabled + DMA enabled + 1 + + + + + SAIEN + Audio block A enable + 16 + 1 + + SAIEN + read-write + + Disabled + SAI audio block disabled + 0 + + + Enabled + SAI audio block enabled + 1 + + + + + OUTDRIV + Output drive + 13 + 1 + + OUTDRIV + read-write + + OnStart + Audio block output driven when SAIEN is set + 0 + + + Immediately + Audio block output driven immediately after the setting of this bit + 1 + + + + + MONO + Mono mode + 12 + 1 + + MONO + read-write + + Stereo + Stereo mode + 0 + + + Mono + Mono mode + 1 + + + + + SYNCEN + Synchronization enable + 10 + 2 + + SYNCEN + read-write + + Asynchronous + audio sub-block in asynchronous mode + 0 + + + Internal + audio sub-block is synchronous with the other internal audio sub-block. In this case, the audio sub-block must be configured in slave mode + 1 + + + External + audio sub-block is synchronous with an external SAI embedded peripheral. In this case the audio sub-block should be configured in Slave mode + 2 + + + + + CKSTR + Clock strobing edge + 9 + 1 + + CKSTR + read-write + + FallingEdge + Data strobing edge is falling edge of SCK + 0 + + + RisingEdge + Data strobing edge is rising edge of SCK + 1 + + + + + LSBFIRST + Least significant bit first + 8 + 1 + + LSBFIRST + read-write + + MsbFirst + Data are transferred with MSB first + 0 + + + LsbFirst + Data are transferred with LSB first + 1 + + + + + DS + Data size + 5 + 3 + + DS + read-write + + Bit8 + 8 bits + 2 + + + Bit10 + 10 bits + 3 + + + Bit16 + 16 bits + 4 + + + Bit20 + 20 bits + 5 + + + Bit24 + 24 bits + 6 + + + Bit32 + 32 bits + 7 + + + + + PRTCFG + Protocol configuration + 2 + 2 + + PRTCFG + read-write + + Free + Free protocol. Free protocol allows to use the powerful configuration of the audio block to address a specific audio protocol + 0 + + + Spdif + SPDIF protocol + 1 + + + Ac97 + AC’97 protocol + 2 + + + + + MODE + Audio block mode + 0 + 2 + + MODE + read-write + + MasterTx + Master transmitter + 0 + + + MasterRx + Master receiver + 1 + + + SlaveTx + Slave transmitter + 2 + + + SlaveRx + Slave receiver + 3 + + + + + + + CR2 + ACR2 + AConfiguration register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + COMP + Companding mode + 14 + 2 + read-write + + COMP + read-write + + NoCompanding + No companding algorithm + 0 + + + MuLaw + μ-Law algorithm + 2 + + + ALaw + A-Law algorithm + 3 + + + + + CPL + Complement bit + 13 + 1 + read-write + + CPL + read-write + + OnesComplement + 1’s complement representation + 0 + + + TwosComplement + 2’s complement representation + 1 + + + + + MUTECNT + Mute counter + 7 + 6 + read-write + + + MUTEVAL + Mute value + 6 + 1 + read-write + + MUTEVAL + read-write + + SendZero + Bit value 0 is sent during the mute mode + 0 + + + SendLast + Last values are sent during the mute mode + 1 + + + + + MUTE + Mute + 5 + 1 + read-write + + MUTE + read-write + + Disabled + No mute mode + 0 + + + Enabled + Mute mode enabled + 1 + + + + + TRIS + Tristate management on data line + 4 + 1 + read-write + + + FFLUSH + FIFO flush + 3 + 1 + + FFLUSH + read-write + + NoFlush + No FIFO flush + 0 + + + Flush + FIFO flush. Programming this bit to 1 triggers the FIFO Flush. All the internal FIFO pointers (read and write) are cleared + 1 + + + + + FTH + FIFO threshold + 0 + 3 + read-write + + FTH + read-write + + Empty + FIFO empty + 0 + + + Quarter1 + 1⁄4 FIFO + 1 + + + Quarter2 + 1⁄2 FIFO + 2 + + + Quarter3 + 3⁄4 FIFO + 3 + + + Full + FIFO full + 4 + + + + + + + FRCR + AFRCR + AFRCR + 0x8 + 0x20 + read-write + 0x00000007 + + + FSOFF + Frame synchronization offset + 18 + 1 + read-write + + FSOFF + read-write + + OnFirst + FS is asserted on the first bit of the slot 0 + 0 + + + BeforeFirst + FS is asserted one bit before the first bit of the slot 0 + 1 + + + + + FSPOL + Frame synchronization polarity + 17 + 1 + read-write + + FSPOL + read-write + + FallingEdge + FS is active low (falling edge) + 0 + + + RisingEdge + FS is active high (rising edge) + 1 + + + + + FSDEF + Frame synchronization definition + 16 + 1 + read-write + + + FSALL + Frame synchronization active level length + 8 + 7 + read-write + + + FRL + Frame length + 0 + 8 + read-write + + + + + SLOTR + ASLOTR + ASlot register + 0xC + 0x20 + read-write + 0x00000000 + + + SLOTEN + Slot enable + 16 + 16 + + SLOTEN + read-write + + Inactive + Inactive slot + 0 + + + Active + Active slot + 1 + + + + + NBSLOT + Number of slots in an audio frame + 8 + 4 + + + SLOTSZ + Slot size + 6 + 2 + + SLOTSZ + read-write + + DataSize + The slot size is equivalent to the data size (specified in DS[3:0] in the SAI_xCR1 register) + 0 + + + Bit16 + 16-bit + 1 + + + Bit32 + 32-bit + 2 + + + + + FBOFF + First bit offset + 0 + 5 + + + + + IM + AIM + AInterrupt mask register2 + 0x10 + 0x20 + read-write + 0x00000000 + + + LFSDETIE + Late frame synchronization detection interrupt enable + 6 + 1 + + LFSDETIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + AFSDETIE + Anticipated frame synchronization detection interrupt enable + 5 + 1 + + AFSDETIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + CNRDYIE + Codec not ready interrupt enable + 4 + 1 + + CNRDYIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + FREQIE + FIFO request interrupt enable + 3 + 1 + + FREQIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + WCKCFGIE + Wrong clock configuration interrupt enable + 2 + 1 + + WCKCFGIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + MUTEDETIE + Mute detection interrupt enable + 1 + 1 + + MUTEDETIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + OVRUDRIE + Overrun/underrun interrupt enable + 0 + 1 + + OVRUDRIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is enabled + 1 + + + + + + + SR + ASR + AStatus register + 0x14 + 0x20 + read-only + 0x00000008 + + + FLVL + FIFO level threshold + 16 + 3 + + FLVLR + read + + Empty + FIFO empty + 0 + + + Quarter1 + FIFO <= 1⁄4 but not empty + 1 + + + Quarter2 + 1⁄4 < FIFO <= 1⁄2 + 2 + + + Quarter3 + 1⁄2 < FIFO <= 3⁄4 + 3 + + + Quarter4 + 3⁄4 < FIFO but not full + 4 + + + Full + FIFO full + 5 + + + + + LFSDET + Late frame synchronization detection + 6 + 1 + + LFSDETR + read + + NoError + No error + 0 + + + NoSync + Frame synchronization signal is not present at the right time + 1 + + + + + AFSDET + Anticipated frame synchronization detection + 5 + 1 + + AFSDETR + read + + NoError + No error + 0 + + + EarlySync + Frame synchronization signal is detected earlier than expected + 1 + + + + + CNRDY + Codec not ready + 4 + 1 + + CNRDYR + read + + Ready + External AC’97 Codec is ready + 0 + + + NotReady + External AC’97 Codec is not ready + 1 + + + + + FREQ + FIFO request + 3 + 1 + + FREQR + read + + NoRequest + No FIFO request + 0 + + + Request + FIFO request to read or to write the SAI_xDR + 1 + + + + + WCKCFG + Wrong clock configuration flag. This bit is read only. + 2 + 1 + + WCKCFGR + read + + Correct + Clock configuration is correct + 0 + + + Wrong + Clock configuration does not respect the rule concerning the frame length specification + 1 + + + + + MUTEDET + Mute detection + 1 + 1 + + MUTEDETR + read + + NoMute + No MUTE detection on the SD input line + 0 + + + Mute + MUTE value detected on the SD input line (0 value) for a specified number of consecutive audio frame + 1 + + + + + OVRUDR + Overrun / underrun + 0 + 1 + + OVRUDRR + read + + NoError + No overrun/underrun error + 0 + + + Overrun + Overrun/underrun error detection + 1 + + + + + + + CLRFR + ACLRFR + AClear flag register + 0x18 + 0x20 + write-only + 0x00000000 + + + CLFSDET + Clear late frame synchronization detection flag + 6 + 1 + + CLFSDETW + write + + Clear + Clears the LFSDET flag + 1 + + + + + CAFSDET + Clear anticipated frame synchronization detection flag. + 5 + 1 + + CAFSDETW + write + + Clear + Clears the AFSDET flag + 1 + + + + + CCNRDY + Clear codec not ready flag + 4 + 1 + + CCNRDYW + write + + Clear + Clears the CNRDY flag + 1 + + + + + CWCKCFG + Clear wrong clock configuration flag + 2 + 1 + + CWCKCFGW + write + + Clear + Clears the WCKCFG flag + 1 + + + + + CMUTEDET + Mute detection flag + 1 + 1 + + CMUTEDETW + write + + Clear + Clears the MUTEDET flag + 1 + + + + + COVRUDR + Clear overrun / underrun + 0 + 1 + + COVRUDRW + write + + Clear + Clears the OVRUDR flag + 1 + + + + + + + DR + ADR + AData register + 0x1C + 0x20 + read-write + 0x00000000 + + + DATA + Data + 0 + 32 + + + + + + GCR + GCR + Global configuration register + 0x0 + 0x20 + read-write + 0x00000000 + + + SYNCIN + Synchronization inputs + 0 + 2 + + + SYNCOUT + Synchronization outputs + 4 + 2 + + + + + + + SAI2 + 0x40015C00 + + SAI2 + SAI2 global interrupt + 91 + + + + DMA2D + DMA2D controller + DMA2D + 0x4002B000 + + 0x0 + 0xC00 + registers + + + DMA2D + DMA2D global interrupt + 90 + + + + CR + CR + control register + 0x0 + 0x20 + read-write + 0x00000000 + + + MODE + DMA2D mode + 16 + 2 + + MODE + read-write + + MemoryToMemory + Memory-to-memory (FG fetch only) + 0 + + + MemoryToMemoryPFC + Memory-to-memory with PFC (FG fetch only with FG PFC active) + 1 + + + MemoryToMemoryPFCBlending + Memory-to-memory with blending (FG and BG fetch with PFC and blending) + 2 + + + RegisterToMemory + Register-to-memory + 3 + + + + + CEIE + Configuration Error Interrupt Enable + 13 + 1 + + CEIE + read-write + + Disabled + CE interrupt disabled + 0 + + + Enabled + CE interrupt enabled + 1 + + + + + CTCIE + CLUT transfer complete interrupt enable + 12 + 1 + + CTCIE + read-write + + Disabled + CTC interrupt disabled + 0 + + + Enabled + CTC interrupt enabled + 1 + + + + + CAEIE + CLUT access error interrupt enable + 11 + 1 + + CAEIE + read-write + + Disabled + CAE interrupt disabled + 0 + + + Enabled + CAE interrupt enabled + 1 + + + + + TWIE + Transfer watermark interrupt enable + 10 + 1 + + TWIE + read-write + + Disabled + TW interrupt disabled + 0 + + + Enabled + TW interrupt enabled + 1 + + + + + TCIE + Transfer complete interrupt enable + 9 + 1 + + TCIE + read-write + + Disabled + TC interrupt disabled + 0 + + + Enabled + TC interrupt enabled + 1 + + + + + TEIE + Transfer error interrupt enable + 8 + 1 + + TEIE + read-write + + Disabled + TE interrupt disabled + 0 + + + Enabled + TE interrupt enabled + 1 + + + + + ABORT + Abort + 2 + 1 + + ABORT + read-write + + AbortRequest + Transfer abort requested + 1 + + + + + SUSP + Suspend + 1 + 1 + + SUSP + read-write + + NotSuspended + Transfer not suspended + 0 + + + Suspended + Transfer suspended + 1 + + + + + START + Start + 0 + 1 + + START + read-write + + Start + Launch the DMA2D + 1 + + + + + + + ISR + ISR + Interrupt Status Register + 0x4 + 0x20 + read-only + 0x00000000 + + + CEIF + Configuration error interrupt flag + 5 + 1 + + + CTCIF + CLUT transfer complete interrupt flag + 4 + 1 + + + CAEIF + CLUT access error interrupt flag + 3 + 1 + + + TWIF + Transfer watermark interrupt flag + 2 + 1 + + + TCIF + Transfer complete interrupt flag + 1 + 1 + + + TEIF + Transfer error interrupt flag + 0 + 1 + + + + + IFCR + IFCR + interrupt flag clear register + 0x8 + 0x20 + read-write + 0x00000000 + + + CCEIF + Clear configuration error interrupt flag + 5 + 1 + + CCEIF + read-write + + Clear + Clear the CEIF flag in the ISR register + 1 + + + + + CCTCIF + Clear CLUT transfer complete interrupt flag + 4 + 1 + + CCTCIF + read-write + + Clear + Clear the CTCIF flag in the ISR register + 1 + + + + + CAECIF + Clear CLUT access error interrupt flag + 3 + 1 + + CAECIF + read-write + + Clear + Clear the CAEIF flag in the ISR register + 1 + + + + + CTWIF + Clear transfer watermark interrupt flag + 2 + 1 + + CTWIF + read-write + + Clear + Clear the TWIF flag in the ISR register + 1 + + + + + CTCIF + Clear transfer complete interrupt flag + 1 + 1 + + CTCIF + read-write + + Clear + Clear the TCIF flag in the ISR register + 1 + + + + + CTEIF + Clear Transfer error interrupt flag + 0 + 1 + + CTEIF + read-write + + Clear + Clear the TEIF flag in the ISR register + 1 + + + + + + + FGMAR + FGMAR + foreground memory address register + 0xC + 0x20 + read-write + 0x00000000 + + + MA + Memory address + 0 + 32 + + + + + FGOR + FGOR + foreground offset register + 0x10 + 0x20 + read-write + 0x00000000 + + + LO + Line offset + 0 + 14 + + + 0 + 16383 + + + + + + + BGMAR + BGMAR + background memory address register + 0x14 + 0x20 + read-write + 0x00000000 + + + MA + Memory address + 0 + 32 + + + + + BGOR + BGOR + background offset register + 0x18 + 0x20 + read-write + 0x00000000 + + + LO + Line offset + 0 + 14 + + + 0 + 16383 + + + + + + + FGPFCCR + FGPFCCR + foreground PFC control register + 0x1C + 0x20 + read-write + 0x00000000 + + + ALPHA + Alpha value + 24 + 8 + + + 0 + 255 + + + + + AM + Alpha mode + 16 + 2 + + AM + read-write + + NoModify + No modification of alpha channel + 0 + + + Replace + Replace with value in ALPHA[7:0] + 1 + + + Multiply + Multiply with value in ALPHA[7:0] + 2 + + + + + CS + CLUT size + 8 + 8 + + + 0 + 255 + + + + + START + Start + 5 + 1 + + START + read-write + + Start + Start the automatic loading of the CLUT + 1 + + + + + CCM + CLUT color mode + 4 + 1 + + CCM + read-write + + ARGB8888 + CLUT color format ARGB8888 + 0 + + + RGB888 + CLUT color format RGB888 + 1 + + + + + CM + Color mode + 0 + 4 + + CM + read-write + + ARGB8888 + Color mode ARGB8888 + 0 + + + RGB888 + Color mode RGB888 + 1 + + + RGB565 + Color mode RGB565 + 2 + + + ARGB1555 + Color mode ARGB1555 + 3 + + + ARGB4444 + Color mode ARGB4444 + 4 + + + L8 + Color mode L8 + 5 + + + AL44 + Color mode AL44 + 6 + + + AL88 + Color mode AL88 + 7 + + + L4 + Color mode L4 + 8 + + + A8 + Color mode A8 + 9 + + + A4 + Color mode A4 + 10 + + + + + + + FGCOLR + FGCOLR + foreground color register + 0x20 + 0x20 + read-write + 0x00000000 + + + RED + Red Value + 16 + 8 + + + 0 + 255 + + + + + GREEN + Green Value + 8 + 8 + + + 0 + 255 + + + + + BLUE + Blue Value + 0 + 8 + + + 0 + 255 + + + + + + + BGPFCCR + BGPFCCR + background PFC control register + 0x24 + 0x20 + read-write + 0x00000000 + + + ALPHA + Alpha value + 24 + 8 + + + 0 + 255 + + + + + AM + Alpha mode + 16 + 2 + + AM + read-write + + NoModify + No modification of alpha channel + 0 + + + Replace + Replace with value in ALPHA[7:0] + 1 + + + Multiply + Multiply with value in ALPHA[7:0] + 2 + + + + + CS + CLUT size + 8 + 8 + + + 0 + 255 + + + + + START + Start + 5 + 1 + + START + read-write + + Start + Start the automatic loading of the CLUT + 1 + + + + + CCM + CLUT Color mode + 4 + 1 + + CCM + read-write + + ARGB8888 + CLUT color format ARGB8888 + 0 + + + RGB888 + CLUT color format RGB888 + 1 + + + + + CM + Color mode + 0 + 4 + + CM + read-write + + ARGB8888 + Color mode ARGB8888 + 0 + + + RGB888 + Color mode RGB888 + 1 + + + RGB565 + Color mode RGB565 + 2 + + + ARGB1555 + Color mode ARGB1555 + 3 + + + ARGB4444 + Color mode ARGB4444 + 4 + + + L8 + Color mode L8 + 5 + + + AL44 + Color mode AL44 + 6 + + + AL88 + Color mode AL88 + 7 + + + L4 + Color mode L4 + 8 + + + A8 + Color mode A8 + 9 + + + A4 + Color mode A4 + 10 + + + + + + + BGCOLR + BGCOLR + background color register + 0x28 + 0x20 + read-write + 0x00000000 + + + RED + Red Value + 16 + 8 + + + 0 + 255 + + + + + GREEN + Green Value + 8 + 8 + + + 0 + 255 + + + + + BLUE + Blue Value + 0 + 8 + + + 0 + 255 + + + + + + + FGCMAR + FGCMAR + foreground CLUT memory address register + 0x2C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address + 0 + 32 + + + + + BGCMAR + BGCMAR + background CLUT memory address register + 0x30 + 0x20 + read-write + 0x00000000 + + + MA + Memory address + 0 + 32 + + + + + OPFCCR + OPFCCR + output PFC control register + 0x34 + 0x20 + read-write + 0x00000000 + + + CM + Color mode + 0 + 3 + + CM + read-write + + ARGB8888 + ARGB8888 + 0 + + + RGB888 + RGB888 + 1 + + + RGB565 + RGB565 + 2 + + + ARGB1555 + ARGB1555 + 3 + + + ARGB4444 + ARGB4444 + 4 + + + + + + + OCOLR + OCOLR + output color register + 0x38 + 0x20 + read-write + 0x00000000 + + + APLHA + Alpha Channel Value + 24 + 8 + + + RED + Red Value + 16 + 8 + + + GREEN + Green Value + 8 + 8 + + + BLUE + Blue Value + 0 + 8 + + + + + OMAR + OMAR + output memory address register + 0x3C + 0x20 + read-write + 0x00000000 + + + MA + Memory Address + 0 + 32 + + + + + OOR + OOR + output offset register + 0x40 + 0x20 + read-write + 0x00000000 + + + LO + Line Offset + 0 + 14 + + + 0 + 16383 + + + + + + + NLR + NLR + number of line register + 0x44 + 0x20 + read-write + 0x00000000 + + + PL + Pixel per lines + 16 + 14 + + + 0 + 16383 + + + + + NL + Number of lines + 0 + 16 + + + 0 + 65535 + + + + + + + LWR + LWR + line watermark register + 0x48 + 0x20 + read-write + 0x00000000 + + + LW + Line watermark + 0 + 16 + + + + + AMTCR + AMTCR + AHB master timer configuration register + 0x4C + 0x20 + read-write + 0x00000000 + + + DT + Dead Time + 8 + 8 + + + 0 + 255 + + + + + EN + Enable + 0 + 1 + + EN + read-write + + Disabled + Disabled AHB/AXI dead-time functionality + 0 + + + Enabled + Enabled AHB/AXI dead-time functionality + 1 + + + + + + + FGCLUT + FGCLUT + FGCLUT + 0x400 + 0x20 + read-write + 0x00000000 + + + APLHA + APLHA + 24 + 8 + + + RED + RED + 16 + 8 + + + GREEN + GREEN + 8 + 8 + + + BLUE + BLUE + 0 + 8 + + + + + BGCLUT + BGCLUT + BGCLUT + 0x800 + 0x20 + read-write + 0x00000000 + + + APLHA + APLHA + 24 + 8 + + + RED + RED + 16 + 8 + + + GREEN + GREEN + 8 + 8 + + + BLUE + BLUE + 0 + 8 + + + + + + + QUADSPI + QuadSPI interface + QUADSPI + 0xA0001000 + + 0x0 + 0x1000 + registers + + + QuadSPI + QuadSPI global interrupt + 92 + + + + CR + CR + control register + 0x0 + 0x20 + read-write + 0x00000000 + + + PRESCALER + Clock prescaler + 24 + 8 + + + PMM + Polling match mode + 23 + 1 + + + APMS + Automatic poll mode stop + 22 + 1 + + + TOIE + TimeOut interrupt enable + 20 + 1 + + + SMIE + Status match interrupt enable + 19 + 1 + + + FTIE + FIFO threshold interrupt enable + 18 + 1 + + + TCIE + Transfer complete interrupt enable + 17 + 1 + + + TEIE + Transfer error interrupt enable + 16 + 1 + + + FTHRES + IFO threshold level + 8 + 5 + + + FSEL + FLASH memory selection + 7 + 1 + + + DFM + Dual-flash mode + 6 + 1 + + + SSHIFT + Sample shift + 4 + 1 + + + TCEN + Timeout counter enable + 3 + 1 + + + DMAEN + DMA enable + 2 + 1 + + + ABORT + Abort request + 1 + 1 + + + EN + Enable + 0 + 1 + + + + + DCR + DCR + device configuration register + 0x4 + 0x20 + read-write + 0x00000000 + + + FSIZE + FLASH memory size + 16 + 5 + + + CSHT + Chip select high time + 8 + 3 + + + CKMODE + Mode 0 / mode 3 + 0 + 1 + + + + + SR + SR + status register + 0x8 + 0x20 + read-only + 0x00000000 + + + FLEVEL + FIFO level + 8 + 7 + + + BUSY + Busy + 5 + 1 + + + TOF + Timeout flag + 4 + 1 + + + SMF + Status match flag + 3 + 1 + + + FTF + FIFO threshold flag + 2 + 1 + + + TCF + Transfer complete flag + 1 + 1 + + + TEF + Transfer error flag + 0 + 1 + + + + + FCR + FCR + flag clear register + 0xC + 0x20 + read-write + 0x00000000 + + + CTOF + Clear timeout flag + 4 + 1 + + + CSMF + Clear status match flag + 3 + 1 + + + CTCF + Clear transfer complete flag + 1 + 1 + + + CTEF + Clear transfer error flag + 0 + 1 + + + + + DLR + DLR + data length register + 0x10 + 0x20 + read-write + 0x00000000 + + + DL + Data length + 0 + 32 + + + + + CCR + CCR + communication configuration register + 0x14 + 0x20 + read-write + 0x00000000 + + + DDRM + Double data rate mode + 31 + 1 + + + DHHC + DDR hold half cycle + 30 + 1 + + + SIOO + Send instruction only once mode + 28 + 1 + + + FMODE + Functional mode + 26 + 2 + + + DMODE + Data mode + 24 + 2 + + + DCYC + Number of dummy cycles + 18 + 5 + + + ABSIZE + Alternate bytes size + 16 + 2 + + + ABMODE + Alternate bytes mode + 14 + 2 + + + ADSIZE + Address size + 12 + 2 + + + ADMODE + Address mode + 10 + 2 + + + IMODE + Instruction mode + 8 + 2 + + + INSTRUCTION + Instruction + 0 + 8 + + + + + AR + AR + address register + 0x18 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Address + 0 + 32 + + + + + ABR + ABR + ABR + 0x1C + 0x20 + read-write + 0x00000000 + + + ALTERNATE + ALTERNATE + 0 + 32 + + + + + DR + DR + data register + 0x20 + 0x20 + read-write + 0x00000000 + + + DATA + Data + 0 + 32 + + + + + PSMKR + PSMKR + polling status mask register + 0x24 + 0x20 + read-write + 0x00000000 + + + MASK + Status mask + 0 + 32 + + + + + PSMAR + PSMAR + polling status match register + 0x28 + 0x20 + read-write + 0x00000000 + + + MATCH + Status match + 0 + 32 + + + + + PIR + PIR + polling interval register + 0x2C + 0x20 + read-write + 0x00000000 + + + INTERVAL + Polling interval + 0 + 16 + + + + + LPTR + LPTR + low-power timeout register + 0x30 + 0x20 + read-write + 0x00000000 + + + TIMEOUT + Timeout period + 0 + 16 + + + + + + + CEC + HDMI-CEC controller + CEC + 0x40006C00 + + 0x0 + 0x400 + registers + + + HDMI_CEC + HDMI-CEC global interrupt + 94 + + + + CR + CR + control register + 0x0 + 0x20 + read-write + 0x00000000 + + + TXEOM + Tx End Of Message + 2 + 1 + + + TXSOM + Tx start of message + 1 + 1 + + + CECEN + CEC Enable + 0 + 1 + + + + + CFGR + CFGR + configuration register + 0x4 + 0x20 + read-write + 0x00000000 + + + SFT + Signal Free Time + 0 + 3 + + + RXTOL + Rx-Tolerance + 3 + 1 + + + BRESTP + Rx-stop on bit rising error + 4 + 1 + + + BREGEN + Generate error-bit on bit rising error + 5 + 1 + + + LBPEGEN + Generate Error-Bit on Long Bit Period Error + 6 + 1 + + + BRDNOGEN + Avoid Error-Bit Generation in Broadcast + 7 + 1 + + + SFTOP + SFT Option Bit + 8 + 1 + + + OAR + Own addresses configuration + 16 + 15 + + + LSTN + Listen mode + 31 + 1 + + + + + TXDR + TXDR + Tx data register + 0x8 + 0x20 + write-only + 0x00000000 + + + TXD + Tx Data register + 0 + 8 + + + + + RXDR + RXDR + Rx Data Register + 0xC + 0x20 + read-only + 0x00000000 + + + RXDR + CEC Rx Data Register + 0 + 8 + + + + + ISR + ISR + Interrupt and Status Register + 0x10 + 0x20 + read-write + 0x00000000 + + + TXACKE + Tx-Missing acknowledge error + 12 + 1 + + + TXERR + Tx-Error + 11 + 1 + + + TXUDR + Tx-Buffer Underrun + 10 + 1 + + + TXEND + End of Transmission + 9 + 1 + + + TXBR + Tx-Byte Request + 8 + 1 + + + ARBLST + Arbitration Lost + 7 + 1 + + + RXACKE + Rx-Missing Acknowledge + 6 + 1 + + + LBPE + Rx-Long Bit Period Error + 5 + 1 + + + SBPE + Rx-Short Bit period error + 4 + 1 + + + BRE + Rx-Bit rising error + 3 + 1 + + + RXOVR + Rx-Overrun + 2 + 1 + + + RXEND + End Of Reception + 1 + 1 + + + RXBR + Rx-Byte Received + 0 + 1 + + + + + IER + IER + interrupt enable register + 0x14 + 0x20 + read-write + 0x00000000 + + + TXACKIE + Tx-Missing Acknowledge Error Interrupt Enable + 12 + 1 + + + TXERRIE + Tx-Error Interrupt Enable + 11 + 1 + + + TXUDRIE + Tx-Underrun interrupt enable + 10 + 1 + + + TXENDIE + Tx-End of message interrupt enable + 9 + 1 + + + TXBRIE + Tx-Byte Request Interrupt Enable + 8 + 1 + + + ARBLSTIE + Arbitration Lost Interrupt Enable + 7 + 1 + + + RXACKIE + Rx-Missing Acknowledge Error Interrupt Enable + 6 + 1 + + + LBPEIE + Long Bit Period Error Interrupt Enable + 5 + 1 + + + SBPEIE + Short Bit Period Error Interrupt Enable + 4 + 1 + + + BREIE + Bit Rising Error Interrupt Enable + 3 + 1 + + + RXOVRIE + Rx-Buffer Overrun Interrupt Enable + 2 + 1 + + + RXENDIE + End Of Reception Interrupt Enable + 1 + 1 + + + RXBRIE + Rx-Byte Received Interrupt Enable + 0 + 1 + + + + + + + SPDIFRX + Receiver Interface + SPDIF_RX + 0x40004000 + + 0x0 + 0x400 + registers + + + SPDIFRX + SPDIFRX global interrupt + 97 + + + + CR + CR + Control register + 0x0 + 0x20 + read-write + 0x00000000 + + + SPDIFEN + Peripheral Block Enable + 0 + 2 + + + RXDMAEN + Receiver DMA ENable for data flow + 2 + 1 + + + RXSTEO + STerEO Mode + 3 + 1 + + + DRFMT + RX Data format + 4 + 2 + + + PMSK + Mask Parity error bit + 6 + 1 + + + VMSK + Mask of Validity bit + 7 + 1 + + + CUMSK + Mask of channel status and user bits + 8 + 1 + + + PTMSK + Mask of Preamble Type bits + 9 + 1 + + + CBDMAEN + Control Buffer DMA ENable for control flow + 10 + 1 + + + CHSEL + Channel Selection + 11 + 1 + + + NBTR + Maximum allowed re-tries during synchronization phase + 12 + 2 + + + WFA + Wait For Activity + 14 + 1 + + + INSEL + input selection + 16 + 3 + + + + + IMR + IMR + Interrupt mask register + 0x4 + 0x20 + read-write + 0x00000000 + + + RXNEIE + RXNE interrupt enable + 0 + 1 + + + CSRNEIE + Control Buffer Ready Interrupt Enable + 1 + 1 + + + PERRIE + Parity error interrupt enable + 2 + 1 + + + OVRIE + Overrun error Interrupt Enable + 3 + 1 + + + SBLKIE + Synchronization Block Detected Interrupt Enable + 4 + 1 + + + SYNCDIE + Synchronization Done + 5 + 1 + + + IFEIE + Serial Interface Error Interrupt Enable + 6 + 1 + + + + + SR + SR + Status register + 0x8 + 0x20 + read-only + 0x00000000 + + + RXNE + Read data register not empty + 0 + 1 + + + CSRNE + Control Buffer register is not empty + 1 + 1 + + + PERR + Parity error + 2 + 1 + + + OVR + Overrun error + 3 + 1 + + + SBD + Synchronization Block Detected + 4 + 1 + + + SYNCD + Synchronization Done + 5 + 1 + + + FERR + Framing error + 6 + 1 + + + SERR + Synchronization error + 7 + 1 + + + TERR + Time-out error + 8 + 1 + + + WIDTH5 + Duration of 5 symbols counted with SPDIF_CLK + 16 + 15 + + + + + IFCR + IFCR + Interrupt Flag Clear register + 0xC + 0x20 + write-only + 0x00000000 + + + PERRCF + Clears the Parity error flag + 2 + 1 + + + OVRCF + Clears the Overrun error flag + 3 + 1 + + + SBDCF + Clears the Synchronization Block Detected flag + 4 + 1 + + + SYNCDCF + Clears the Synchronization Done flag + 5 + 1 + + + + + DR + DR + Data input register + 0x10 + 0x20 + read-only + 0x00000000 + + + DR + Parity Error bit + 0 + 24 + + + PE + Parity Error bit + 24 + 1 + + + V + Validity bit + 25 + 1 + + + U + User bit + 26 + 1 + + + C + Channel Status bit + 27 + 1 + + + PT + Preamble Type + 28 + 2 + + + + + CSR + CSR + Channel Status register + 0x14 + 0x20 + read-only + 0x00000000 + + + USR + User data information + 0 + 16 + + + CS + Channel A status information + 16 + 8 + + + SOB + Start Of Block + 24 + 1 + + + + + DIR + DIR + Debug Information register + 0x18 + 0x20 + read-only + 0x00000000 + + + THI + Threshold HIGH + 0 + 13 + + + TLO + Threshold LOW + 16 + 13 + + + + + + + SDMMC1 + Secure digital input/output interface + SDMMC + 0x40012C00 + + 0x0 + 0x400 + registers + + + SDMMC1 + SDMMC1 global interrupt + 49 + + + + POWER + POWER + power control register + 0x0 + 0x20 + read-write + 0x00000000 + + + PWRCTRL + PWRCTRL + 0 + 2 + + + + + CLKCR + CLKCR + SDI clock control register + 0x4 + 0x20 + read-write + 0x00000000 + + + HWFC_EN + HW Flow Control enable + 14 + 1 + + + NEGEDGE + SDIO_CK dephasing selection bit + 13 + 1 + + + WIDBUS + Wide bus mode enable bit + 11 + 2 + + + BYPASS + Clock divider bypass enable bit + 10 + 1 + + + PWRSAV + Power saving configuration bit + 9 + 1 + + + CLKEN + Clock enable bit + 8 + 1 + + + CLKDIV + Clock divide factor + 0 + 8 + + + + + ARG + ARG + argument register + 0x8 + 0x20 + read-write + 0x00000000 + + + CMDARG + Command argument + 0 + 32 + + + + + CMD + CMD + command register + 0xC + 0x20 + read-write + 0x00000000 + + + SDIOSuspend + SD I/O suspend command + 11 + 1 + + + CPSMEN + Command path state machine (CPSM) Enable bit + 10 + 1 + + + WAITPEND + CPSM Waits for ends of data transfer (CmdPend internal signal) + 9 + 1 + + + WAITINT + CPSM waits for interrupt request + 8 + 1 + + + WAITRESP + Wait for response bits + 6 + 2 + + + CMDINDEX + Command index + 0 + 6 + + + + + RESPCMD + RESPCMD + command response register + 0x10 + 0x20 + read-only + 0x00000000 + + + RESPCMD + Response command index + 0 + 6 + + + + + RESP1 + RESP1 + response 1..4 register + 0x14 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS1 + see Table 132 + 0 + 32 + + + + + RESP2 + RESP2 + response 1..4 register + 0x18 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS2 + see Table 132 + 0 + 32 + + + + + RESP3 + RESP3 + response 1..4 register + 0x1C + 0x20 + read-only + 0x00000000 + + + CARDSTATUS3 + see Table 132 + 0 + 32 + + + + + RESP4 + RESP4 + response 1..4 register + 0x20 + 0x20 + read-only + 0x00000000 + + + CARDSTATUS4 + see Table 132 + 0 + 32 + + + + + DTIMER + DTIMER + data timer register + 0x24 + 0x20 + read-write + 0x00000000 + + + DATATIME + Data timeout period + 0 + 32 + + + + + DLEN + DLEN + data length register + 0x28 + 0x20 + read-write + 0x00000000 + + + DATALENGTH + Data length value + 0 + 25 + + + + + DCTRL + DCTRL + data control register + 0x2C + 0x20 + read-write + 0x00000000 + + + SDIOEN + SD I/O enable functions + 11 + 1 + + + RWMOD + Read wait mode + 10 + 1 + + + RWSTOP + Read wait stop + 9 + 1 + + + RWSTART + Read wait start + 8 + 1 + + + DBLOCKSIZE + Data block size + 4 + 4 + + + DMAEN + DMA enable bit + 3 + 1 + + + DTMODE + Data transfer mode selection 1: Stream or SDIO multibyte data transfer + 2 + 1 + + + DTDIR + Data transfer direction selection + 1 + 1 + + + DTEN + DTEN + 0 + 1 + + + + + DCOUNT + DCOUNT + data counter register + 0x30 + 0x20 + read-only + 0x00000000 + + + DATACOUNT + Data count value + 0 + 25 + + + + + STA + STA + status register + 0x34 + 0x20 + read-only + 0x00000000 + + + SDIOIT + SDIO interrupt received + 22 + 1 + + + RXDAVL + Data available in receive FIFO + 21 + 1 + + + TXDAVL + Data available in transmit FIFO + 20 + 1 + + + RXFIFOE + Receive FIFO empty + 19 + 1 + + + TXFIFOE + Transmit FIFO empty + 18 + 1 + + + RXFIFOF + Receive FIFO full + 17 + 1 + + + TXFIFOF + Transmit FIFO full + 16 + 1 + + + RXFIFOHF + Receive FIFO half full: there are at least 8 words in the FIFO + 15 + 1 + + + TXFIFOHE + Transmit FIFO half empty: at least 8 words can be written into the FIFO + 14 + 1 + + + RXACT + Data receive in progress + 13 + 1 + + + TXACT + Data transmit in progress + 12 + 1 + + + CMDACT + Command transfer in progress + 11 + 1 + + + DBCKEND + Data block sent/received (CRC check passed) + 10 + 1 + + + DATAEND + Data end (data counter, SDIDCOUNT, is zero) + 8 + 1 + + + CMDSENT + Command sent (no response required) + 7 + 1 + + + CMDREND + Command response received (CRC check passed) + 6 + 1 + + + RXOVERR + Received FIFO overrun error + 5 + 1 + + + TXUNDERR + Transmit FIFO underrun error + 4 + 1 + + + DTIMEOUT + Data timeout + 3 + 1 + + + CTIMEOUT + Command response timeout + 2 + 1 + + + DCRCFAIL + Data block sent/received (CRC check failed) + 1 + 1 + + + CCRCFAIL + Command response received (CRC check failed) + 0 + 1 + + + + + ICR + ICR + interrupt clear register + 0x38 + 0x20 + read-write + 0x00000000 + + + SDIOITC + SDIOIT flag clear bit + 22 + 1 + + + DBCKENDC + DBCKEND flag clear bit + 10 + 1 + + + DATAENDC + DATAEND flag clear bit + 8 + 1 + + + CMDSENTC + CMDSENT flag clear bit + 7 + 1 + + + CMDRENDC + CMDREND flag clear bit + 6 + 1 + + + RXOVERRC + RXOVERR flag clear bit + 5 + 1 + + + TXUNDERRC + TXUNDERR flag clear bit + 4 + 1 + + + DTIMEOUTC + DTIMEOUT flag clear bit + 3 + 1 + + + CTIMEOUTC + CTIMEOUT flag clear bit + 2 + 1 + + + DCRCFAILC + DCRCFAIL flag clear bit + 1 + 1 + + + CCRCFAILC + CCRCFAIL flag clear bit + 0 + 1 + + + + + MASK + MASK + mask register + 0x3C + 0x20 + read-write + 0x00000000 + + + SDIOITIE + SDIO mode interrupt received interrupt enable + 22 + 1 + + + RXDAVLIE + Data available in Rx FIFO interrupt enable + 21 + 1 + + + TXDAVLIE + Data available in Tx FIFO interrupt enable + 20 + 1 + + + RXFIFOEIE + Rx FIFO empty interrupt enable + 19 + 1 + + + TXFIFOEIE + Tx FIFO empty interrupt enable + 18 + 1 + + + RXFIFOFIE + Rx FIFO full interrupt enable + 17 + 1 + + + TXFIFOFIE + Tx FIFO full interrupt enable + 16 + 1 + + + RXFIFOHFIE + Rx FIFO half full interrupt enable + 15 + 1 + + + TXFIFOHEIE + Tx FIFO half empty interrupt enable + 14 + 1 + + + RXACTIE + Data receive acting interrupt enable + 13 + 1 + + + TXACTIE + Data transmit acting interrupt enable + 12 + 1 + + + CMDACTIE + Command acting interrupt enable + 11 + 1 + + + DBCKENDIE + Data block end interrupt enable + 10 + 1 + + + DATAENDIE + Data end interrupt enable + 8 + 1 + + + CMDSENTIE + Command sent interrupt enable + 7 + 1 + + + CMDRENDIE + Command response received interrupt enable + 6 + 1 + + + RXOVERRIE + Rx FIFO overrun error interrupt enable + 5 + 1 + + + TXUNDERRIE + Tx FIFO underrun error interrupt enable + 4 + 1 + + + DTIMEOUTIE + Data timeout interrupt enable + 3 + 1 + + + CTIMEOUTIE + Command timeout interrupt enable + 2 + 1 + + + DCRCFAILIE + Data CRC fail interrupt enable + 1 + 1 + + + CCRCFAILIE + Command CRC fail interrupt enable + 0 + 1 + + + + + FIFOCNT + FIFOCNT + FIFO counter register + 0x48 + 0x20 + read-only + 0x00000000 + + + FIFOCOUNT + Remaining number of words to be written to or read from the FIFO + 0 + 24 + + + + + FIFO + FIFO + data FIFO register + 0x80 + 0x20 + read-write + 0x00000000 + + + FIFOData + Receive and transmit FIFO data + 0 + 32 + + + + + + + LPTIM1 + Low power timer + LPTIM + 0x40002400 + + 0x0 + 0x400 + registers + + + LPTimer1 + LP Timer1 global interrupt + 93 + + + LP_Timer1 + LP Timer1 global interrupt + 93 + + + + ISR + ISR + Interrupt and Status Register + 0x0 + 0x20 + read-only + 0x00000000 + + + DOWN + Counter direction change up to down + 6 + 1 + + + UP + Counter direction change down to up + 5 + 1 + + + ARROK + Autoreload register update OK + 4 + 1 + + + CMPOK + Compare register update OK + 3 + 1 + + + EXTTRIG + External trigger edge event + 2 + 1 + + + ARRM + Autoreload match + 1 + 1 + + + CMPM + Compare match + 0 + 1 + + + + + ICR + ICR + Interrupt Clear Register + 0x4 + 0x20 + write-only + 0x00000000 + + + DOWNCF + Direction change to down Clear Flag + 6 + 1 + + + UPCF + Direction change to UP Clear Flag + 5 + 1 + + + ARROKCF + Autoreload register update OK Clear Flag + 4 + 1 + + + CMPOKCF + Compare register update OK Clear Flag + 3 + 1 + + + EXTTRIGCF + External trigger valid edge Clear Flag + 2 + 1 + + + ARRMCF + Autoreload match Clear Flag + 1 + 1 + + + CMPMCF + compare match Clear Flag + 0 + 1 + + + + + IER + IER + Interrupt Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + DOWNIE + Direction change to down Interrupt Enable + 6 + 1 + + + UPIE + Direction change to UP Interrupt Enable + 5 + 1 + + + ARROKIE + Autoreload register update OK Interrupt Enable + 4 + 1 + + + CMPOKIE + Compare register update OK Interrupt Enable + 3 + 1 + + + EXTTRIGIE + External trigger valid edge Interrupt Enable + 2 + 1 + + + ARRMIE + Autoreload match Interrupt Enable + 1 + 1 + + + CMPMIE + Compare match Interrupt Enable + 0 + 1 + + + + + CFGR + CFGR + Configuration Register + 0xC + 0x20 + read-write + 0x00000000 + + + ENC + Encoder mode enable + 24 + 1 + + + COUNTMODE + counter mode enabled + 23 + 1 + + + PRELOAD + Registers update mode + 22 + 1 + + + WAVPOL + Waveform shape polarity + 21 + 1 + + + WAVE + Waveform shape + 20 + 1 + + + TIMOUT + Timeout enable + 19 + 1 + + + TRIGEN + Trigger enable and polarity + 17 + 2 + + + TRIGSEL + Trigger selector + 13 + 3 + + + PRESC + Clock prescaler + 9 + 3 + + + TRGFLT + Configurable digital filter for trigger + 6 + 2 + + + CKFLT + Configurable digital filter for external clock + 3 + 2 + + + CKPOL + Clock Polarity + 1 + 2 + + + CKSEL + Clock selector + 0 + 1 + + + + + CR + CR + Control Register + 0x10 + 0x20 + read-write + 0x00000000 + + + CNTSTRT + Timer start in continuous mode + 2 + 1 + + + SNGSTRT + LPTIM start in single mode + 1 + 1 + + + ENABLE + LPTIM Enable + 0 + 1 + + + + + CMP + CMP + Compare Register + 0x14 + 0x20 + read-write + 0x00000000 + + + CMP + Compare value + 0 + 16 + + + + + ARR + ARR + Autoreload Register + 0x18 + 0x20 + read-write + 0x00000001 + + + ARR + Auto reload value + 0 + 16 + + + + + CNT + CNT + Counter Register + 0x1C + 0x20 + read-only + 0x00000000 + + + CNT + Counter value + 0 + 16 + + + + + + + I2C1 + Inter-integrated circuit + I2C + 0x40005400 + + 0x0 + 0x400 + registers + + + I2C1_EV + I2C1 event interrupt + 31 + + + I2C1_ER + I2C1 error interrupt + 32 + + + I2C2_EV + I2C2 event interrupt + 33 + + + I2C2_ER + I2C2 error interrupt + 34 + + + I2C3_EV + I2C3 event interrupt + 72 + + + I2C3_ER + I2C3 error interrupt + 73 + + + I2C4_EV + I2C4 event interrupt + 95 + + + I2C4_ER + I2C4 error interrupt + 96 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + PE + Peripheral enable + 0 + 1 + + PE + read-write + + Disabled + Peripheral disabled + 0 + + + Enabled + Peripheral enabled + 1 + + + + + TXIE + TX Interrupt enable + 1 + 1 + + TXIE + read-write + + Disabled + Transmit (TXIS) interrupt disabled + 0 + + + Enabled + Transmit (TXIS) interrupt enabled + 1 + + + + + RXIE + RX Interrupt enable + 2 + 1 + + RXIE + read-write + + Disabled + Receive (RXNE) interrupt disabled + 0 + + + Enabled + Receive (RXNE) interrupt enabled + 1 + + + + + ADDRIE + Address match interrupt enable (slave only) + 3 + 1 + + ADDRIE + read-write + + Disabled + Address match (ADDR) interrupts disabled + 0 + + + Enabled + Address match (ADDR) interrupts enabled + 1 + + + + + NACKIE + Not acknowledge received interrupt enable + 4 + 1 + + NACKIE + read-write + + Disabled + Not acknowledge (NACKF) received interrupts disabled + 0 + + + Enabled + Not acknowledge (NACKF) received interrupts enabled + 1 + + + + + STOPIE + STOP detection Interrupt enable + 5 + 1 + + STOPIE + read-write + + Disabled + Stop detection (STOPF) interrupt disabled + 0 + + + Enabled + Stop detection (STOPF) interrupt enabled + 1 + + + + + TCIE + Transfer Complete interrupt enable + 6 + 1 + + TCIE + read-write + + Disabled + Transfer Complete interrupt disabled + 0 + + + Enabled + Transfer Complete interrupt enabled + 1 + + + + + ERRIE + Error interrupts enable + 7 + 1 + + ERRIE + read-write + + Disabled + Error detection interrupts disabled + 0 + + + Enabled + Error detection interrupts enabled + 1 + + + + + DNF + Digital noise filter + 8 + 4 + + DNF + read-write + + NoFilter + Digital filter disabled + 0 + + + Filter1 + Digital filter enabled and filtering capability up to 1 tI2CCLK + 1 + + + Filter2 + Digital filter enabled and filtering capability up to 2 tI2CCLK + 2 + + + Filter3 + Digital filter enabled and filtering capability up to 3 tI2CCLK + 3 + + + Filter4 + Digital filter enabled and filtering capability up to 4 tI2CCLK + 4 + + + Filter5 + Digital filter enabled and filtering capability up to 5 tI2CCLK + 5 + + + Filter6 + Digital filter enabled and filtering capability up to 6 tI2CCLK + 6 + + + Filter7 + Digital filter enabled and filtering capability up to 7 tI2CCLK + 7 + + + Filter8 + Digital filter enabled and filtering capability up to 8 tI2CCLK + 8 + + + Filter9 + Digital filter enabled and filtering capability up to 9 tI2CCLK + 9 + + + Filter10 + Digital filter enabled and filtering capability up to 10 tI2CCLK + 10 + + + Filter11 + Digital filter enabled and filtering capability up to 11 tI2CCLK + 11 + + + Filter12 + Digital filter enabled and filtering capability up to 12 tI2CCLK + 12 + + + Filter13 + Digital filter enabled and filtering capability up to 13 tI2CCLK + 13 + + + Filter14 + Digital filter enabled and filtering capability up to 14 tI2CCLK + 14 + + + Filter15 + Digital filter enabled and filtering capability up to 15 tI2CCLK + 15 + + + + + ANFOFF + Analog noise filter OFF + 12 + 1 + + ANFOFF + read-write + + Enabled + Analog noise filter enabled + 0 + + + Disabled + Analog noise filter disabled + 1 + + + + + TXDMAEN + DMA transmission requests enable + 14 + 1 + + TXDMAEN + read-write + + Disabled + DMA mode disabled for transmission + 0 + + + Enabled + DMA mode enabled for transmission + 1 + + + + + RXDMAEN + DMA reception requests enable + 15 + 1 + + RXDMAEN + read-write + + Disabled + DMA mode disabled for reception + 0 + + + Enabled + DMA mode enabled for reception + 1 + + + + + SBC + Slave byte control + 16 + 1 + + SBC + read-write + + Disabled + Slave byte control disabled + 0 + + + Enabled + Slave byte control enabled + 1 + + + + + NOSTRETCH + Clock stretching disable + 17 + 1 + + NOSTRETCH + read-write + + Enabled + Clock stretching enabled + 0 + + + Disabled + Clock stretching disabled + 1 + + + + + WUPEN + Wakeup from STOP enable + 18 + 1 + + WUPEN + read-write + + Disabled + Wakeup from Stop mode disabled + 0 + + + Enabled + Wakeup from Stop mode enabled + 1 + + + + + GCEN + General call enable + 19 + 1 + + GCEN + read-write + + Disabled + General call disabled. Address 0b00000000 is NACKed + 0 + + + Enabled + General call enabled. Address 0b00000000 is ACKed + 1 + + + + + SMBHEN + SMBus Host address enable + 20 + 1 + + SMBHEN + read-write + + Disabled + Host address disabled. Address 0b0001000x is NACKed + 0 + + + Enabled + Host address enabled. Address 0b0001000x is ACKed + 1 + + + + + SMBDEN + SMBus Device Default address enable + 21 + 1 + + SMBDEN + read-write + + Disabled + Device default address disabled. Address 0b1100001x is NACKed + 0 + + + Enabled + Device default address enabled. Address 0b1100001x is ACKed + 1 + + + + + ALERTEN + SMBUS alert enable + 22 + 1 + + ALERTEN + read-write + + Disabled + In device mode (SMBHEN=Disabled) Releases SMBA pin high and Alert Response Address Header disabled (0001100x) followed by NACK. In host mode (SMBHEN=Enabled) SMBus Alert pin (SMBA) not supported + 0 + + + Enabled + In device mode (SMBHEN=Disabled) Drives SMBA pin low and Alert Response Address Header enabled (0001100x) followed by ACK.In host mode (SMBHEN=Enabled) SMBus Alert pin (SMBA) supported + 1 + + + + + PECEN + PEC enable + 23 + 1 + + PECEN + read-write + + Disabled + PEC calculation disabled + 0 + + + Enabled + PEC calculation enabled + 1 + + + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + PECBYTE + Packet error checking byte + 26 + 1 + oneToSet + + PECBYTER + read + + NoPec + No PEC transfer + 0 + + + Pec + PEC transmission/reception is requested + 1 + + + + PECBYTEW + write + + Pec + PEC transmission/reception is requested + 1 + + + + + AUTOEND + Automatic end mode (master mode) + 25 + 1 + + AUTOEND + read-write + + Software + Software end mode: TC flag is set when NBYTES data are transferred, stretching SCL low + 0 + + + Automatic + Automatic end mode: a STOP condition is automatically sent when NBYTES data are transferred + 1 + + + + + RELOAD + NBYTES reload mode + 24 + 1 + + RELOAD + read-write + + Completed + The transfer is completed after the NBYTES data transfer (STOP or RESTART will follow) + 0 + + + NotCompleted + The transfer is not completed after the NBYTES data transfer (NBYTES will be reloaded) + 1 + + + + + NBYTES + Number of bytes + 16 + 8 + + + 0 + 255 + + + + + NACK + NACK generation (slave mode) + 15 + 1 + oneToSet + + NACKR + read + + Ack + an ACK is sent after current received byte + 0 + + + Nack + a NACK is sent after current received byte + 1 + + + + NACKW + write + + Nack + a NACK is sent after current received byte + 1 + + + + + STOP + Stop generation (master mode) + 14 + 1 + oneToSet + + STOPR + read + + NoStop + No Stop generation + 0 + + + Stop + Stop generation after current byte transfer + 1 + + + + STOPW + write + + Stop + Stop generation after current byte transfer + 1 + + + + + START + Start generation + 13 + 1 + oneToSet + + STARTR + read + + NoStart + No Start generation + 0 + + + Start + Restart/Start generation + 1 + + + + STARTW + write + + Start + Restart/Start generation + 1 + + + + + HEAD10R + 10-bit address header only read direction (master receiver mode) + 12 + 1 + + HEAD10R + read-write + + Complete + The master sends the complete 10 bit slave address read sequence + 0 + + + Partial + The master only sends the 1st 7 bits of the 10 bit address, followed by Read direction + 1 + + + + + ADD10 + 10-bit addressing mode (master mode) + 11 + 1 + + ADD10 + read-write + + Bit7 + The master operates in 7-bit addressing mode + 0 + + + Bit10 + The master operates in 10-bit addressing mode + 1 + + + + + RD_WRN + Transfer direction (master mode) + 10 + 1 + + RD_WRN + read-write + + Write + Master requests a write transfer + 0 + + + Read + Master requests a read transfer + 1 + + + + + SADD + Slave address bit (master mode) + 0 + 10 + + + 0 + 1023 + + + + + + + OAR1 + OAR1 + Own address register 1 + 0x8 + 0x20 + read-write + 0x00000000 + + + OA1 + Interface address + 0 + 10 + + + 0 + 1023 + + + + + OA1MODE + Own Address 1 10-bit mode + 10 + 1 + + OA1MODE + read-write + + Bit7 + Own address 1 is a 7-bit address + 0 + + + Bit10 + Own address 1 is a 10-bit address + 1 + + + + + OA1EN + Own Address 1 enable + 15 + 1 + + OA1EN + read-write + + Disabled + Own address 1 disabled. The received slave address OA1 is NACKed + 0 + + + Enabled + Own address 1 enabled. The received slave address OA1 is ACKed + 1 + + + + + + + OAR2 + OAR2 + Own address register 2 + 0xC + 0x20 + read-write + 0x00000000 + + + OA2 + Interface address + 1 + 7 + + + 0 + 127 + + + + + OA2MSK + Own Address 2 masks + 8 + 3 + + OA2MSK + read-write + + NoMask + No mask + 0 + + + Mask1 + OA2[1] is masked and don’t care. Only OA2[7:2] are compared + 1 + + + Mask2 + OA2[2:1] are masked and don’t care. Only OA2[7:3] are compared + 2 + + + Mask3 + OA2[3:1] are masked and don’t care. Only OA2[7:4] are compared + 3 + + + Mask4 + OA2[4:1] are masked and don’t care. Only OA2[7:5] are compared + 4 + + + Mask5 + OA2[5:1] are masked and don’t care. Only OA2[7:6] are compared + 5 + + + Mask6 + OA2[6:1] are masked and don’t care. Only OA2[7] is compared. + 6 + + + Mask7 + OA2[7:1] are masked and don’t care. No comparison is done, and all (except reserved) 7-bit received addresses are acknowledged + 7 + + + + + OA2EN + Own Address 2 enable + 15 + 1 + + OA2EN + read-write + + Disabled + Own address 2 disabled. The received slave address OA2 is NACKed + 0 + + + Enabled + Own address 2 enabled. The received slave address OA2 is ACKed + 1 + + + + + + + TIMINGR + TIMINGR + Timing register + 0x10 + 0x20 + read-write + 0x00000000 + + + SCLL + SCL low period (master mode) + 0 + 8 + + + 0 + 255 + + + + + SCLH + SCL high period (master mode) + 8 + 8 + + + 0 + 255 + + + + + SDADEL + Data hold time + 16 + 4 + + + 0 + 15 + + + + + SCLDEL + Data setup time + 20 + 4 + + + 0 + 15 + + + + + PRESC + Timing prescaler + 28 + 4 + + + 0 + 15 + + + + + + + TIMEOUTR + TIMEOUTR + Status register 1 + 0x14 + 0x20 + read-write + 0x00000000 + + + TIMEOUTA + Bus timeout A + 0 + 12 + + + 0 + 4095 + + + + + TIDLE + Idle clock timeout detection + 12 + 1 + + TIDLE + read-write + + Disabled + TIMEOUTA is used to detect SCL low timeout + 0 + + + Enabled + TIMEOUTA is used to detect both SCL and SDA high timeout (bus idle condition) + 1 + + + + + TIMOUTEN + Clock timeout enable + 15 + 1 + + TIMOUTEN + read-write + + Disabled + SCL timeout detection is disabled + 0 + + + Enabled + SCL timeout detection is enabled + 1 + + + + + TIMEOUTB + Bus timeout B + 16 + 12 + + + 0 + 4095 + + + + + TEXTEN + Extended clock timeout enable + 31 + 1 + + TEXTEN + read-write + + Disabled + Extended clock timeout detection is disabled + 0 + + + Enabled + Extended clock timeout detection is enabled + 1 + + + + + + + ISR + ISR + Interrupt and Status register + 0x18 + 0x20 + 0x00000001 + + + ADDCODE + Address match code (Slave mode) + 17 + 7 + read-only + + + 0 + 127 + + + + + DIR + Transfer direction (Slave mode) + 16 + 1 + read-only + + DIR + read + + Write + Write transfer, slave enters receiver mode + 0 + + + Read + Read transfer, slave enters transmitter mode + 1 + + + + + BUSY + Bus busy + 15 + 1 + read-only + + BUSY + read + + NotBusy + No communication is in progress on the bus + 0 + + + Busy + A communication is in progress on the bus + 1 + + + + + ALERT + SMBus alert + 13 + 1 + read-only + + ALERT + read + + NoAlert + SMBA alert is not detected + 0 + + + Alert + SMBA alert event is detected on SMBA pin + 1 + + + + + TIMEOUT + Timeout or t_low detection flag + 12 + 1 + read-only + + TIMEOUT + read + + NoTimeout + No timeout occured + 0 + + + Timeout + Timeout occured + 1 + + + + + PECERR + PEC Error in reception + 11 + 1 + read-only + + PECERR + read + + Match + Received PEC does match with PEC register + 0 + + + NoMatch + Received PEC does not match with PEC register + 1 + + + + + OVR + Overrun/Underrun (slave mode) + 10 + 1 + read-only + + OVR + read + + NoOverrun + No overrun/underrun error occurs + 0 + + + Overrun + slave mode with NOSTRETCH=1, when an overrun/underrun error occurs + 1 + + + + + ARLO + Arbitration lost + 9 + 1 + read-only + + ARLO + read + + NotLost + No arbitration lost + 0 + + + Lost + Arbitration lost + 1 + + + + + BERR + Bus error + 8 + 1 + read-only + + BERR + read + + NoError + No bus error + 0 + + + Error + Misplaced Start and Stop condition is detected + 1 + + + + + TCR + Transfer Complete Reload + 7 + 1 + read-only + + TCR + read + + NotComplete + Transfer is not complete + 0 + + + Complete + NBYTES has been transfered + 1 + + + + + TC + Transfer Complete (master mode) + 6 + 1 + read-only + + TC + read + + NotComplete + Transfer is not complete + 0 + + + Complete + NBYTES has been transfered + 1 + + + + + STOPF + Stop detection flag + 5 + 1 + read-only + + STOPF + read + + NoStop + No Stop condition detected + 0 + + + Stop + Stop condition detected + 1 + + + + + NACKF + Not acknowledge received flag + 4 + 1 + read-only + + NACKF + read + + NoNack + No NACK has been received + 0 + + + Nack + NACK has been received + 1 + + + + + ADDR + Address matched (slave mode) + 3 + 1 + read-only + + ADDR + read + + NotMatch + Adress mismatched or not received + 0 + + + Match + Received slave address matched with one of the enabled slave addresses + 1 + + + + + RXNE + Receive data register not empty (receivers) + 2 + 1 + read-only + + RXNE + read + + Empty + The RXDR register is empty + 0 + + + NotEmpty + Received data is copied into the RXDR register, and is ready to be read + 1 + + + + + TXIS + Transmit interrupt status (transmitters) + 1 + 1 + read-write + oneToSet + + TXISR + read + + NotEmpty + The TXDR register is not empty + 0 + + + Empty + The TXDR register is empty and the data to be transmitted must be written in the TXDR register + 1 + + + + TXISW + write + + Trigger + Generate a TXIS event + 1 + + + + + TXE + Transmit data register empty (transmitters) + 0 + 1 + read-write + oneToSet + + TXER + read + + NotEmpty + TXDR register not empty + 0 + + + Empty + TXDR register empty + 1 + + + + TXEW + write + + Flush + Flush the transmit data register + 1 + + + + + + + ICR + ICR + Interrupt clear register + 0x1C + 0x20 + write-only + 0x00000000 + + + ALERTCF + Alert flag clear + 13 + 1 + + ALERTCF + write + + Clear + Clears the ALERT flag in ISR register + 1 + + + + + TIMOUTCF + Timeout detection flag clear + 12 + 1 + + TIMOUTCF + write + + Clear + Clears the TIMOUT flag in ISR register + 1 + + + + + PECCF + PEC Error flag clear + 11 + 1 + + PECCF + write + + Clear + Clears the PEC flag in ISR register + 1 + + + + + OVRCF + Overrun/Underrun flag clear + 10 + 1 + + OVRCF + write + + Clear + Clears the OVR flag in ISR register + 1 + + + + + ARLOCF + Arbitration lost flag clear + 9 + 1 + + ARLOCF + write + + Clear + Clears the ARLO flag in ISR register + 1 + + + + + BERRCF + Bus error flag clear + 8 + 1 + + BERRCF + write + + Clear + Clears the BERR flag in ISR register + 1 + + + + + STOPCF + Stop detection flag clear + 5 + 1 + + STOPCF + write + + Clear + Clears the STOP flag in ISR register + 1 + + + + + NACKCF + Not Acknowledge flag clear + 4 + 1 + + NACKCF + write + + Clear + Clears the NACK flag in ISR register + 1 + + + + + ADDRCF + Address Matched flag clear + 3 + 1 + + ADDRCF + write + + Clear + Clears the ADDR flag in ISR register + 1 + + + + + + + PECR + PECR + PEC register + 0x20 + 0x20 + read-only + 0x00000000 + + + PEC + Packet error checking register + 0 + 8 + + + 0 + 255 + + + + + + + RXDR + RXDR + Receive data register + 0x24 + 0x20 + read-only + 0x00000000 + + + RXDATA + 8-bit receive data + 0 + 8 + + + 0 + 255 + + + + + + + TXDR + TXDR + Transmit data register + 0x28 + 0x20 + read-write + 0x00000000 + + + TXDATA + 8-bit transmit data + 0 + 8 + + + 0 + 255 + + + + + + + + + I2C2 + 0x40005800 + + I2C2_EV + I2C2 event interrupt + 33 + + + I2C2_ER + I2C2 error interrupt + 34 + + + + I2C3 + 0x40005C00 + + I2C3_EV + I2C3 event interrupt + 72 + + + I2C3_ER + I2C3 error interrupt + 73 + + + + I2C4 + 0x40006000 + + I2C4_EV + I2C4 event interrupt + 95 + + + I2C4_ER + I2C4 Error interrupt + 96 + + + + RTC + Real-time clock + RTC + 0x40002800 + + 0x0 + 0x400 + registers + + + RTC_WKUP + RTC Tamper or TimeStamp /CSS on LSE through + EXTI line 19 interrupts + 3 + + + RTC_ALARM + RTC alarms through EXTI line 18 + interrupts + 41 + + + + TR + TR + time register + 0x0 + 0x20 + read-write + 0x00000000 + + + PM + AM/PM notation + 22 + 1 + + PM + read-write + + AM + AM or 24-hour format + 0 + + + PM + PM + 1 + + + + + HT + Hour tens in BCD format + 20 + 2 + + + 0 + 3 + + + + + HU + Hour units in BCD format + 16 + 4 + + + 0 + 15 + + + + + MNT + Minute tens in BCD format + 12 + 3 + + + 0 + 7 + + + + + MNU + Minute units in BCD format + 8 + 4 + + + 0 + 15 + + + + + ST + Second tens in BCD format + 4 + 3 + + + 0 + 7 + + + + + SU + Second units in BCD format + 0 + 4 + + + 0 + 15 + + + + + + + DR + DR + date register + 0x4 + 0x20 + read-write + 0x00002101 + + + YT + Year tens in BCD format + 20 + 4 + + + 0 + 15 + + + + + YU + Year units in BCD format + 16 + 4 + + + 0 + 15 + + + + + WDU + Week day units + 13 + 3 + + + 1 + 7 + + + + + MT + Month tens in BCD format + 12 + 1 + + MT + read-write + + Zero + Month tens is 0 + 0 + + + One + Month tens is 1 + 1 + + + + + MU + Month units in BCD format + 8 + 4 + + + 0 + 15 + + + + + DT + Date tens in BCD format + 4 + 2 + + + 0 + 3 + + + + + DU + Date units in BCD format + 0 + 4 + + + 0 + 15 + + + + + + + CR + CR + control register + 0x8 + 0x20 + read-write + 0x00000000 + + + WUCKSEL + Wakeup clock selection + 0 + 3 + + WUCKSEL + read-write + + Div16 + RTC/16 clock is selected + 0 + + + Div8 + RTC/8 clock is selected + 1 + + + Div4 + RTC/4 clock is selected + 2 + + + Div2 + RTC/2 clock is selected + 3 + + + ClockSpare + ck_spre (usually 1 Hz) clock is selected + 4 + + + ClockSpareWithOffset + ck_spre (usually 1 Hz) clock is selected and 2^16 is added to the WUT counter value + 6 + + + + + TSEDGE + Time-stamp event active edge + 3 + 1 + + TSEDGE + read-write + + RisingEdge + RTC_TS input rising edge generates a time-stamp event + 0 + + + FallingEdge + RTC_TS input falling edge generates a time-stamp event + 1 + + + + + REFCKON + Reference clock detection enable (50 or 60 Hz) + 4 + 1 + + REFCKON + read-write + + Disabled + RTC_REFIN detection disabled + 0 + + + Enabled + RTC_REFIN detection enabled + 1 + + + + + BYPSHAD + Bypass the shadow registers + 5 + 1 + + BYPSHAD + read-write + + ShadowReg + Calendar values (when reading from RTC_SSR, RTC_TR, and RTC_DR) are taken from the shadow registers, which are updated once every two RTCCLK cycles + 0 + + + BypassShadowReg + Calendar values (when reading from RTC_SSR, RTC_TR, and RTC_DR) are taken directly from the calendar counters + 1 + + + + + FMT + Hour format + 6 + 1 + + FMT + read-write + + Twenty_Four_Hour + 24 hour/day format + 0 + + + AM_PM + AM/PM hour format + 1 + + + + + ALRAE + Alarm A enable + 8 + 1 + + ALRAE + read-write + + Disabled + Alarm A disabled + 0 + + + Enabled + Alarm A enabled + 1 + + + + + ALRBE + Alarm B enable + 9 + 1 + + ALRBE + read-write + + Disabled + Alarm B disabled + 0 + + + Enabled + Alarm B enabled + 1 + + + + + WUTE + Wakeup timer enable + 10 + 1 + + WUTE + read-write + + Disabled + Wakeup timer disabled + 0 + + + Enabled + Wakeup timer enabled + 1 + + + + + TSE + Time stamp enable + 11 + 1 + + TSE + read-write + + Disabled + Timestamp disabled + 0 + + + Enabled + Timestamp enabled + 1 + + + + + ALRAIE + Alarm A interrupt enable + 12 + 1 + + ALRAIE + read-write + + Disabled + Alarm A interrupt disabled + 0 + + + Enabled + Alarm A interrupt enabled + 1 + + + + + ALRBIE + Alarm B interrupt enable + 13 + 1 + + ALRBIE + read-write + + Disabled + Alarm B Interrupt disabled + 0 + + + Enabled + Alarm B Interrupt enabled + 1 + + + + + WUTIE + Wakeup timer interrupt enable + 14 + 1 + + WUTIE + read-write + + Disabled + Wakeup timer interrupt disabled + 0 + + + Enabled + Wakeup timer interrupt enabled + 1 + + + + + TSIE + Time-stamp interrupt enable + 15 + 1 + + TSIE + read-write + + Disabled + Time-stamp Interrupt disabled + 0 + + + Enabled + Time-stamp Interrupt enabled + 1 + + + + + ADD1H + Add 1 hour (summer time change) + 16 + 1 + + ADD1HW + write + + Add1 + Adds 1 hour to the current time. This can be used for summer time change outside initialization mode + 1 + + + + + SUB1H + Subtract 1 hour (winter time change) + 17 + 1 + + SUB1HW + write + + Sub1 + Subtracts 1 hour to the current time. This can be used for winter time change outside initialization mode + 1 + + + + + BKP + Backup + 18 + 1 + + BKP + read-write + + DST_Not_Changed + Daylight Saving Time change has not been performed + 0 + + + DST_Changed + Daylight Saving Time change has been performed + 1 + + + + + COSEL + Calibration output selection + 19 + 1 + + COSEL + read-write + + CalFreq_512Hz + Calibration output is 512 Hz (with default prescaler setting) + 0 + + + CalFreq_1Hz + Calibration output is 1 Hz (with default prescaler setting) + 1 + + + + + POL + Output polarity + 20 + 1 + + POL + read-write + + High + The pin is high when ALRAF/ALRBF/WUTF is asserted (depending on OSEL[1:0]) + 0 + + + Low + The pin is low when ALRAF/ALRBF/WUTF is asserted (depending on OSEL[1:0]) + 1 + + + + + OSEL + Output selection + 21 + 2 + + OSEL + read-write + + Disabled + Output disabled + 0 + + + AlarmA + Alarm A output enabled + 1 + + + AlarmB + Alarm B output enabled + 2 + + + Wakeup + Wakeup output enabled + 3 + + + + + COE + Calibration output enable + 23 + 1 + + COE + read-write + + Disabled + Calibration output disabled + 0 + + + Enabled + Calibration output enabled + 1 + + + + + ITSE + timestamp on internal event enable + 24 + 1 + + + + + ISR + ISR + initialization and status register + 0xC + 0x20 + 0x00000007 + + + ALRAWF + Alarm A write flag + 0 + 1 + read-only + + ALRAWFR + read + + UpdateNotAllowed + Alarm update not allowed + 0 + + + UpdateAllowed + Alarm update allowed + 1 + + + + + ALRBWF + Alarm B write flag + 1 + 1 + read-only + + + + WUTWF + Wakeup timer write flag + 2 + 1 + read-only + + WUTWFR + read + + UpdateNotAllowed + Wakeup timer configuration update not allowed + 0 + + + UpdateAllowed + Wakeup timer configuration update allowed + 1 + + + + + SHPF + Shift operation pending + 3 + 1 + read-write + + SHPFR + read + + NoShiftPending + No shift operation is pending + 0 + + + ShiftPending + A shift operation is pending + 1 + + + + + INITS + Initialization status flag + 4 + 1 + read-only + + INITSR + read + + NotInitalized + Calendar has not been initialized + 0 + + + Initalized + Calendar has been initialized + 1 + + + + + RSF + Registers synchronization flag + 5 + 1 + read-write + zeroToClear + + RSFR + read + + NotSynced + Calendar shadow registers not yet synchronized + 0 + + + Synced + Calendar shadow registers synchronized + 1 + + + + RSFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + INITF + Initialization flag + 6 + 1 + read-only + + INITFR + read + + NotAllowed + Calendar registers update is not allowed + 0 + + + Allowed + Calendar registers update is allowed + 1 + + + + + INIT + Initialization mode + 7 + 1 + read-write + + INIT + read-write + + FreeRunningMode + Free running mode + 0 + + + InitMode + Initialization mode used to program time and date register (RTC_TR and RTC_DR), and prescaler register (RTC_PRER). Counters are stopped and start counting from the new value when INIT is reset. + 1 + + + + + ALRAF + Alarm A flag + 8 + 1 + read-write + zeroToClear + + ALRAFR + read + + Match + This flag is set by hardware when the time/date registers (RTC_TR and RTC_DR) match the Alarm A register (RTC_ALRMAR) + 1 + + + + ALRAFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + ALRBF + Alarm B flag + 9 + 1 + read-write + zeroToClear + + ALRBFR + read + + Match + This flag is set by hardware when the time/date registers (RTC_TR and RTC_DR) match the Alarm B register (RTC_ALRMBR) + 1 + + + + ALRBFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + WUTF + Wakeup timer flag + 10 + 1 + read-write + zeroToClear + + WUTFR + read + + Zero + This flag is set by hardware when the wakeup auto-reload counter reaches 0 + 1 + + + + WUTFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + TSF + Time-stamp flag + 11 + 1 + read-write + zeroToClear + + TSFR + read + + TimestampEvent + This flag is set by hardware when a time-stamp event occurs + 1 + + + + TSFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + TSOVF + Time-stamp overflow flag + 12 + 1 + read-write + zeroToClear + + TSOVFR + read + + Overflow + This flag is set by hardware when a time-stamp event occurs while TSF is already set + 1 + + + + TSOVFW + write + + Clear + This flag is cleared by software by writing 0 + 0 + + + + + TAMP1F + Tamper detection flag + 13 + 1 + read-write + zeroToClear + + TAMP1FR + read + + Tampered + This flag is set by hardware when a tamper detection event is detected on the RTC_TAMPx input + 1 + + + + TAMP1FW + write + + Clear + Flag cleared by software writing 0 + 0 + + + + + TAMP2F + RTC_TAMP2 detection flag + 14 + 1 + read-write + zeroToClear + + read + + + write + + + + TAMP3F + RTC_TAMP3 detection flag + 15 + 1 + read-write + zeroToClear + + read + + + write + + + + RECALPF + Recalibration pending Flag + 16 + 1 + read-only + + RECALPFR + read + + Pending + The RECALPF status flag is automatically set to 1 when software writes to the RTC_CALR register, indicating that the RTC_CALR register is blocked. When the new calibration settings are taken into account, this bit returns to 0 + 1 + + + + + + + PRER + PRER + prescaler register + 0x10 + 0x20 + read-write + 0x007F00FF + + + PREDIV_A + Asynchronous prescaler factor + 16 + 7 + + + 0 + 127 + + + + + PREDIV_S + Synchronous prescaler factor + 0 + 15 + + + 0 + 32767 + + + + + + + WUTR + WUTR + wakeup timer register + 0x14 + 0x20 + read-write + 0x0000FFFF + + + WUT + Wakeup auto-reload value bits + 0 + 16 + + + 0 + 65535 + + + + + + + 2 + 0x4 + A,B + ALRM%sR + ALRMAR + Alarm register + 0x1C + 0x20 + read-write + 0x00000000 + + + MSK4 + Alarm date mask + 31 + 1 + + + + WDSEL + Week day selection + 30 + 1 + + WDSEL + read-write + + DateUnits + DU[3:0] represents the date units + 0 + + + WeekDay + DU[3:0] represents the week day. DT[1:0] is don’t care. + 1 + + + + + DT + Date tens in BCD format + 28 + 2 + + + 0 + 3 + + + + + DU + Date units or day in BCD format + 24 + 4 + + + 0 + 15 + + + + + MSK3 + Alarm hours mask + 23 + 1 + + + + PM + AM/PM notation + 22 + 1 + + PM + read-write + + AM + AM or 24-hour format + 0 + + + PM + PM + 1 + + + + + HT + Hour tens in BCD format + 20 + 2 + + + 0 + 3 + + + + + HU + Hour units in BCD format + 16 + 4 + + + 0 + 15 + + + + + MSK2 + Alarm minutes mask + 15 + 1 + + + + MNT + Minute tens in BCD format + 12 + 3 + + + 0 + 7 + + + + + MNU + Minute units in BCD format + 8 + 4 + + + 0 + 15 + + + + + MSK1 + Alarm seconds mask + 7 + 1 + + MSK1 + read-write + + Mask + Alarm set if the date/day match + 0 + + + NotMask + Date/day don’t care in Alarm comparison + 1 + + + + + ST + Second tens in BCD format + 4 + 3 + + + 0 + 7 + + + + + SU + Second units in BCD format + 0 + 4 + + + 0 + 15 + + + + + + + WPR + WPR + write protection register + 0x24 + 0x20 + write-only + 0x00000000 + + + KEY + Write protection key + 0 + 8 + + + 0 + 255 + + + + + + + SSR + SSR + sub second register + 0x28 + 0x20 + read-only + 0x00000000 + + + SS + Sub second value + 0 + 16 + + + 0 + 65535 + + + + + + + SHIFTR + SHIFTR + shift control register + 0x2C + 0x20 + write-only + 0x00000000 + + + ADD1S + Add one second + 31 + 1 + + ADD1SW + write + + Add1 + Add one second to the clock/calendar + 1 + + + + + SUBFS + Subtract a fraction of a second + 0 + 15 + + + 0 + 32767 + + + + + + + TSTR + TSTR + time stamp time register + 0x30 + + + TSDR + TSDR + time stamp date register + 0x34 + + + TSSSR + TSSSR + timestamp sub second register + 0x38 + + + CALR + CALR + calibration register + 0x3C + 0x20 + read-write + 0x00000000 + + + CALP + Increase frequency of RTC by 488.5 ppm + 15 + 1 + + CALP + read-write + + NoChange + No RTCCLK pulses are added + 0 + + + IncreaseFreq + One RTCCLK pulse is effectively inserted every 2^11 pulses (frequency increased by 488.5 ppm) + 1 + + + + + CALW8 + Use an 8-second calibration cycle period + 14 + 1 + + CALW8 + read-write + + Eight_Second + When CALW8 is set to ‘1’, the 8-second calibration cycle period is selected + 1 + + + + + CALW16 + Use a 16-second calibration cycle period + 13 + 1 + + CALW16 + read-write + + Sixteen_Second + When CALW16 is set to ‘1’, the 16-second calibration cycle period is selected.This bit must not be set to ‘1’ if CALW8=1 + 1 + + + + + CALM + Calibration minus + 0 + 9 + + + 0 + 511 + + + + + + + TAMPCR + TAMPCR + tamper configuration register + 0x40 + 0x20 + read-write + 0x00000000 + + + TAMP1E + Tamper 1 detection enable + 0 + 1 + + + TAMP1TRG + Active level for tamper 1 + 1 + 1 + + + TAMPIE + Tamper interrupt enable + 2 + 1 + + + TAMP2E + Tamper 2 detection enable + 3 + 1 + + + TAMP2TRG + Active level for tamper 2 + 4 + 1 + + + TAMP3E + Tamper 3 detection enable + 5 + 1 + + + TAMP3TRG + Active level for tamper 3 + 6 + 1 + + + TAMPTS + Activate timestamp on tamper detection event + 7 + 1 + + + TAMPFREQ + Tamper sampling frequency + 8 + 3 + + + TAMPFLT + Tamper filter count + 11 + 2 + + + TAMPPRCH + Tamper precharge duration + 13 + 2 + + + TAMPPUDIS + TAMPER pull-up disable + 15 + 1 + + + TAMP1IE + Tamper 1 interrupt enable + 16 + 1 + + + TAMP1NOERASE + Tamper 1 no erase + 17 + 1 + + + TAMP1MF + Tamper 1 mask flag + 18 + 1 + + + TAMP2IE + Tamper 2 interrupt enable + 19 + 1 + + + TAMP2NOERASE + Tamper 2 no erase + 20 + 1 + + + TAMP2MF + Tamper 2 mask flag + 21 + 1 + + + TAMP3IE + Tamper 3 interrupt enable + 22 + 1 + + + TAMP3NOERASE + Tamper 3 no erase + 23 + 1 + + + TAMP3MF + Tamper 3 mask flag + 24 + 1 + + + + + 2 + 0x4 + A,B + ALRM%sSSR + ALRMASSR + Alarm sub-second register + 0x44 + 0x20 + read-write + 0x00000000 + + + MASKSS + Mask the most-significant bits starting at this bit + 24 + 4 + + + 0 + 15 + + + + + SS + Sub seconds value + 0 + 15 + + + 0 + 32767 + + + + + + + OR + OR + option register + 0x4C + 0x20 + read-write + 0x00000000 + + + RTC_ALARM_TYPE + RTC_ALARM on PC13 output type + 0 + 1 + + + RTC_OUT_RMP + RTC_OUT remap + 1 + 1 + + + + + 32 + 0x4 + 0-31 + BKP%sR + BKP0R + backup register + 0x50 + 0x20 + read-write + 0x00000000 + + + BKP + BKP + 0 + 32 + + + 0 + 4294967295 + + + + + + + + + USART6 + 0x40011400 + + USART6 + USART6 global interrupt + 71 + + + + USART1 + Universal synchronous asynchronous receiver transmitter + USART + 0x40011000 + + 0x0 + 0x400 + registers + + + USART1 + USART1 global interrupt + 37 + + + USART6 + USART6 global interrupt + 71 + + + UART4 + UART4 global interrupt + 52 + + + UART7 + UART7 global interrupt + 82 + + + + CR1 + CR1 + Control register 1 + 0x0 + 0x20 + read-write + 0x00000000 + + + M1 + Word length + 28 + 1 + + M1 + read-write + + M0 + Use M0 to set the data bits + 0 + + + Bit7 + 1 start bit, 7 data bits, n stop bits + 1 + + + + + EOBIE + End of Block interrupt enable + 27 + 1 + + EOBIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + A USART interrupt is generated when the EOBF flag is set in the ISR register + 1 + + + + + RTOIE + Receiver timeout interrupt enable + 26 + 1 + + RTOIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + An USART interrupt is generated when the RTOF bit is set in the ISR register + 1 + + + + + OVER8 + Oversampling mode + 15 + 1 + + OVER8 + read-write + + Oversampling16 + Oversampling by 16 + 0 + + + Oversampling8 + Oversampling by 8 + 1 + + + + + CMIE + Character match interrupt enable + 14 + 1 + + CMIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated when the CMF bit is set in the ISR register + 1 + + + + + MME + Mute mode enable + 13 + 1 + + MME + read-write + + Disabled + Receiver in active mode permanently + 0 + + + Enabled + Receiver can switch between mute mode and active mode + 1 + + + + + M0 + Word length + 12 + 1 + + M0 + read-write + + Bit8 + 1 start bit, 8 data bits, n stop bits + 0 + + + Bit9 + 1 start bit, 9 data bits, n stop bits + 1 + + + + + WAKE + Receiver wakeup method + 11 + 1 + + WAKE + read-write + + Idle + Idle line + 0 + + + Address + Address mask + 1 + + + + + PCE + Parity control enable + 10 + 1 + + PCE + read-write + + Disabled + Parity control disabled + 0 + + + Enabled + Parity control enabled + 1 + + + + + PS + Parity selection + 9 + 1 + + PS + read-write + + Even + Even parity + 0 + + + Odd + Odd parity + 1 + + + + + PEIE + PE interrupt enable + 8 + 1 + + PEIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated whenever PE=1 in the ISR register + 1 + + + + + TXEIE + interrupt enable + 7 + 1 + + TXEIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated whenever TXE=1 in the ISR register + 1 + + + + + TCIE + Transmission complete interrupt enable + 6 + 1 + + TCIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated whenever TC=1 in the ISR register + 1 + + + + + RXNEIE + RXNE interrupt enable + 5 + 1 + + RXNEIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated whenever ORE=1 or RXNE=1 in the ISR register + 1 + + + + + IDLEIE + IDLE interrupt enable + 4 + 1 + + IDLEIE + read-write + + Disabled + Interrupt is disabled + 0 + + + Enabled + Interrupt is generated whenever IDLE=1 in the ISR register + 1 + + + + + TE + Transmitter enable + 3 + 1 + + TE + read-write + + Disabled + Transmitter is disabled + 0 + + + Enabled + Transmitter is enabled + 1 + + + + + RE + Receiver enable + 2 + 1 + + RE + read-write + + Disabled + Receiver is disabled + 0 + + + Enabled + Receiver is enabled + 1 + + + + + UESM + USART enable in Stop mode + 1 + 1 + + UESM + read-write + + Disabled + USART not able to wake up the MCU from Stop mode + 0 + + + Enabled + USART able to wake up the MCU from Stop mode + 1 + + + + + UE + USART enable + 0 + 1 + + UE + read-write + + Disabled + UART is disabled + 0 + + + Enabled + UART is enabled + 1 + + + + + DEAT + Driver Enable assertion time + 21 + 5 + + + 0 + 31 + + + + + DEDT + Driver Enable de-assertion time + 16 + 5 + + + 0 + 31 + + + + + + + CR2 + CR2 + Control register 2 + 0x4 + 0x20 + read-write + 0x00000000 + + + RTOEN + Receiver timeout enable + 23 + 1 + + RTOEN + read-write + + Disabled + Receiver timeout feature disabled + 0 + + + Enabled + Receiver timeout feature enabled + 1 + + + + + ABREN + Auto baud rate enable + 20 + 1 + + ABREN + read-write + + Disabled + Auto baud rate detection is disabled + 0 + + + Enabled + Auto baud rate detection is enabled + 1 + + + + + MSBFIRST + Most significant bit first + 19 + 1 + + MSBFIRST + read-write + + LSB + data is transmitted/received with data bit 0 first, following the start bit + 0 + + + MSB + data is transmitted/received with MSB (bit 7/8/9) first, following the start bit + 1 + + + + + DATAINV + Binary data inversion + 18 + 1 + + DATAINV + read-write + + Positive + Logical data from the data register are send/received in positive/direct logic + 0 + + + Negative + Logical data from the data register are send/received in negative/inverse logic + 1 + + + + + TXINV + TX pin active level inversion + 17 + 1 + + TXINV + read-write + + Standard + TX pin signal works using the standard logic levels + 0 + + + Inverted + TX pin signal values are inverted + 1 + + + + + RXINV + RX pin active level inversion + 16 + 1 + + RXINV + read-write + + Standard + RX pin signal works using the standard logic levels + 0 + + + Inverted + RX pin signal values are inverted + 1 + + + + + SWAP + Swap TX/RX pins + 15 + 1 + + SWAP + read-write + + Standard + TX/RX pins are used as defined in standard pinout + 0 + + + Swapped + The TX and RX pins functions are swapped + 1 + + + + + LINEN + LIN mode enable + 14 + 1 + + LINEN + read-write + + Disabled + LIN mode disabled + 0 + + + Enabled + LIN mode enabled + 1 + + + + + STOP + STOP bits + 12 + 2 + + STOP + read-write + + Stop1 + 1 stop bit + 0 + + + Stop0p5 + 0.5 stop bit + 1 + + + Stop2 + 2 stop bit + 2 + + + Stop1p5 + 1.5 stop bit + 3 + + + + + CLKEN + Clock enable + 11 + 1 + + CLKEN + read-write + + Disabled + CK pin disabled + 0 + + + Enabled + CK pin enabled + 1 + + + + + CPOL + Clock polarity + 10 + 1 + + CPOL + read-write + + Low + Steady low value on CK pin outside transmission window + 0 + + + High + Steady high value on CK pin outside transmission window + 1 + + + + + CPHA + Clock phase + 9 + 1 + + CPHA + read-write + + First + The first clock transition is the first data capture edge + 0 + + + Second + The second clock transition is the first data capture edge + 1 + + + + + LBCL + Last bit clock pulse + 8 + 1 + + LBCL + read-write + + NotOutput + The clock pulse of the last data bit is not output to the CK pin + 0 + + + Output + The clock pulse of the last data bit is output to the CK pin + 1 + + + + + LBDIE + LIN break detection interrupt enable + 6 + 1 + + LBDIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + An interrupt is generated whenever LBDF=1 in the ISR register + 1 + + + + + LBDL + LIN break detection length + 5 + 1 + + LBDL + read-write + + Bit10 + 10-bit break detection + 0 + + + Bit11 + 11-bit break detection + 1 + + + + + ADDM7 + 7-bit Address Detection/4-bit Address Detection + 4 + 1 + + ADDM7 + read-write + + Bit4 + 4-bit address detection + 0 + + + Bit7 + 7-bit address detection + 1 + + + + + ABRMOD + Auto baud rate mode + 21 + 2 + + ABRMOD + read-write + + Start + Measurement of the start bit is used to detect the baud rate + 0 + + + Edge + Falling edge to falling edge measurement + 1 + + + Frame7F + 0x7F frame detection + 2 + + + Frame55 + 0x55 frame detection + 3 + + + + + ADD + Address of the USART node + 24 + 8 + + + 0 + 255 + + + + + + + CR3 + CR3 + Control register 3 + 0x8 + 0x20 + read-write + 0x00000000 + + + WUFIE + Wakeup from Stop mode interrupt enable + 22 + 1 + + WUFIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + An USART interrupt is generated whenever WUF=1 in the ISR register + 1 + + + + + WUS + Wakeup from Stop mode interrupt flag selection + 20 + 2 + + WUS + read-write + + Address + WUF active on address match + 0 + + + Start + WuF active on Start bit detection + 2 + + + RXNE + WUF active on RXNE + 3 + + + + + SCARCNT + Smartcard auto-retry count + 17 + 3 + + + 0 + 7 + + + + + DEP + Driver enable polarity selection + 15 + 1 + + DEP + read-write + + High + DE signal is active high + 0 + + + Low + DE signal is active low + 1 + + + + + DEM + Driver enable mode + 14 + 1 + + DEM + read-write + + Disabled + DE function is disabled + 0 + + + Enabled + The DE signal is output on the RTS pin + 1 + + + + + DDRE + DMA Disable on Reception Error + 13 + 1 + + DDRE + read-write + + NotDisabled + DMA is not disabled in case of reception error + 0 + + + Disabled + DMA is disabled following a reception error + 1 + + + + + OVRDIS + Overrun Disable + 12 + 1 + + OVRDIS + read-write + + Enabled + Overrun Error Flag, ORE, is set when received data is not read before receiving new data + 0 + + + Disabled + Overrun functionality is disabled. If new data is received while the RXNE flag is still set the ORE flag is not set and the new received data overwrites the previous content of the RDR register + 1 + + + + + ONEBIT + One sample bit method enable + 11 + 1 + + ONEBIT + read-write + + Sample3 + Three sample bit method + 0 + + + Sample1 + One sample bit method + 1 + + + + + CTSIE + CTS interrupt enable + 10 + 1 + + CTSIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + An interrupt is generated whenever CTSIF=1 in the ISR register + 1 + + + + + CTSE + CTS enable + 9 + 1 + + CTSE + read-write + + Disabled + CTS hardware flow control disabled + 0 + + + Enabled + CTS mode enabled, data is only transmitted when the CTS input is asserted + 1 + + + + + RTSE + RTS enable + 8 + 1 + + RTSE + read-write + + Disabled + RTS hardware flow control disabled + 0 + + + Enabled + RTS output enabled, data is only requested when there is space in the receive buffer + 1 + + + + + DMAT + DMA enable transmitter + 7 + 1 + + DMAT + read-write + + Disabled + DMA mode is disabled for transmission + 0 + + + Enabled + DMA mode is enabled for transmission + 1 + + + + + DMAR + DMA enable receiver + 6 + 1 + + DMAR + read-write + + Disabled + DMA mode is disabled for reception + 0 + + + Enabled + DMA mode is enabled for reception + 1 + + + + + SCEN + Smartcard mode enable + 5 + 1 + + SCEN + read-write + + Disabled + Smartcard Mode disabled + 0 + + + Enabled + Smartcard Mode enabled + 1 + + + + + NACK + Smartcard NACK enable + 4 + 1 + + NACK + read-write + + Disabled + NACK transmission in case of parity error is disabled + 0 + + + Enabled + NACK transmission during parity error is enabled + 1 + + + + + HDSEL + Half-duplex selection + 3 + 1 + + HDSEL + read-write + + NotSelected + Half duplex mode is not selected + 0 + + + Selected + Half duplex mode is selected + 1 + + + + + IRLP + Ir low-power + 2 + 1 + + IRLP + read-write + + Normal + Normal mode + 0 + + + LowPower + Low-power mode + 1 + + + + + IREN + Ir mode enable + 1 + 1 + + IREN + read-write + + Disabled + IrDA disabled + 0 + + + Enabled + IrDA enabled + 1 + + + + + EIE + Error interrupt enable + 0 + 1 + + EIE + read-write + + Disabled + Interrupt is inhibited + 0 + + + Enabled + An interrupt is generated when FE=1 or ORE=1 or NF=1 in the ISR register + 1 + + + + + + + BRR + BRR + Baud rate register + 0xC + 0x20 + read-write + 0x00000000 + + + BRR + DIV_Mantissa + 0 + 16 + + + 0 + 65535 + + + + + + + GTPR + GTPR + Guard time and prescaler register + 0x10 + 0x20 + read-write + 0x00000000 + + + GT + Guard time value + 8 + 8 + + + 0 + 255 + + + + + PSC + Prescaler value + 0 + 8 + + + 0 + 255 + + + + + + + RTOR + RTOR + Receiver timeout register + 0x14 + 0x20 + read-write + 0x00000000 + + + BLEN + Block Length + 24 + 8 + + + 0 + 255 + + + + + RTO + Receiver timeout value + 0 + 24 + + + 0 + 16777215 + + + + + + + RQR + RQR + Request register + 0x18 + 0x20 + write-only + 0x00000000 + + + TXFRQ + Transmit data flush request + 4 + 1 + + TXFRQ + write + + Discard + Set the TXE flags. This allows to discard the transmit data + 1 + + + + + RXFRQ + Receive data flush request + 3 + 1 + + RXFRQ + write + + Discard + clears the RXNE flag. This allows to discard the received data without reading it, and avoid an overrun condition + 1 + + + + + MMRQ + Mute mode request + 2 + 1 + + MMRQ + write + + Mute + Puts the USART in mute mode and sets the RWU flag + 1 + + + + + SBKRQ + Send break request + 1 + 1 + + SBKRQ + write + + Break + sets the SBKF flag and request to send a BREAK on the line, as soon as the transmit machine is available + 1 + + + + + ABRRQ + Auto baud rate request + 0 + 1 + + ABRRQ + write + + Request + resets the ABRF flag in the USART_ISR and request an automatic baud rate measurement on the next received data frame + 1 + + + + + + + ISR + ISR + Interrupt & status register + 0x1C + 0x20 + read-only + 0x000000C0 + + + REACK + REACK + 22 + 1 + + + TEACK + TEACK + 21 + 1 + + + WUF + WUF + 20 + 1 + + + RWU + RWU + 19 + 1 + + + SBKF + SBKF + 18 + 1 + + + CMF + CMF + 17 + 1 + + + BUSY + BUSY + 16 + 1 + + + ABRF + ABRF + 15 + 1 + + + ABRE + ABRE + 14 + 1 + + + EOBF + EOBF + 12 + 1 + + + RTOF + RTOF + 11 + 1 + + + CTS + CTS + 10 + 1 + + + CTSIF + CTSIF + 9 + 1 + + + LBDF + LBDF + 8 + 1 + + + TXE + TXE + 7 + 1 + + + TC + TC + 6 + 1 + + + RXNE + RXNE + 5 + 1 + + + IDLE + IDLE + 4 + 1 + + + ORE + ORE + 3 + 1 + + + NF + NF + 2 + 1 + + + FE + FE + 1 + 1 + + + PE + PE + 0 + 1 + + + + + ICR + ICR + Interrupt flag clear register + 0x20 + 0x20 + write-only + 0x00000000 + + + WUCF + Wakeup from Stop mode clear flag + 20 + 1 + + WUCF + write + + Clear + Clears the WUF flag in the ISR register + 1 + + + + + CMCF + Character match clear flag + 17 + 1 + + CMCF + write + + Clear + Clears the CMF flag in the ISR register + 1 + + + + + EOBCF + End of block clear flag + 12 + 1 + + EOBCF + write + + Clear + Clears the EOBF flag in the ISR register + 1 + + + + + RTOCF + Receiver timeout clear flag + 11 + 1 + + RTOCF + write + + Clear + Clears the RTOF flag in the ISR register + 1 + + + + + CTSCF + CTS clear flag + 9 + 1 + + CTSCF + write + + Clear + Clears the CTSIF flag in the ISR register + 1 + + + + + LBDCF + LIN break detection clear flag + 8 + 1 + + LBDCF + write + + Clear + Clears the LBDF flag in the ISR register + 1 + + + + + TCCF + Transmission complete clear flag + 6 + 1 + + TCCF + write + + Clear + Clears the TC flag in the ISR register + 1 + + + + + IDLECF + Idle line detected clear flag + 4 + 1 + + IDLECF + write + + Clear + Clears the IDLE flag in the ISR register + 1 + + + + + ORECF + Overrun error clear flag + 3 + 1 + + ORECF + write + + Clear + Clears the ORE flag in the ISR register + 1 + + + + + NCF + Noise detected clear flag + 2 + 1 + + NCF + write + + Clear + Clears the NF flag in the ISR register + 1 + + + + + FECF + Framing error clear flag + 1 + 1 + + FECF + write + + Clear + Clears the FE flag in the ISR register + 1 + + + + + PECF + Parity error clear flag + 0 + 1 + + PECF + write + + Clear + Clears the PE flag in the ISR register + 1 + + + + + + + RDR + RDR + Receive data register + 0x24 + 0x20 + read-only + 0x00000000 + + + RDR + Receive data value + 0 + 9 + + + 0 + 511 + + + + + + + TDR + TDR + Transmit data register + 0x28 + 0x20 + read-write + 0x00000000 + + + TDR + Transmit data value + 0 + 9 + + + 0 + 511 + + + + + + + + + USART3 + 0x40004800 + + USART3 + USART3 global interrupt + 39 + + + + USART2 + 0x40004400 + + USART2 + USART2 global interrupt + 38 + + + + UART5 + 0x40005000 + + UART5 + UART5 global interrupt + 53 + + + + UART4 + 0x40004C00 + + UART4 + UART4 global interrupt + 52 + + + + UART8 + 0x40007C00 + + UART8 + UART 8 global interrupt + 83 + + + + UART7 + 0x40007800 + + UART7 + UART7 global interrupt + 82 + + + + OTG_FS_GLOBAL + USB on the go full speed + USB_OTG_FS + 0x50000000 + + 0x0 + 0x400 + registers + + + + GOTGCTL + GOTGCTL + OTG_FS control and status register (OTG_FS_GOTGCTL) + 0x0 + 0x20 + 0x00000800 + + + SRQSCS + Session request success + 0 + 1 + read-only + + + SRQ + Session request + 1 + 1 + read-write + + + HNGSCS + Host negotiation success + 8 + 1 + read-only + + + HNPRQ + HNP request + 9 + 1 + read-write + + + HSHNPEN + Host set HNP enable + 10 + 1 + read-write + + + DHNPEN + Device HNP enabled + 11 + 1 + read-write + + + CIDSTS + Connector ID status + 16 + 1 + read-only + + + DBCT + Long/short debounce time + 17 + 1 + read-only + + + ASVLD + A-session valid + 18 + 1 + read-only + + + BSVLD + B-session valid + 19 + 1 + read-only + + + VBVALOEN + VBUS valid override enable + 2 + 1 + read-write + + + VBVALOVAL + VBUS valid override value + 3 + 1 + read-write + + + AVALOEN + A-peripheral session valid override enable + 4 + 1 + read-write + + + AVALOVAL + A-peripheral session valid override value + 5 + 1 + read-write + + + BVALOEN + B-peripheral session valid override enable + 6 + 1 + read-write + + + BVALOVAL + B-peripheral session valid override value + 7 + 1 + read-write + + + EHEN + Embedded host enable + 12 + 1 + read-write + + + OTGVER + OTG version + 20 + 1 + read-write + + + CURMOD + Current mode of operation + 21 + 1 + read-only + + + + + GOTGINT + GOTGINT + OTG_FS interrupt register (OTG_FS_GOTGINT) + 0x4 + 0x20 + read-write + 0x00000000 + + + SEDET + Session end detected + 2 + 1 + + + SRSSCHG + Session request success status change + 8 + 1 + + + HNSSCHG + Host negotiation success status change + 9 + 1 + + + HNGDET + Host negotiation detected + 17 + 1 + + + ADTOCHG + A-device timeout change + 18 + 1 + + + DBCDNE + Debounce done + 19 + 1 + + + IDCHNG + ID input pin changed + 20 + 1 + + + + + GAHBCFG + GAHBCFG + OTG_FS AHB configuration register (OTG_FS_GAHBCFG) + 0x8 + 0x20 + read-write + 0x00000000 + + + GINT + Global interrupt mask + 0 + 1 + + + TXFELVL + TxFIFO empty level + 7 + 1 + + + PTXFELVL + Periodic TxFIFO empty level + 8 + 1 + + + + + GUSBCFG + GUSBCFG + OTG_FS USB configuration register (OTG_FS_GUSBCFG) + 0xC + 0x20 + 0x00000A00 + + + TOCAL + FS timeout calibration + 0 + 3 + read-write + + + PHYSEL + Full Speed serial transceiver select + 6 + 1 + write-only + + + SRPCAP + SRP-capable + 8 + 1 + read-write + + + HNPCAP + HNP-capable + 9 + 1 + read-write + + + TRDT + USB turnaround time + 10 + 4 + read-write + + + FHMOD + Force host mode + 29 + 1 + read-write + + + FDMOD + Force device mode + 30 + 1 + read-write + + + + + GRSTCTL + GRSTCTL + OTG_FS reset register (OTG_FS_GRSTCTL) + 0x10 + 0x20 + 0x20000000 + + + CSRST + Core soft reset + 0 + 1 + read-write + + + HSRST + HCLK soft reset + 1 + 1 + read-write + + + FCRST + Host frame counter reset + 2 + 1 + read-write + + + RXFFLSH + RxFIFO flush + 4 + 1 + read-write + + + TXFFLSH + TxFIFO flush + 5 + 1 + read-write + + + TXFNUM + TxFIFO number + 6 + 5 + read-write + + + AHBIDL + AHB master idle + 31 + 1 + read-only + + + + + GINTSTS + GINTSTS + OTG_FS core interrupt register (OTG_FS_GINTSTS) + 0x14 + 0x20 + 0x04000020 + + + CMOD + Current mode of operation + 0 + 1 + read-only + + + MMIS + Mode mismatch interrupt + 1 + 1 + read-write + + + OTGINT + OTG interrupt + 2 + 1 + read-only + + + SOF + Start of frame + 3 + 1 + read-write + + + RXFLVL + RxFIFO non-empty + 4 + 1 + read-only + + + NPTXFE + Non-periodic TxFIFO empty + 5 + 1 + read-only + + + GINAKEFF + Global IN non-periodic NAK effective + 6 + 1 + read-only + + + GOUTNAKEFF + Global OUT NAK effective + 7 + 1 + read-only + + + ESUSP + Early suspend + 10 + 1 + read-write + + + USBSUSP + USB suspend + 11 + 1 + read-write + + + USBRST + USB reset + 12 + 1 + read-write + + + ENUMDNE + Enumeration done + 13 + 1 + read-write + + + ISOODRP + Isochronous OUT packet dropped interrupt + 14 + 1 + read-write + + + EOPF + End of periodic frame interrupt + 15 + 1 + read-write + + + IEPINT + IN endpoint interrupt + 18 + 1 + read-only + + + OEPINT + OUT endpoint interrupt + 19 + 1 + read-only + + + IISOIXFR + Incomplete isochronous IN transfer + 20 + 1 + read-write + + + IPXFR_INCOMPISOOUT + Incomplete periodic transfer(Host mode)/Incomplete isochronous OUT transfer(Device mode) + 21 + 1 + read-write + + + HPRTINT + Host port interrupt + 24 + 1 + read-only + + + HCINT + Host channels interrupt + 25 + 1 + read-only + + + PTXFE + Periodic TxFIFO empty + 26 + 1 + read-only + + + CIDSCHG + Connector ID status change + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt + 29 + 1 + read-write + + + SRQINT + Session request/new session detected interrupt + 30 + 1 + read-write + + + WKUPINT + Resume/remote wakeup detected interrupt + 31 + 1 + read-write + + + RSTDET + Reset detected interrupt + 23 + 1 + read-write + + + + + GINTMSK + GINTMSK + OTG_FS interrupt mask register (OTG_FS_GINTMSK) + 0x18 + 0x20 + 0x00000000 + + + MMISM + Mode mismatch interrupt mask + 1 + 1 + read-write + + + OTGINT + OTG interrupt mask + 2 + 1 + read-write + + + SOFM + Start of frame mask + 3 + 1 + read-write + + + RXFLVLM + Receive FIFO non-empty mask + 4 + 1 + read-write + + + NPTXFEM + Non-periodic TxFIFO empty mask + 5 + 1 + read-write + + + GINAKEFFM + Global non-periodic IN NAK effective mask + 6 + 1 + read-write + + + GONAKEFFM + Global OUT NAK effective mask + 7 + 1 + read-write + + + ESUSPM + Early suspend mask + 10 + 1 + read-write + + + USBSUSPM + USB suspend mask + 11 + 1 + read-write + + + USBRST + USB reset mask + 12 + 1 + read-write + + + ENUMDNEM + Enumeration done mask + 13 + 1 + read-write + + + ISOODRPM + Isochronous OUT packet dropped interrupt mask + 14 + 1 + read-write + + + EOPFM + End of periodic frame interrupt mask + 15 + 1 + read-write + + + IEPINT + IN endpoints interrupt mask + 18 + 1 + read-write + + + OEPINT + OUT endpoints interrupt mask + 19 + 1 + read-write + + + IISOIXFRM + Incomplete isochronous IN transfer mask + 20 + 1 + read-write + + + IPXFRM_IISOOXFRM + Incomplete periodic transfer mask(Host mode)/Incomplete isochronous OUT transfer mask(Device mode) + 21 + 1 + read-write + + + PRTIM + Host port interrupt mask + 24 + 1 + read-write + + + HCIM + Host channels interrupt mask + 25 + 1 + read-write + + + PTXFEM + Periodic TxFIFO empty mask + 26 + 1 + read-write + + + CIDSCHGM + Connector ID status change mask + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt mask + 29 + 1 + read-write + + + SRQIM + Session request/new session detected interrupt mask + 30 + 1 + read-write + + + WUIM + Resume/remote wakeup detected interrupt mask + 31 + 1 + read-write + + + RSTDETM + Reset detected interrupt mask + 23 + 1 + read-write + + + LPMIN + LPM interrupt mask + 27 + 1 + read-write + + + + + GRXSTSR_Device + GRXSTSR_Device + OTG_FS Receive status debug read(Device mode) + 0x1C + 0x20 + read-only + 0x00000000 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + GRXSTSR_Host + GRXSTSR_Host + OTG_FS Receive status debug read(Host mode) + GRXSTSR_Device + 0x1C + 0x20 + read-only + 0x00000000 + + + CHNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + STSPHST + Status phase start + 27 + 1 + + + + + GRXFSIZ + GRXFSIZ + OTG_FS Receive FIFO size register (OTG_FS_GRXFSIZ) + 0x24 + 0x20 + read-write + 0x00000200 + + + RXFD + RxFIFO depth + 0 + 16 + + + + + DIEPTXF0 + DIEPTXF0_Device + OTG_FS Endpoint 0 Transmit FIFO size + 0x28 + 0x20 + read-write + 0x00000200 + + + TX0FSA + Endpoint 0 transmit RAM start address + 0 + 16 + + + TX0FD + Endpoint 0 TxFIFO depth + 16 + 16 + + + + + HNPTXFSIZ_Host + HNPTXFSIZ_Host + OTG_FS Host non-periodic transmit FIFO size register + DIEPTXF0 + 0x28 + 0x20 + read-write + 0x00000200 + + + NPTXFSA + Non-periodic transmit RAM start address + 0 + 16 + + + NPTXFD + Non-periodic TxFIFO depth + 16 + 16 + + + + + HNPTXSTS + HNPTXSTS + OTG_FS non-periodic transmit FIFO/queue status register (OTG_FS_GNPTXSTS) + 0x2C + 0x20 + read-only + 0x00080200 + + + NPTXFSAV + Non-periodic TxFIFO space available + 0 + 16 + + + NPTQXSAV + Non-periodic transmit request queue space available + 16 + 8 + + + NPTXQTOP + Top of the non-periodic transmit request queue + 24 + 7 + + + + + GCCFG + GCCFG + OTG_FS general core configuration register (OTG_FS_GCCFG) + 0x38 + 0x20 + read-write + 0x00000000 + + + PWRDWN + Power down + 16 + 1 + + + BCDEN + Battery charging detector (BCD) enable + 17 + 1 + + + DCDEN + Data contact detection (DCD) mode enable + 18 + 1 + + + PDEN + Primary detection (PD) mode enable + 19 + 1 + + + SDEN + Secondary detection (SD) mode enable + 20 + 1 + + + VBDEN + USB VBUS detection enable + 21 + 1 + + + DCDET + Data contact detection (DCD) status + 0 + 1 + + + PDET + Primary detection (PD) status + 1 + 1 + + + SDET + Secondary detection (SD) status + 2 + 1 + + + PS2DET + DM pull-up detection status + 3 + 1 + + + + + CID + CID + core ID register + 0x3C + 0x20 + read-write + 0x00001000 + + + PRODUCT_ID + Product ID field + 0 + 32 + + + + + HPTXFSIZ + HPTXFSIZ + OTG_FS Host periodic transmit FIFO size register (OTG_FS_HPTXFSIZ) + 0x100 + 0x20 + read-write + 0x02000600 + + + PTXSA + Host periodic TxFIFO start address + 0 + 16 + + + PTXFSIZ + Host periodic TxFIFO depth + 16 + 16 + + + + + DIEPTXF1 + DIEPTXF1 + OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF1) + 0x104 + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFO2 transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF2 + DIEPTXF2 + OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF2) + 0x108 + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFO3 transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF3 + DIEPTXF3 + OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF3) + 0x10C + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFO4 transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + GRXSTSP_Device + GRXSTSP_Device + OTG status read and pop register (Device mode) + 0x20 + 0x20 + read-only + 0x02000400 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + GRXSTSP_Host + GRXSTSP_Host + OTG status read and pop register (Host mode) + GRXSTSP_Device + 0x20 + 0x20 + read-only + 0x02000400 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + STSPHST + Status phase start + 27 + 1 + + + + + GI2CCTL + GI2CCTL + OTG I2C access register + 0x30 + 0x20 + read-write + 0x02000400 + + + RWDATA + I2C Read/Write Data + 0 + 8 + + + REGADDR + I2C Register Address + 8 + 8 + + + ADDR + I2C Address + 16 + 7 + + + I2CEN + I2C Enable + 23 + 1 + + + ACK + I2C ACK + 24 + 1 + + + I2CDEVADR + I2C Device Address + 26 + 2 + + + I2CDATSE0 + I2C DatSe0 USB mode + 28 + 1 + + + RW + Read/Write Indicator + 30 + 1 + + + BSYDNE + I2C Busy/Done + 31 + 1 + + + + + GPWRDN + GPWRDN + OTG power down register + 0x58 + 0x20 + read-write + 0x02000400 + + + ADPMEN + ADP module enable + 0 + 1 + + + ADPIF + ADP interrupt flag + 23 + 1 + + + + + GADPCTL + GADPCTL + OTG ADP timer, control and status register + 0x60 + 0x20 + 0x02000400 + + + PRBDSCHG + Probe discharge + 0 + 2 + read-write + + + PRBDELTA + Probe delta + 2 + 2 + read-write + + + PRBPER + Probe period + 4 + 2 + read-write + + + RTIM + Ramp time + 6 + 11 + read-only + + + ENAPRB + Enable probe + 17 + 1 + read-write + + + ENASNS + Enable sense + 18 + 1 + read-write + + + ADPRST + ADP reset + 19 + 1 + read-only + + + ADPEN + ADP enable + 20 + 1 + read-write + + + ADPPRBIF + ADP probe interrupt flag + 21 + 1 + read-write + + + ADPSNSIF + ADP sense interrupt flag + 22 + 1 + read-write + + + ADPTOIF + ADP timeout interrupt flag + 23 + 1 + read-write + + + ADPPRBIM + ADP probe interrupt mask + 24 + 1 + read-write + + + ADPSNSIM + ADP sense interrupt mask + 25 + 1 + read-write + + + ADPTOIM + ADP timeout interrupt mask + 26 + 1 + read-write + + + AR + Access request + 27 + 2 + read-write + + + + + DIEPTXF4 + DIEPTXF4 + OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF4) + 0x110 + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint Tx FIFO depth + 16 + 16 + + + + + DIEPTXF5 + DIEPTXF5 + OTG_FS device IN endpoint transmit FIFO size register (OTG_FS_DIEPTXF5) + 0x114 + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint Tx FIFO depth + 16 + 16 + + + + + GLPMCFG + GLPMCFG + OTG core LPM configuration register + 0x54 + 0x20 + 0x00000000 + + + LPMEN + LPM support enable + 0 + 1 + read-write + + + LPMACK + LPM token acknowledge enable + 1 + 1 + read-write + + + BESL + Best effort service latency + 2 + 4 + read-write + + + REMWAKE + bRemoteWake value + 6 + 1 + read-write + + + L1SSEN + L1 Shallow Sleep enable + 7 + 1 + read-write + + + BESLTHRS + BESL threshold + 8 + 4 + read-write + + + L1DSEN + L1 deep sleep enable + 12 + 1 + read-write + + + LPMRST + LPM response + 13 + 2 + read-only + + + SLPSTS + Port sleep status + 15 + 1 + read-only + + + L1RSMOK + Sleep State Resume OK + 16 + 1 + read-only + + + LPMCHIDX + LPM Channel Index + 17 + 4 + read-write + + + LPMRCNT + LPM retry count + 21 + 3 + read-write + + + SNDLPM + Send LPM transaction + 24 + 1 + read-write + + + LPMRCNTSTS + LPM retry count status + 25 + 3 + read-only + + + ENBESL + Enable best effort service latency + 28 + 1 + read-write + + + + + + + OTG_FS_HOST + USB on the go full speed + USB_OTG_FS + 0x50000400 + + 0x0 + 0x400 + registers + + + + HCFG + HCFG + OTG_FS host configuration register (OTG_FS_HCFG) + 0x0 + 0x20 + 0x00000000 + + + FSLSPCS + FS/LS PHY clock select + 0 + 2 + read-write + + + FSLSS + FS- and LS-only support + 2 + 1 + read-write + + + + + HFIR + HFIR + OTG_FS Host frame interval register + 0x4 + 0x20 + read-write + 0x0000EA60 + + + FRIVL + Frame interval + 0 + 16 + + + + + HFNUM + HFNUM + OTG_FS host frame number/frame time remaining register (OTG_FS_HFNUM) + 0x8 + 0x20 + read-only + 0x00003FFF + + + FRNUM + Frame number + 0 + 16 + + + FTREM + Frame time remaining + 16 + 16 + + + + + HPTXSTS + HPTXSTS + OTG_FS_Host periodic transmit FIFO/queue status register (OTG_FS_HPTXSTS) + 0x10 + 0x20 + 0x00080100 + + + PTXFSAVL + Periodic transmit data FIFO space available + 0 + 16 + read-write + + + PTXQSAV + Periodic transmit request queue space available + 16 + 8 + read-only + + + PTXQTOP + Top of the periodic transmit request queue + 24 + 8 + read-only + + + + + HAINT + HAINT + OTG_FS Host all channels interrupt register + 0x14 + 0x20 + read-only + 0x00000000 + + + HAINT + Channel interrupts + 0 + 16 + + + + + HAINTMSK + HAINTMSK + OTG_FS host all channels interrupt mask register + 0x18 + 0x20 + read-write + 0x00000000 + + + HAINTM + Channel interrupt mask + 0 + 16 + + + + + HPRT + HPRT + OTG_FS host port control and status register (OTG_FS_HPRT) + 0x40 + 0x20 + 0x00000000 + + + PCSTS + Port connect status + 0 + 1 + read-only + + + PCDET + Port connect detected + 1 + 1 + read-write + + + PENA + Port enable + 2 + 1 + read-write + + + PENCHNG + Port enable/disable change + 3 + 1 + read-write + + + POCA + Port overcurrent active + 4 + 1 + read-only + + + POCCHNG + Port overcurrent change + 5 + 1 + read-write + + + PRES + Port resume + 6 + 1 + read-write + + + PSUSP + Port suspend + 7 + 1 + read-write + + + PRST + Port reset + 8 + 1 + read-write + + + PLSTS + Port line status + 10 + 2 + read-only + + + PPWR + Port power + 12 + 1 + read-write + + + PTCTL + Port test control + 13 + 4 + read-write + + + PSPD + Port speed + 17 + 2 + read-only + + + + + 12 + 0x20 + 0-11 + HC%s + Host channel + 0x100 + + CHAR + HCCHAR0 + OTG_FS host channel-0 characteristics register (OTG_FS_HCCHAR0) + 0x0 + 0x20 + read-write + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MCNT + Multicount + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + INT + HCINT0 + OTG_FS host channel-0 interrupt register (OTG_FS_HCINT0) + 0x8 + 0x20 + read-write + 0x00000000 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + STALL + STALL response received interrupt + 3 + 1 + + + NAK + NAK response received interrupt + 4 + 1 + + + ACK + ACK response received/transmitted interrupt + 5 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + INTMSK + HCINTMSK0 + OTG_FS host channel-0 mask register (OTG_FS_HCINTMSK0) + 0xC + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + STALLM + STALL response received interrupt mask + 3 + 1 + + + NAKM + NAK response received interrupt mask + 4 + 1 + + + ACKM + ACK response received/transmitted interrupt mask + 5 + 1 + + + NYET + response received interrupt mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + TSIZ + HCTSIZ0 + OTG_FS host channel-0 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + + + + OTG_FS_DEVICE + USB on the go full speed + USB_OTG_FS + 0x50000800 + + 0x0 + 0x400 + registers + + + + DCFG + DCFG + OTG_FS device configuration register (OTG_FS_DCFG) + 0x0 + 0x20 + read-write + 0x02200000 + + + DSPD + Device speed + 0 + 2 + + + NZLSOHSK + Non-zero-length status OUT handshake + 2 + 1 + + + DAD + Device address + 4 + 7 + + + PFIVL + Periodic frame interval + 11 + 2 + + + + + DCTL + DCTL + OTG_FS device control register (OTG_FS_DCTL) + 0x4 + 0x20 + 0x00000000 + + + RWUSIG + Remote wakeup signaling + 0 + 1 + read-write + + + SDIS + Soft disconnect + 1 + 1 + read-write + + + GINSTS + Global IN NAK status + 2 + 1 + read-only + + + GONSTS + Global OUT NAK status + 3 + 1 + read-only + + + TCTL + Test control + 4 + 3 + read-write + + + SGINAK + Set global IN NAK + 7 + 1 + read-write + + + CGINAK + Clear global IN NAK + 8 + 1 + read-write + + + SGONAK + Set global OUT NAK + 9 + 1 + read-write + + + CGONAK + Clear global OUT NAK + 10 + 1 + read-write + + + POPRGDNE + Power-on programming done + 11 + 1 + read-write + + + + + DSTS + DSTS + OTG_FS device status register (OTG_FS_DSTS) + 0x8 + 0x20 + read-only + 0x00000010 + + + SUSPSTS + Suspend status + 0 + 1 + + + ENUMSPD + Enumerated speed + 1 + 2 + + + EERR + Erratic error + 3 + 1 + + + FNSOF + Frame number of the received SOF + 8 + 14 + + + + + DIEPMSK + DIEPMSK + OTG_FS device IN endpoint common interrupt mask register (OTG_FS_DIEPMSK) + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + TOM + Timeout condition mask (Non-isochronous endpoints) + 3 + 1 + + + ITTXFEMSK + IN token received when TxFIFO empty mask + 4 + 1 + + + INEPNMM + IN token received with EP mismatch mask + 5 + 1 + + + INEPNEM + IN endpoint NAK effective mask + 6 + 1 + + + + + DOEPMSK + DOEPMSK + OTG_FS device OUT endpoint common interrupt mask register (OTG_FS_DOEPMSK) + 0x14 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + STUPM + SETUP phase done mask + 3 + 1 + + + OTEPDM + OUT token received when endpoint disabled mask + 4 + 1 + + + + + DAINT + DAINT + OTG_FS device all endpoints interrupt register (OTG_FS_DAINT) + 0x18 + 0x20 + read-only + 0x00000000 + + + IEPINT + IN endpoint interrupt bits + 0 + 16 + + + OEPINT + OUT endpoint interrupt bits + 16 + 16 + + + + + DAINTMSK + DAINTMSK + OTG_FS all endpoints interrupt mask register (OTG_FS_DAINTMSK) + 0x1C + 0x20 + read-write + 0x00000000 + + + IEPM + IN EP interrupt mask bits + 0 + 16 + + + OEPM + OUT EP interrupt mask bits + 16 + 16 + + + + + DVBUSDIS + DVBUSDIS + OTG_FS device VBUS discharge time register + 0x28 + 0x20 + read-write + 0x000017D7 + + + VBUSDT + Device VBUS discharge time + 0 + 16 + + + + + DVBUSPULSE + DVBUSPULSE + OTG_FS device VBUS pulsing time register + 0x2C + 0x20 + read-write + 0x000005B8 + + + DVBUSP + Device VBUS pulsing time + 0 + 12 + + + + + DIEPEMPMSK + DIEPEMPMSK + OTG_FS device IN endpoint FIFO empty interrupt mask register + 0x34 + 0x20 + read-write + 0x00000000 + + + INEPTXFEM + IN EP Tx FIFO empty interrupt mask bits + 0 + 16 + + + + + DIEP0 + Device IN endpoint 0 + 0x100 + + CTL + DIEPCTL0 + OTG_FS device control IN endpoint 0 control register (OTG_FS_DIEPCTL0) + 0x0 + 0x20 + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 2 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-only + + + STALL + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-only + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + INT + DIEPINT0 + device endpoint-x interrupt register + 0x8 + 0x20 + 0x00000080 + + + TXFE + TXFE + 7 + 1 + read-only + + + INEPNE + INEPNE + 6 + 1 + read-write + + + ITTXFE + ITTXFE + 4 + 1 + read-write + + + TOC + TOC + 3 + 1 + read-write + + + EPDISD + EPDISD + 1 + 1 + read-write + + + XFRC + XFRC + 0 + 1 + read-write + + + + + TSIZ + DIEPTSIZ0 + device endpoint-0 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + PKTCNT + Packet count + 19 + 2 + + + XFRSIZ + Transfer size + 0 + 7 + + + + + TXFSTS + DTXFSTS0 + OTG_FS device IN endpoint transmit FIFO status register + 0x18 + 0x20 + read-only + 0x00000000 + + + INEPTFSAV + IN endpoint TxFIFO space available + 0 + 16 + + + + + + 5 + 0x20 + 1-5 + DIEP%s + Device IN endpoint X + 0x120 + + CTL + DIEPCTL1 + OTG device endpoint-1 control register + 0x0 + 0x20 + 0x00000000 + + + EPENA + EPENA + 31 + 1 + read-write + + + EPDIS + EPDIS + 30 + 1 + read-write + + + SODDFRM_SD1PID + SODDFRM/SD1PID + 29 + 1 + write-only + + + SD0PID_SEVNFRM + SD0PID/SEVNFRM + 28 + 1 + write-only + + + SNAK + SNAK + 27 + 1 + write-only + + + CNAK + CNAK + 26 + 1 + write-only + + + TXFNUM + TXFNUM + 22 + 4 + read-write + + + STALL + STALL handshake + 21 + 1 + read-write + + + EPTYP + EPTYP + 18 + 2 + read-write + + + NAKSTS + NAKSTS + 17 + 1 + read-only + + + EONUM_DPID + EONUM/DPID + 16 + 1 + read-only + + + USBAEP + USBAEP + 15 + 1 + read-write + + + MPSIZ + MPSIZ + 0 + 11 + read-write + + + + + INT + DIEPINT1 + device endpoint-1 interrupt register + 0x8 + 0x20 + 0x00000080 + + + TXFE + TXFE + 7 + 1 + read-only + + + INEPNE + INEPNE + 6 + 1 + read-write + + + ITTXFE + ITTXFE + 4 + 1 + read-write + + + TOC + TOC + 3 + 1 + read-write + + + EPDISD + EPDISD + 1 + 1 + read-write + + + XFRC + XFRC + 0 + 1 + read-write + + + + + TSIZ + DIEPTSIZ1 + device endpoint-1 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + MCNT + Multi count + 29 + 2 + + + PKTCNT + Packet count + 19 + 10 + + + XFRSIZ + Transfer size + 0 + 19 + + + + + TXFSTS + DTXFSTS1 + OTG_FS device IN endpoint transmit FIFO status register + 0x18 + 0x20 + read-only + 0x00000000 + + + INEPTFSAV + IN endpoint TxFIFO space available + 0 + 16 + + + + + + DOEP0 + Device OUT endpoint 0 + 0x300 + + CTL + DOEPCTL0 + device endpoint-0 control register + 0x0 + 0x20 + 0x00008000 + + + EPENA + EPENA + 31 + 1 + read-write + + + EPDIS + EPDIS + 30 + 1 + read-only + + + SNAK + SNAK + 27 + 1 + write-only + + + CNAK + CNAK + 26 + 1 + write-only + + + STALL + STALL handshake + 21 + 1 + read-write + + + SNPM + SNPM + 20 + 1 + read-write + + + EPTYP + EPTYP + 18 + 2 + read-only + + + NAKSTS + NAKSTS + 17 + 1 + read-only + + + USBAEP + USBAEP + 15 + 1 + read-only + + + MPSIZ + MPSIZ + 0 + 2 + read-only + + + + + INT + DOEPINT0 + device endpoint-0 interrupt register + 0x8 + 0x20 + read-write + 0x00000080 + + + B2BSTUP + B2BSTUP + 6 + 1 + + + OTEPDIS + OTEPDIS + 4 + 1 + + + STUP + STUP + 3 + 1 + + + EPDISD + EPDISD + 1 + 1 + + + XFRC + XFRC + 0 + 1 + + + + + TSIZ + DOEPTSIZ0 + device OUT endpoint-0 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + STUPCNT + SETUP packet count + 29 + 2 + + + PKTCNT + Packet count + 19 + 1 + + + XFRSIZ + Transfer size + 0 + 7 + + + + + + 5 + 0x20 + 1-5 + DOEP%s + Device IN endpoint X + 0x320 + + CTL + DOEPCTL1 + device endpoint-1 control register + 0x0 + 0x20 + 0x00000000 + + + EPENA + EPENA + 31 + 1 + read-write + + + EPDIS + EPDIS + 30 + 1 + read-write + + + SODDFRM + SODDFRM + 29 + 1 + write-only + + + SD0PID_SEVNFRM + SD0PID/SEVNFRM + 28 + 1 + write-only + + + SNAK + SNAK + 27 + 1 + write-only + + + CNAK + CNAK + 26 + 1 + write-only + + + STALL + STALL handshake + 21 + 1 + read-write + + + SNPM + SNPM + 20 + 1 + read-write + + + EPTYP + EPTYP + 18 + 2 + read-write + + + NAKSTS + NAKSTS + 17 + 1 + read-only + + + EONUM_DPID + EONUM/DPID + 16 + 1 + read-only + + + USBAEP + USBAEP + 15 + 1 + read-write + + + MPSIZ + MPSIZ + 0 + 11 + read-write + + + + + INT + DOEPINT1 + device endpoint-1 interrupt register + 0x8 + 0x20 + read-write + 0x00000080 + + + B2BSTUP + B2BSTUP + 6 + 1 + + + OTEPDIS + OTEPDIS + 4 + 1 + + + STUP + STUP + 3 + 1 + + + EPDISD + EPDISD + 1 + 1 + + + XFRC + XFRC + 0 + 1 + + + + + TSIZ + DOEPTSIZ1 + device OUT endpoint-1 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + RXDPID_STUPCNT + Received data PID/SETUP packet count + 29 + 2 + + + PKTCNT + Packet count + 19 + 10 + + + XFRSIZ + Transfer size + 0 + 19 + + + + + + + + OTG_FS_PWRCLK + USB on the go full speed + USB_OTG_FS + 0x50000E00 + + 0x0 + 0x400 + registers + + + OTG_FS_WKUP + USB On-The-Go FS Wakeup through EXTI line + interrupt + 42 + + + OTG_FS + USB On The Go FS global + interrupt + 67 + + + + PCGCCTL + PCGCCTL + OTG_FS power and clock gating control register (OTG_FS_PCGCCTL) + 0x0 + 0x20 + read-write + 0x00000000 + + + STPPCLK + Stop PHY clock + 0 + 1 + + + GATEHCLK + Gate HCLK + 1 + 1 + + + PHYSUSP + PHY Suspended + 4 + 1 + + + + + + + OTG_HS_GLOBAL + USB on the go high speed + USB_OTG_HS + 0x40040000 + + 0x0 + 0x400 + registers + + + + GOTGCTL + GOTGCTL + OTG_HS control and status register + 0x0 + 0x20 + 0x00000800 + + + SRQSCS + Session request success + 0 + 1 + read-only + + + SRQ + Session request + 1 + 1 + read-write + + + HNGSCS + Host negotiation success + 8 + 1 + read-only + + + HNPRQ + HNP request + 9 + 1 + read-write + + + HSHNPEN + Host set HNP enable + 10 + 1 + read-write + + + DHNPEN + Device HNP enabled + 11 + 1 + read-write + + + CIDSTS + Connector ID status + 16 + 1 + read-only + + + DBCT + Long/short debounce time + 17 + 1 + read-only + + + ASVLD + A-session valid + 18 + 1 + read-only + + + BSVLD + B-session valid + 19 + 1 + read-only + + + EHEN + Embedded host enable + 12 + 1 + read-write + + + VBVALOEN + V_BUS valid override enable + 2 + 1 + read-write + + + VBVALOVAL + V_BUS valid override value + 3 + 1 + read-write + + + AVALOEN + A-peripheral session valid override enable + 4 + 1 + read-write + + + AVALOVAL + A-peripheral session valid override value + 5 + 1 + read-write + + + BVALOEN + B-peripheral session valid override enable + 6 + 1 + read-write + + + BVALOVAL + B-peripheral session valid override value + 7 + 1 + read-write + + + OTGVER + OTG version + 20 + 1 + read-write + + + CURMOD + Current mode of operation + 21 + 1 + read-only + + + + + GOTGINT + GOTGINT + OTG_HS interrupt register + 0x4 + 0x20 + read-write + 0x00000000 + + + SEDET + Session end detected + 2 + 1 + + + SRSSCHG + Session request success status change + 8 + 1 + + + HNSSCHG + Host negotiation success status change + 9 + 1 + + + HNGDET + Host negotiation detected + 17 + 1 + + + ADTOCHG + A-device timeout change + 18 + 1 + + + DBCDNE + Debounce done + 19 + 1 + + + IDCHNG + ID input pin changed + 20 + 1 + + + + + GAHBCFG + GAHBCFG + OTG_HS AHB configuration register + 0x8 + 0x20 + read-write + 0x00000000 + + + GINT + Global interrupt mask + 0 + 1 + + + HBSTLEN + Burst length/type + 1 + 4 + + + DMAEN + DMA enable + 5 + 1 + + + TXFELVL + TxFIFO empty level + 7 + 1 + + + PTXFELVL + Periodic TxFIFO empty level + 8 + 1 + + + + + GUSBCFG + GUSBCFG + OTG_HS USB configuration register + 0xC + 0x20 + 0x00000A00 + + + TOCAL + FS timeout calibration + 0 + 3 + read-write + + + PHYSEL + USB 2.0 high-speed ULPI PHY or USB 1.1 full-speed serial transceiver select + 6 + 1 + write-only + + + SRPCAP + SRP-capable + 8 + 1 + read-write + + + HNPCAP + HNP-capable + 9 + 1 + read-write + + + TRDT + USB turnaround time + 10 + 4 + read-write + + + PHYLPCS + PHY Low-power clock select + 15 + 1 + read-write + + + ULPIFSLS + ULPI FS/LS select + 17 + 1 + read-write + + + ULPIAR + ULPI Auto-resume + 18 + 1 + read-write + + + ULPICSM + ULPI Clock SuspendM + 19 + 1 + read-write + + + ULPIEVBUSD + ULPI External VBUS Drive + 20 + 1 + read-write + + + ULPIEVBUSI + ULPI external VBUS indicator + 21 + 1 + read-write + + + TSDPS + TermSel DLine pulsing selection + 22 + 1 + read-write + + + PCCI + Indicator complement + 23 + 1 + read-write + + + PTCI + Indicator pass through + 24 + 1 + read-write + + + ULPIIPD + ULPI interface protect disable + 25 + 1 + read-write + + + FHMOD + Forced host mode + 29 + 1 + read-write + + + FDMOD + Forced peripheral mode + 30 + 1 + read-write + + + + + GRSTCTL + GRSTCTL + OTG_HS reset register + 0x10 + 0x20 + 0x20000000 + + + CSRST + Core soft reset + 0 + 1 + read-write + + + HSRST + HCLK soft reset + 1 + 1 + read-write + + + FCRST + Host frame counter reset + 2 + 1 + read-write + + + RXFFLSH + RxFIFO flush + 4 + 1 + read-write + + + TXFFLSH + TxFIFO flush + 5 + 1 + read-write + + + TXFNUM + TxFIFO number + 6 + 5 + read-write + + + AHBIDL + AHB master idle + 31 + 1 + read-only + + + DMAREQ + DMA request signal enabled for USB OTG HS + 30 + 1 + read-only + + + + + GINTSTS + GINTSTS + OTG_HS core interrupt register + 0x14 + 0x20 + 0x04000020 + + + CMOD + Current mode of operation + 0 + 1 + read-only + + + MMIS + Mode mismatch interrupt + 1 + 1 + read-write + + + OTGINT + OTG interrupt + 2 + 1 + read-only + + + SOF + Start of frame + 3 + 1 + read-write + + + RXFLVL + RxFIFO nonempty + 4 + 1 + read-only + + + NPTXFE + Nonperiodic TxFIFO empty + 5 + 1 + read-only + + + GINAKEFF + Global IN nonperiodic NAK effective + 6 + 1 + read-only + + + BOUTNAKEFF + Global OUT NAK effective + 7 + 1 + read-only + + + ESUSP + Early suspend + 10 + 1 + read-write + + + USBSUSP + USB suspend + 11 + 1 + read-write + + + USBRST + USB reset + 12 + 1 + read-write + + + ENUMDNE + Enumeration done + 13 + 1 + read-write + + + ISOODRP + Isochronous OUT packet dropped interrupt + 14 + 1 + read-write + + + EOPF + End of periodic frame interrupt + 15 + 1 + read-write + + + IEPINT + IN endpoint interrupt + 18 + 1 + read-only + + + OEPINT + OUT endpoint interrupt + 19 + 1 + read-only + + + IISOIXFR + Incomplete isochronous IN transfer + 20 + 1 + read-write + + + PXFR_INCOMPISOOUT + Incomplete periodic transfer + 21 + 1 + read-write + + + DATAFSUSP + Data fetch suspended + 22 + 1 + read-write + + + HPRTINT + Host port interrupt + 24 + 1 + read-only + + + HCINT + Host channels interrupt + 25 + 1 + read-only + + + PTXFE + Periodic TxFIFO empty + 26 + 1 + read-only + + + CIDSCHG + Connector ID status change + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt + 29 + 1 + read-write + + + SRQINT + Session request/new session detected interrupt + 30 + 1 + read-write + + + WKUINT + Resume/remote wakeup detected interrupt + 31 + 1 + read-write + + + + + GINTMSK + GINTMSK + OTG_HS interrupt mask register + 0x18 + 0x20 + 0x00000000 + + + MMISM + Mode mismatch interrupt mask + 1 + 1 + read-write + + + OTGINT + OTG interrupt mask + 2 + 1 + read-write + + + SOFM + Start of frame mask + 3 + 1 + read-write + + + RXFLVLM + Receive FIFO nonempty mask + 4 + 1 + read-write + + + NPTXFEM + Nonperiodic TxFIFO empty mask + 5 + 1 + read-write + + + GINAKEFFM + Global nonperiodic IN NAK effective mask + 6 + 1 + read-write + + + GONAKEFFM + Global OUT NAK effective mask + 7 + 1 + read-write + + + ESUSPM + Early suspend mask + 10 + 1 + read-write + + + USBSUSPM + USB suspend mask + 11 + 1 + read-write + + + USBRST + USB reset mask + 12 + 1 + read-write + + + ENUMDNEM + Enumeration done mask + 13 + 1 + read-write + + + ISOODRPM + Isochronous OUT packet dropped interrupt mask + 14 + 1 + read-write + + + EOPFM + End of periodic frame interrupt mask + 15 + 1 + read-write + + + IEPINT + IN endpoints interrupt mask + 18 + 1 + read-write + + + OEPINT + OUT endpoints interrupt mask + 19 + 1 + read-write + + + IISOIXFRM + Incomplete isochronous IN transfer mask + 20 + 1 + read-write + + + PXFRM_IISOOXFRM + Incomplete periodic transfer mask + 21 + 1 + read-write + + + FSUSPM + Data fetch suspended mask + 22 + 1 + read-write + + + PRTIM + Host port interrupt mask + 24 + 1 + read-only + + + HCIM + Host channels interrupt mask + 25 + 1 + read-write + + + PTXFEM + Periodic TxFIFO empty mask + 26 + 1 + read-write + + + CIDSCHGM + Connector ID status change mask + 28 + 1 + read-write + + + DISCINT + Disconnect detected interrupt mask + 29 + 1 + read-write + + + SRQIM + Session request/new session detected interrupt mask + 30 + 1 + read-write + + + WUIM + Resume/remote wakeup detected interrupt mask + 31 + 1 + read-write + + + RSTDE + Reset detected interrupt mask + 23 + 1 + read-write + + + LPMINTM + LPM interrupt mask + 27 + 1 + read-write + + + + + GRXSTSR_Host + GRXSTSR_Host + OTG_HS Receive status debug read register (host mode) + 0x1C + 0x20 + read-only + 0x00000000 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + GRXSTSP_Host + GRXSTSP_Host + OTG_HS status read and pop register (host mode) + 0x20 + 0x20 + read-only + 0x00000000 + + + CHNUM + Channel number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + + + GRXFSIZ + GRXFSIZ + OTG_HS Receive FIFO size register + 0x24 + 0x20 + read-write + 0x00000200 + + + RXFD + RxFIFO depth + 0 + 16 + + + + + HNPTXFSIZ + HNPTXFSIZ_Host + OTG_HS nonperiodic transmit FIFO size register (host mode) + 0x28 + 0x20 + read-write + 0x00000200 + + + NPTXFSA + Nonperiodic transmit RAM start address + 0 + 16 + + + NPTXFD + Nonperiodic TxFIFO depth + 16 + 16 + + + + + DIEPTXF0 + DIEPTXF0_Device + Endpoint 0 transmit FIFO size (peripheral mode) + HNPTXFSIZ + 0x28 + 0x20 + read-write + 0x00000200 + + + TX0FSA + Endpoint 0 transmit RAM start address + 0 + 16 + + + TX0FD + Endpoint 0 TxFIFO depth + 16 + 16 + + + + + HNPTXSTS + GNPTXSTS + OTG_HS nonperiodic transmit FIFO/queue status register + 0x2C + 0x20 + read-only + 0x00080200 + + + NPTXFSAV + Nonperiodic TxFIFO space available + 0 + 16 + + + NPTQXSAV + Nonperiodic transmit request queue space available + 16 + 8 + + + NPTXQTOP + Top of the nonperiodic transmit request queue + 24 + 7 + + + + + GCCFG + GCCFG + OTG_HS general core configuration register + 0x38 + 0x20 + read-write + 0x00000000 + + + PWRDWN + Power down + 16 + 1 + + + BCDEN + Battery charging detector (BCD) enable + 17 + 1 + + + DCDEN + Data contact detection (DCD) mode enable + 18 + 1 + + + PDEN + Primary detection (PD) mode enable + 19 + 1 + + + SDEN + Secondary detection (SD) mode enable + 20 + 1 + + + VBDEN + USB VBUS detection enable + 21 + 1 + + + DCDET + Data contact detection (DCD) status + 0 + 1 + + + PDET + Primary detection (PD) status + 1 + 1 + + + SDET + Secondary detection (SD) status + 2 + 1 + + + PS2DET + DM pull-up detection status + 3 + 1 + + + + + CID + CID + OTG_HS core ID register + 0x3C + 0x20 + read-write + 0x00001200 + + + PRODUCT_ID + Product ID field + 0 + 32 + + + + + HPTXFSIZ + HPTXFSIZ + OTG_HS Host periodic transmit FIFO size register + 0x100 + 0x20 + read-write + 0x02000600 + + + PTXSA + Host periodic TxFIFO start address + 0 + 16 + + + PTXFD + Host periodic TxFIFO depth + 16 + 16 + + + + + DIEPTXF1 + DIEPTXF1 + OTG_HS device IN endpoint transmit FIFO size register + 0x104 + 0x20 + read-write + 0x02000400 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF2 + DIEPTXF2 + OTG_HS device IN endpoint transmit FIFO size register + 0x108 + 0x20 + read-write + 0x02000600 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF3 + DIEPTXF3 + OTG_HS device IN endpoint transmit FIFO size register + 0x10C + 0x20 + read-write + 0x02000800 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF4 + DIEPTXF4 + OTG_HS device IN endpoint transmit FIFO size register + 0x110 + 0x20 + read-write + 0x02000A00 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF5 + DIEPTXF5 + OTG_HS device IN endpoint transmit FIFO size register + 0x114 + 0x20 + read-write + 0x02000C00 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF6 + DIEPTXF6 + OTG_HS device IN endpoint transmit FIFO size register + 0x118 + 0x20 + read-write + 0x02000E00 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + DIEPTXF7 + DIEPTXF7 + OTG_HS device IN endpoint transmit FIFO size register + 0x11C + 0x20 + read-write + 0x02001000 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + GRXSTSR_Device + GRXSTSR_Device + OTG_HS Receive status debug read register (peripheral mode mode) + GRXSTSR_Host + 0x1C + 0x20 + read-only + 0x00000000 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + GRXSTSP_Device + GRXSTSP_Device + OTG_HS status read and pop register (peripheral mode) + GRXSTSP_Host + 0x20 + 0x20 + read-only + 0x00000000 + + + EPNUM + Endpoint number + 0 + 4 + + + BCNT + Byte count + 4 + 11 + + + DPID + Data PID + 15 + 2 + + + PKTSTS + Packet status + 17 + 4 + + + FRMNUM + Frame number + 21 + 4 + + + + + GLPMCFG + GLPMCFG + OTG core LPM configuration register + 0x54 + 0x20 + 0x00000000 + + + LPMEN + LPM support enable + 0 + 1 + read-write + + + LPMACK + LPM token acknowledge enable + 1 + 1 + read-write + + + BESL + Best effort service latency + 2 + 4 + read-only + + + REMWAKE + bRemoteWake value + 6 + 1 + read-only + + + L1SSEN + L1 Shallow Sleep enable + 7 + 1 + read-write + + + BESLTHRS + BESL threshold + 8 + 4 + read-write + + + L1DSEN + L1 deep sleep enable + 12 + 1 + read-write + + + LPMRST + LPM response + 13 + 2 + read-only + + + SLPSTS + Port sleep status + 15 + 1 + read-only + + + L1RSMOK + Sleep State Resume OK + 16 + 1 + read-only + + + LPMCHIDX + LPM Channel Index + 17 + 4 + read-write + + + LPMRCNT + LPM retry count + 21 + 3 + read-write + + + SNDLPM + Send LPM transaction + 24 + 1 + read-write + + + LPMRCNTSTS + LPM retry count status + 25 + 3 + read-only + + + ENBESL + Enable best effort service latency + 28 + 1 + read-write + + + + + DIEPTXF8 + OTG_HS device IN endpoint transmit FIFO size register + 0x120 + 0x20 + read-write + 0x02001200 + + + INEPTXSA + IN endpoint FIFOx transmit RAM start address + 0 + 16 + + + INEPTXFD + IN endpoint TxFIFO depth + 16 + 16 + + + + + + + OTG_HS_HOST + USB on the go high speed + USB_OTG_HS + 0x40040400 + + 0x0 + 0x400 + registers + + + + HCFG + HCFG + OTG_HS host configuration register + 0x0 + 0x20 + 0x00000000 + + + FSLSPCS + FS/LS PHY clock select + 0 + 2 + read-write + + + FSLSS + FS- and LS-only support + 2 + 1 + read-only + + + + + HFIR + HFIR + OTG_HS Host frame interval register + 0x4 + 0x20 + read-write + 0x0000EA60 + + + FRIVL + Frame interval + 0 + 16 + + + + + HFNUM + HFNUM + OTG_HS host frame number/frame time remaining register + 0x8 + 0x20 + read-only + 0x00003FFF + + + FRNUM + Frame number + 0 + 16 + + + FTREM + Frame time remaining + 16 + 16 + + + + + HPTXSTS + HPTXSTS + OTG_HS_Host periodic transmit FIFO/queue status register + 0x10 + 0x20 + 0x00080100 + + + PTXFSAVL + Periodic transmit data FIFO space available + 0 + 16 + read-write + + + PTXQSAV + Periodic transmit request queue space available + 16 + 8 + read-only + + + PTXQTOP + Top of the periodic transmit request queue + 24 + 8 + read-only + + + + + HAINT + HAINT + OTG_HS Host all channels interrupt register + 0x14 + 0x20 + read-only + 0x00000000 + + + HAINT + Channel interrupts + 0 + 16 + + + + + HAINTMSK + HAINTMSK + OTG_HS host all channels interrupt mask register + 0x18 + 0x20 + read-write + 0x00000000 + + + HAINTM + Channel interrupt mask + 0 + 16 + + + + + HPRT + HPRT + OTG_HS host port control and status register + 0x40 + 0x20 + 0x00000000 + + + PCSTS + Port connect status + 0 + 1 + read-only + + + PCDET + Port connect detected + 1 + 1 + read-write + + + PENA + Port enable + 2 + 1 + read-write + + + PENCHNG + Port enable/disable change + 3 + 1 + read-write + + + POCA + Port overcurrent active + 4 + 1 + read-only + + + POCCHNG + Port overcurrent change + 5 + 1 + read-write + + + PRES + Port resume + 6 + 1 + read-write + + + PSUSP + Port suspend + 7 + 1 + read-write + + + PRST + Port reset + 8 + 1 + read-write + + + PLSTS + Port line status + 10 + 2 + read-only + + + PPWR + Port power + 12 + 1 + read-write + + + PTCTL + Port test control + 13 + 4 + read-write + + + PSPD + Port speed + 17 + 2 + read-only + + + + + 16 + 0x20 + 0-15 + HC%s + Host channel + 0x100 + + CHAR + HCCHAR0 + OTG_HS host channel-0 characteristics register + 0x0 + 0x20 + read-write + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 11 + + + EPNUM + Endpoint number + 11 + 4 + + + EPDIR + Endpoint direction + 15 + 1 + + + LSDEV + Low-speed device + 17 + 1 + + + EPTYP + Endpoint type + 18 + 2 + + + MC + Multi Count (MC) / Error Count (EC) + 20 + 2 + + + DAD + Device address + 22 + 7 + + + ODDFRM + Odd frame + 29 + 1 + + + CHDIS + Channel disable + 30 + 1 + + + CHENA + Channel enable + 31 + 1 + + + + + SPLT + HCSPLT0 + OTG_HS host channel-0 split control register + 0x4 + 0x20 + read-write + 0x00000000 + + + PRTADDR + Port address + 0 + 7 + + + HUBADDR + Hub address + 7 + 7 + + + XACTPOS + XACTPOS + 14 + 2 + + + COMPLSPLT + Do complete split + 16 + 1 + + + SPLITEN + Split enable + 31 + 1 + + + + + INT + HCINT0 + OTG_HS host channel-11 interrupt register + 0x8 + 0x20 + read-write + 0x00000000 + + + XFRC + Transfer completed + 0 + 1 + + + CHH + Channel halted + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALL + STALL response received interrupt + 3 + 1 + + + NAK + NAK response received interrupt + 4 + 1 + + + ACK + ACK response received/transmitted interrupt + 5 + 1 + + + NYET + Response received interrupt + 6 + 1 + + + TXERR + Transaction error + 7 + 1 + + + BBERR + Babble error + 8 + 1 + + + FRMOR + Frame overrun + 9 + 1 + + + DTERR + Data toggle error + 10 + 1 + + + + + INTMSK + HCINTMSK0 + OTG_HS host channel-11 interrupt mask register + 0xC + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed mask + 0 + 1 + + + CHHM + Channel halted mask + 1 + 1 + + + AHBERR + AHB error + 2 + 1 + + + STALLM + STALL response received interrupt mask + 3 + 1 + + + NAKM + NAK response received interrupt mask + 4 + 1 + + + ACKM + ACK response received/transmitted interrupt mask + 5 + 1 + + + NYET + response received interrupt mask + 6 + 1 + + + TXERRM + Transaction error mask + 7 + 1 + + + BBERRM + Babble error mask + 8 + 1 + + + FRMORM + Frame overrun mask + 9 + 1 + + + DTERRM + Data toggle error mask + 10 + 1 + + + + + TSIZ + HCTSIZ0 + OTG_HS host channel-11 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + DPID + Data PID + 29 + 2 + + + + + DMA + HCDMA0 + OTG_HS host channel-0 DMA address register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAADDR + DMA address + 0 + 32 + + + + + + + + OTG_HS_DEVICE + USB on the go high speed + USB_OTG_HS + 0x40040800 + + 0x0 + 0x400 + registers + + + + DCFG + DCFG + OTG_HS device configuration register + 0x0 + 0x20 + read-write + 0x02200000 + + + DSPD + Device speed + 0 + 2 + + + NZLSOHSK + Nonzero-length status OUT handshake + 2 + 1 + + + DAD + Device address + 4 + 7 + + + PFIVL + Periodic (micro)frame interval + 11 + 2 + + + PERSCHIVL + Periodic scheduling interval + 24 + 2 + + + + + DCTL + DCTL + OTG_HS device control register + 0x4 + 0x20 + 0x00000000 + + + RWUSIG + Remote wakeup signaling + 0 + 1 + read-write + + + SDIS + Soft disconnect + 1 + 1 + read-write + + + GINSTS + Global IN NAK status + 2 + 1 + read-only + + + GONSTS + Global OUT NAK status + 3 + 1 + read-only + + + TCTL + Test control + 4 + 3 + read-write + + + SGINAK + Set global IN NAK + 7 + 1 + write-only + + + CGINAK + Clear global IN NAK + 8 + 1 + write-only + + + SGONAK + Set global OUT NAK + 9 + 1 + write-only + + + CGONAK + Clear global OUT NAK + 10 + 1 + write-only + + + POPRGDNE + Power-on programming done + 11 + 1 + read-write + + + + + DSTS + DSTS + OTG_HS device status register + 0x8 + 0x20 + read-only + 0x00000010 + + + SUSPSTS + Suspend status + 0 + 1 + + + ENUMSPD + Enumerated speed + 1 + 2 + + + EERR + Erratic error + 3 + 1 + + + FNSOF + Frame number of the received SOF + 8 + 14 + + + + + DIEPMSK + DIEPMSK + OTG_HS device IN endpoint common interrupt mask register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + TOM + Timeout condition mask (nonisochronous endpoints) + 3 + 1 + + + ITTXFEMSK + IN token received when TxFIFO empty mask + 4 + 1 + + + INEPNMM + IN token received with EP mismatch mask + 5 + 1 + + + INEPNEM + IN endpoint NAK effective mask + 6 + 1 + + + TXFURM + FIFO underrun mask + 8 + 1 + + + BIM + BNA interrupt mask + 9 + 1 + + + + + DOEPMSK + DOEPMSK + OTG_HS device OUT endpoint common interrupt mask register + 0x14 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + STUPM + SETUP phase done mask + 3 + 1 + + + OTEPDM + OUT token received when endpoint disabled mask + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets received mask + 6 + 1 + + + OPEM + OUT packet error mask + 8 + 1 + + + BOIM + BNA interrupt mask + 9 + 1 + + + + + DAINT + DAINT + OTG_HS device all endpoints interrupt register + 0x18 + 0x20 + read-only + 0x00000000 + + + IEPINT + IN endpoint interrupt bits + 0 + 16 + + + OEPINT + OUT endpoint interrupt bits + 16 + 16 + + + + + DAINTMSK + DAINTMSK + OTG_HS all endpoints interrupt mask register + 0x1C + 0x20 + read-write + 0x00000000 + + + IEPM + IN EP interrupt mask bits + 0 + 16 + + + OEPM + OUT EP interrupt mask bits + 16 + 16 + + + + + DVBUSDIS + DVBUSDIS + OTG_HS device VBUS discharge time register + 0x28 + 0x20 + read-write + 0x000017D7 + + + VBUSDT + Device VBUS discharge time + 0 + 16 + + + + + DVBUSPULSE + DVBUSPULSE + OTG_HS device VBUS pulsing time register + 0x2C + 0x20 + read-write + 0x000005B8 + + + DVBUSP + Device VBUS pulsing time + 0 + 12 + + + + + DTHRCTL + DTHRCTL + OTG_HS Device threshold control register + 0x30 + 0x20 + read-write + 0x00000000 + + + NONISOTHREN + Nonisochronous IN endpoints threshold enable + 0 + 1 + + + ISOTHREN + ISO IN endpoint threshold enable + 1 + 1 + + + TXTHRLEN + Transmit threshold length + 2 + 9 + + + RXTHREN + Receive threshold enable + 16 + 1 + + + RXTHRLEN + Receive threshold length + 17 + 9 + + + ARPEN + Arbiter parking enable + 27 + 1 + + + + + DIEPEMPMSK + DIEPEMPMSK + OTG_HS device IN endpoint FIFO empty interrupt mask register + 0x34 + 0x20 + read-write + 0x00000000 + + + INEPTXFEM + IN EP Tx FIFO empty interrupt mask bits + 0 + 16 + + + + + DEACHINT + DEACHINT + OTG_HS device each endpoint interrupt register + 0x38 + 0x20 + read-write + 0x00000000 + + + IEP1INT + IN endpoint 1interrupt bit + 1 + 1 + + + OEP1INT + OUT endpoint 1 interrupt bit + 17 + 1 + + + + + DEACHINTMSK + DEACHINTMSK + OTG_HS device each endpoint interrupt register mask + 0x3C + 0x20 + read-write + 0x00000000 + + + IEP1INTM + IN Endpoint 1 interrupt mask bit + 1 + 1 + + + OEP1INTM + OUT Endpoint 1 interrupt mask bit + 17 + 1 + + + + + DIEP0 + Device IN endpoint 0 + 0x100 + + CTL + DIEPCTL0 + OTG device endpoint-0 control register + 0x0 + 0x20 + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + STALL + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + INT + DIEPINT0 + OTG device endpoint-0 interrupt register + 0x8 + 0x20 + 0x00000080 + + + XFRC + Transfer completed interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + TSIZ + DIEPTSIZ0 + OTG_HS device IN endpoint 0 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 2 + + + + + DMA + OTG_HS device endpoint-0 DMA address register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAADDR + DMA address + 0 + 32 + + + + + TXFSTS + DTXFSTS0 + OTG_HS device IN endpoint transmit FIFO status register + 0x18 + 0x20 + read-only + 0x00000000 + + + INEPTFSAV + IN endpoint TxFIFO space avail + 0 + 16 + + + + + + 8 + 0x20 + 1-8 + DIEP%s + Device IN endpoint X + 0x120 + + CTL + DIEPCTL1 + OTG device endpoint-1 control register + 0x0 + 0x20 + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even/odd frame + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + STALL + STALL handshake + 21 + 1 + read-write + + + TXFNUM + TxFIFO number + 22 + 4 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + INT + DIEPINT1 + OTG device endpoint-1 interrupt register + 0x8 + 0x20 + 0x00000000 + + + XFRC + Transfer completed interrupt + 0 + 1 + read-write + + + EPDISD + Endpoint disabled interrupt + 1 + 1 + read-write + + + TOC + Timeout condition + 3 + 1 + read-write + + + ITTXFE + IN token received when TxFIFO is empty + 4 + 1 + read-write + + + INEPNE + IN endpoint NAK effective + 6 + 1 + read-write + + + TXFE + Transmit FIFO empty + 7 + 1 + read-only + + + TXFIFOUDRN + Transmit Fifo Underrun + 8 + 1 + read-write + + + BNA + Buffer not available interrupt + 9 + 1 + read-write + + + PKTDRPSTS + Packet dropped status + 11 + 1 + read-write + + + BERR + Babble error interrupt + 12 + 1 + read-write + + + NAK + NAK interrupt + 13 + 1 + read-write + + + + + TSIZ + DIEPTSIZ1 + OTG_HS device endpoint transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + MCNT + Multi count + 29 + 2 + + + + + DMA + DIEPDMA1 + OTG_HS device endpoint-1 DMA address register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAADDR + DMA address + 0 + 32 + + + + + TXFSTS + DTXFSTS1 + OTG_HS device IN endpoint transmit FIFO status register + 0x18 + 0x20 + read-only + 0x00000000 + + + INEPTFSAV + IN endpoint TxFIFO space avail + 0 + 16 + + + + + + DOEP0 + Device OUT endpoint 0 + 0x300 + + CTL + DOEPCTL0 + OTG_HS device control OUT endpoint 0 control register + 0x0 + 0x20 + 0x00008000 + + + MPSIZ + Maximum packet size + 0 + 2 + read-only + + + USBAEP + USB active endpoint + 15 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-only + + + SNPM + Snoop mode + 20 + 1 + read-write + + + STALL + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-only + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + INT + DOEPINT0 + OTG_HS device endpoint-0 interrupt register + 0x8 + 0x20 + read-write + 0x00000080 + + + XFRC + Transfer completed interrupt + 0 + 1 + + + EPDISD + Endpoint disabled interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + TSIZ + DOEPTSIZ0 + OTG_HS device endpoint-0 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 7 + + + PKTCNT + Packet count + 19 + 1 + + + STUPCNT + SETUP packet count + 29 + 2 + + + + + DMA + OTG_HS device endpoint-0 DMA address register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAADDR + DMA address + 0 + 32 + + + + + + 8 + 0x20 + 1-8 + DOEP%s + Device IN endpoint X + 0x320 + + CTL + DOEPCTL1 + OTG device endpoint-1 control register + 0x0 + 0x20 + 0x00000000 + + + MPSIZ + Maximum packet size + 0 + 11 + read-write + + + USBAEP + USB active endpoint + 15 + 1 + read-write + + + EONUM_DPID + Even odd frame/Endpoint data PID + 16 + 1 + read-only + + + NAKSTS + NAK status + 17 + 1 + read-only + + + EPTYP + Endpoint type + 18 + 2 + read-write + + + SNPM + Snoop mode + 20 + 1 + read-write + + + STALL + STALL handshake + 21 + 1 + read-write + + + CNAK + Clear NAK + 26 + 1 + write-only + + + SNAK + Set NAK + 27 + 1 + write-only + + + SD0PID_SEVNFRM + Set DATA0 PID/Set even frame + 28 + 1 + write-only + + + SODDFRM + Set odd frame + 29 + 1 + write-only + + + EPDIS + Endpoint disable + 30 + 1 + read-write + + + EPENA + Endpoint enable + 31 + 1 + read-write + + + + + INT + DOEPINT1 + OTG_HS device endpoint-1 interrupt register + 0x8 + 0x20 + read-write + 0x00000000 + + + XFRC + Transfer completed interrupt + 0 + 1 + + + EPDISD + Endpoint disabled interrupt + 1 + 1 + + + STUP + SETUP phase done + 3 + 1 + + + OTEPDIS + OUT token received when endpoint disabled + 4 + 1 + + + B2BSTUP + Back-to-back SETUP packets received + 6 + 1 + + + NYET + NYET interrupt + 14 + 1 + + + + + DMA + OTG_HS device endpoint-1 DMA address register + 0x14 + 0x20 + read-write + 0x00000000 + + + DMAADDR + DMA address + 0 + 32 + + + + + TSIZ + DOEPTSIZ1 + OTG_HS device endpoint-1 transfer size register + 0x10 + 0x20 + read-write + 0x00000000 + + + XFRSIZ + Transfer size + 0 + 19 + + + PKTCNT + Packet count + 19 + 10 + + + RXDPID_STUPCNT + Received data PID/SETUP packet count + 29 + 2 + + + + + + DIEPEACHMSK1 + 0x44 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + AHBERRM + AHB error mask + 2 + 1 + + + TOM + Timeout condition mask (Non-isochronous endpoints) + 3 + 1 + + + ITTXFEMSK + IN token received when TxFIFO empty mask + 4 + 1 + + + INEPNEM + IN endpoint NAK effective mask + 6 + 1 + + + TXFURM + FIFO underrun mask + 8 + 1 + + + BNAM + BNA interrupt mask + 9 + 1 + + + NAKM + NAK interrupt mask + 13 + 1 + + + + + DOEPEACHMSK1 + 0x84 + 0x20 + read-write + 0x00000000 + + + XFRCM + Transfer completed interrupt mask + 0 + 1 + + + EPDM + Endpoint disabled interrupt mask + 1 + 1 + + + AHBERRM + AHB error mask + 2 + 1 + + + STUPM + SETUP phase done mask + 3 + 1 + + + OTEPDM + OUT token received when endpoint disabled mask + 4 + 1 + + + B2BSTUPM + Back-to-back SETUP packets received mask + 6 + 1 + + + OUTPKTERRM + Out packet error mask + 8 + 1 + + + BNAM + BNA interrupt mask + 9 + 1 + + + BERRM + Babble error interrupt mask + 12 + 1 + + + NAKMSK + NAK interrupt mask + 13 + 1 + + + NYETMSK + NYET interrupt mask + 14 + 1 + + + + + + + OTG_HS_PWRCLK + USB on the go high speed + USB_OTG_HS + 0x40040E00 + + 0x0 + 0x3F200 + registers + + + OTG_HS_EP1_OUT + USB On The Go HS End Point 1 Out global + interrupt + 74 + + + OTG_HS_EP1_IN + USB On The Go HS End Point 1 In global + interrupt + 75 + + + OTG_HS_WKUP + USB On The Go HS Wakeup through EXTI + interrupt + 76 + + + OTG_HS + USB On The Go HS global + interrupt + 77 + + + + PCGCR + PCGCR + Power and clock gating control register + 0x0 + 0x20 + read-write + 0x00000000 + + + STPPCLK + Stop PHY clock + 0 + 1 + + + GATEHCLK + Gate HCLK + 1 + 1 + + + PHYSUSP + PHY suspended + 4 + 1 + + + + + + + NVIC + Nested Vectored Interrupt Controller + NVIC + 0xE000E100 + + 0x0 + 0x369 + registers + + + + ISER0 + ISER0 + Interrupt Set-Enable Register + 0x0 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER1 + ISER1 + Interrupt Set-Enable Register + 0x4 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ISER2 + ISER2 + Interrupt Set-Enable Register + 0x8 + 0x20 + read-write + 0x00000000 + + + SETENA + SETENA + 0 + 32 + + + + + ICER0 + ICER0 + Interrupt Clear-Enable Register + 0x80 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER1 + ICER1 + Interrupt Clear-Enable Register + 0x84 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ICER2 + ICER2 + Interrupt Clear-Enable Register + 0x88 + 0x20 + read-write + 0x00000000 + + + CLRENA + CLRENA + 0 + 32 + + + + + ISPR0 + ISPR0 + Interrupt Set-Pending Register + 0x100 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR1 + ISPR1 + Interrupt Set-Pending Register + 0x104 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ISPR2 + ISPR2 + Interrupt Set-Pending Register + 0x108 + 0x20 + read-write + 0x00000000 + + + SETPEND + SETPEND + 0 + 32 + + + + + ICPR0 + ICPR0 + Interrupt Clear-Pending Register + 0x180 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR1 + ICPR1 + Interrupt Clear-Pending Register + 0x184 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + ICPR2 + ICPR2 + Interrupt Clear-Pending Register + 0x188 + 0x20 + read-write + 0x00000000 + + + CLRPEND + CLRPEND + 0 + 32 + + + + + IABR0 + IABR0 + Interrupt Active Bit Register + 0x200 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR1 + IABR1 + Interrupt Active Bit Register + 0x204 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IABR2 + IABR2 + Interrupt Active Bit Register + 0x208 + 0x20 + read-only + 0x00000000 + + + ACTIVE + ACTIVE + 0 + 32 + + + + + IPR0 + IPR0 + Interrupt Priority Register + 0x300 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR1 + IPR1 + Interrupt Priority Register + 0x304 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR2 + IPR2 + Interrupt Priority Register + 0x308 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR3 + IPR3 + Interrupt Priority Register + 0x30C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR4 + IPR4 + Interrupt Priority Register + 0x310 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR5 + IPR5 + Interrupt Priority Register + 0x314 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR6 + IPR6 + Interrupt Priority Register + 0x318 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR7 + IPR7 + Interrupt Priority Register + 0x31C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR8 + IPR8 + Interrupt Priority Register + 0x320 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR9 + IPR9 + Interrupt Priority Register + 0x324 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR10 + IPR10 + Interrupt Priority Register + 0x328 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR11 + IPR11 + Interrupt Priority Register + 0x32C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR12 + IPR12 + Interrupt Priority Register + 0x330 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR13 + IPR13 + Interrupt Priority Register + 0x334 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR14 + IPR14 + Interrupt Priority Register + 0x338 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR15 + IPR15 + Interrupt Priority Register + 0x33C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR16 + IPR16 + Interrupt Priority Register + 0x340 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR17 + IPR17 + Interrupt Priority Register + 0x344 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR18 + IPR18 + Interrupt Priority Register + 0x348 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR19 + IPR19 + Interrupt Priority Register + 0x34C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR20 + IPR20 + Interrupt Priority Register + 0x350 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR21 + IPR21 + Interrupt Priority Register + 0x354 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR22 + IPR22 + Interrupt Priority Register + 0x358 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR23 + IPR23 + Interrupt Priority Register + 0x35C + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR24 + IPR24 + Interrupt Priority Register + 0x360 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + IPR25 + IPR25 + Interrupt Priority Register + 0x364 + 0x20 + read-write + 0x00000000 + + + IPR_N0 + IPR_N0 + 0 + 8 + + + IPR_N1 + IPR_N1 + 8 + 8 + + + IPR_N2 + IPR_N2 + 16 + 8 + + + IPR_N3 + IPR_N3 + 24 + 8 + + + + + + + MPU + Memory protection unit + MPU + 0xE000ED90 + + 0x0 + 0x15 + registers + + + + TYPER + TYPER + MPU type register + 0x0 + 0x20 + read-only + 0x00000800 + + + SEPARATE + Separate flag + 0 + 1 + + + DREGION + Number of MPU data regions + 8 + 8 + + + IREGION + Number of MPU instruction regions + 16 + 8 + + + + + CTRL + CTRL + MPU control register + 0x4 + 0x20 + read-only + 0x00000000 + + + ENABLE + Enables the MPU + 0 + 1 + + + HFNMIENA + Enables the operation of MPU during hard fault + 1 + 1 + + + PRIVDEFENA + Enable priviliged software access to default memory map + 2 + 1 + + + + + RNR + RNR + MPU region number register + 0x8 + 0x20 + read-write + 0x00000000 + + + REGION + MPU region + 0 + 8 + + + + + RBAR + RBAR + MPU region base address register + 0xC + 0x20 + read-write + 0x00000000 + + + REGION + MPU region field + 0 + 4 + + + VALID + MPU region number valid + 4 + 1 + + + ADDR + Region base address field + 5 + 27 + + + + + RASR + RASR + MPU region attribute and size register + 0x10 + 0x20 + read-write + 0x00000000 + + + ENABLE + Region enable bit. + 0 + 1 + + + SIZE + Size of the MPU protection region + 1 + 5 + + + SRD + Subregion disable bits + 8 + 8 + + + B + memory attribute + 16 + 1 + + + C + memory attribute + 17 + 1 + + + S + Shareable memory attribute + 18 + 1 + + + TEX + memory attribute + 19 + 3 + + + AP + Access permission + 24 + 3 + + + XN + Instruction access disable bit + 28 + 1 + + + + + + + STK + SysTick timer + STK + 0xE000E010 + + 0x0 + 0x11 + registers + + + + CSR + CSR + SysTick control and status register + 0x0 + 0x20 + read-write + 0x00000000 + + + ENABLE + Counter enable + 0 + 1 + + + TICKINT + SysTick exception request enable + 1 + 1 + + + CLKSOURCE + Clock source selection + 2 + 1 + + + COUNTFLAG + COUNTFLAG + 16 + 1 + + + + + RVR + RVR + SysTick reload value register + 0x4 + 0x20 + read-write + 0x00000000 + + + RELOAD + RELOAD value + 0 + 24 + + + + + CVR + CVR + SysTick current value register + 0x8 + 0x20 + read-write + 0x00000000 + + + CURRENT + Current counter value + 0 + 24 + + + + + CALIB + CALIB + SysTick calibration value register + 0xC + 0x20 + read-write + 0x00000000 + + + TENMS + Calibration value + 0 + 24 + + + SKEW + SKEW flag: Indicates whether the TENMS value is exact + 30 + 1 + + + NOREF + NOREF flag. Reads as zero + 31 + 1 + + + + + + + NVIC_STIR + Nested vectored interrupt controller + NVIC + 0xE000EF00 + + 0x0 + 0x5 + registers + + + + STIR + STIR + Software trigger interrupt register + 0x0 + 0x20 + read-write + 0x00000000 + + + INTID + Software generated interrupt ID + 0 + 9 + + + + + + + FPU_CPACR + Floating point unit CPACR + FPU + 0xE000ED88 + + 0x0 + 0x5 + registers + + + + CPACR + CPACR + Coprocessor access control register + 0x0 + 0x20 + read-write + 0x00000000 + + + CP + CP + 20 + 4 + + + + + + + SCB_ACTRL + System control block ACTLR + SCB + 0xE000E008 + + 0x0 + 0x5 + registers + + + + ACTRL + ACTRL + Auxiliary control register + 0x0 + 0x20 + read-write + 0x00000000 + + + DISFOLD + DISFOLD + 2 + 1 + + + FPEXCODIS + FPEXCODIS + 10 + 1 + + + DISRAMODE + DISRAMODE + 11 + 1 + + + DISITMATBFLUSH + DISITMATBFLUSH + 12 + 1 + + + + + + + FPU + Floting point unit + FPU + 0xE000EF34 + + 0x0 + 0xD + registers + + + FPU + Floating point unit interrupt + 81 + + + + FPCCR + FPCCR + Floating-point context control register + 0x0 + 0x20 + read-write + 0x00000000 + + + LSPACT + LSPACT + 0 + 1 + + + USER + USER + 1 + 1 + + + THREAD + THREAD + 3 + 1 + + + HFRDY + HFRDY + 4 + 1 + + + MMRDY + MMRDY + 5 + 1 + + + BFRDY + BFRDY + 6 + 1 + + + MONRDY + MONRDY + 8 + 1 + + + LSPEN + LSPEN + 30 + 1 + + + ASPEN + ASPEN + 31 + 1 + + + + + FPCAR + FPCAR + Floating-point context address register + 0x4 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Location of unpopulated floating-point + 3 + 29 + + + + + FPSCR + FPSCR + Floating-point status control register + 0x8 + 0x20 + read-write + 0x00000000 + + + IOC + Invalid operation cumulative exception bit + 0 + 1 + + + DZC + Division by zero cumulative exception bit. + 1 + 1 + + + OFC + Overflow cumulative exception bit + 2 + 1 + + + UFC + Underflow cumulative exception bit + 3 + 1 + + + IXC + Inexact cumulative exception bit + 4 + 1 + + + IDC + Input denormal cumulative exception bit. + 7 + 1 + + + RMode + Rounding Mode control field + 22 + 2 + + + FZ + Flush-to-zero mode control bit: + 24 + 1 + + + DN + Default NaN mode control bit + 25 + 1 + + + AHP + Alternative half-precision control bit + 26 + 1 + + + V + Overflow condition code flag + 28 + 1 + + + C + Carry condition code flag + 29 + 1 + + + Z + Zero condition code flag + 30 + 1 + + + N + Negative condition code flag + 31 + 1 + + + + + + + SCB + System control block + SCB + 0xE000ED00 + + 0x0 + 0x41 + registers + + + + CPUID + CPUID + CPUID base register + 0x0 + 0x20 + read-only + 0x410FC241 + + + Revision + Revision number + 0 + 4 + + + PartNo + Part number of the processor + 4 + 12 + + + Constant + Reads as 0xF + 16 + 4 + + + Variant + Variant number + 20 + 4 + + + Implementer + Implementer code + 24 + 8 + + + + + ICSR + ICSR + Interrupt control and state register + 0x4 + 0x20 + read-write + 0x00000000 + + + VECTACTIVE + Active vector + 0 + 9 + + + RETTOBASE + Return to base level + 11 + 1 + + + VECTPENDING + Pending vector + 12 + 7 + + + ISRPENDING + Interrupt pending flag + 22 + 1 + + + PENDSTCLR + SysTick exception clear-pending bit + 25 + 1 + + + PENDSTSET + SysTick exception set-pending bit + 26 + 1 + + + PENDSVCLR + PendSV clear-pending bit + 27 + 1 + + + PENDSVSET + PendSV set-pending bit + 28 + 1 + + + NMIPENDSET + NMI set-pending bit. + 31 + 1 + + + + + VTOR + VTOR + Vector table offset register + 0x8 + 0x20 + read-write + 0x00000000 + + + TBLOFF + Vector table base offset field + 9 + 21 + + + + + AIRCR + AIRCR + Application interrupt and reset control register + 0xC + 0x20 + read-write + 0x00000000 + + + VECTRESET + VECTRESET + 0 + 1 + + + VECTCLRACTIVE + VECTCLRACTIVE + 1 + 1 + + + SYSRESETREQ + SYSRESETREQ + 2 + 1 + + + PRIGROUP + PRIGROUP + 8 + 3 + + + ENDIANESS + ENDIANESS + 15 + 1 + + + VECTKEYSTAT + Register key + 16 + 16 + + + + + SCR + SCR + System control register + 0x10 + 0x20 + read-write + 0x00000000 + + + SLEEPONEXIT + SLEEPONEXIT + 1 + 1 + + + SLEEPDEEP + SLEEPDEEP + 2 + 1 + + + SEVEONPEND + Send Event on Pending bit + 4 + 1 + + + + + CCR + CCR + Configuration and control register + 0x14 + 0x20 + read-write + 0x00000000 + + + NONBASETHRDENA + Configures how the processor enters Thread mode + 0 + 1 + + + USERSETMPEND + USERSETMPEND + 1 + 1 + + + UNALIGN__TRP + UNALIGN_ TRP + 3 + 1 + + + DIV_0_TRP + DIV_0_TRP + 4 + 1 + + + BFHFNMIGN + BFHFNMIGN + 8 + 1 + + + STKALIGN + STKALIGN + 9 + 1 + + + DC + DC + 16 + 1 + + + IC + IC + 17 + 1 + + + BP + BP + 18 + 1 + + + + + SHPR1 + SHPR1 + System handler priority registers + 0x18 + 0x20 + read-write + 0x00000000 + + + PRI_4 + Priority of system handler 4 + 0 + 8 + + + PRI_5 + Priority of system handler 5 + 8 + 8 + + + PRI_6 + Priority of system handler 6 + 16 + 8 + + + + + SHPR2 + SHPR2 + System handler priority registers + 0x1C + 0x20 + read-write + 0x00000000 + + + PRI_11 + Priority of system handler 11 + 24 + 8 + + + + + SHPR3 + SHPR3 + System handler priority registers + 0x20 + 0x20 + read-write + 0x00000000 + + + PRI_14 + Priority of system handler 14 + 16 + 8 + + + PRI_15 + Priority of system handler 15 + 24 + 8 + + + + + SHCRS + SHCRS + System handler control and state register + 0x24 + 0x20 + read-write + 0x00000000 + + + MEMFAULTACT + Memory management fault exception active bit + 0 + 1 + + + BUSFAULTACT + Bus fault exception active bit + 1 + 1 + + + USGFAULTACT + Usage fault exception active bit + 3 + 1 + + + SVCALLACT + SVC call active bit + 7 + 1 + + + MONITORACT + Debug monitor active bit + 8 + 1 + + + PENDSVACT + PendSV exception active bit + 10 + 1 + + + SYSTICKACT + SysTick exception active bit + 11 + 1 + + + USGFAULTPENDED + Usage fault exception pending bit + 12 + 1 + + + MEMFAULTPENDED + Memory management fault exception pending bit + 13 + 1 + + + BUSFAULTPENDED + Bus fault exception pending bit + 14 + 1 + + + SVCALLPENDED + SVC call pending bit + 15 + 1 + + + MEMFAULTENA + Memory management fault enable bit + 16 + 1 + + + BUSFAULTENA + Bus fault enable bit + 17 + 1 + + + USGFAULTENA + Usage fault enable bit + 18 + 1 + + + + + CFSR_UFSR_BFSR_MMFSR + CFSR_UFSR_BFSR_MMFSR + Configurable fault status register + 0x28 + 0x20 + read-write + 0x00000000 + + + IACCVIOL + IACCVIOL + 0 + 1 + + + DACCVIOL + DACCVIOL + 1 + 1 + + + MUNSTKERR + MUNSTKERR + 3 + 1 + + + MSTKERR + MSTKERR + 4 + 1 + + + MLSPERR + MLSPERR + 5 + 1 + + + MMARVALID + MMARVALID + 7 + 1 + + + IBUSERR + Instruction bus error + 8 + 1 + + + PRECISERR + Precise data bus error + 9 + 1 + + + IMPRECISERR + Imprecise data bus error + 10 + 1 + + + UNSTKERR + Bus fault on unstacking for a return from exception + 11 + 1 + + + STKERR + Bus fault on stacking for exception entry + 12 + 1 + + + LSPERR + Bus fault on floating-point lazy state preservation + 13 + 1 + + + BFARVALID + Bus Fault Address Register (BFAR) valid flag + 15 + 1 + + + UNDEFINSTR + Undefined instruction usage fault + 16 + 1 + + + INVSTATE + Invalid state usage fault + 17 + 1 + + + INVPC + Invalid PC load usage fault + 18 + 1 + + + NOCP + No coprocessor usage fault. + 19 + 1 + + + UNALIGNED + Unaligned access usage fault + 24 + 1 + + + DIVBYZERO + Divide by zero usage fault + 25 + 1 + + + + + HFSR + HFSR + Hard fault status register + 0x2C + 0x20 + read-write + 0x00000000 + + + VECTTBL + Vector table hard fault + 1 + 1 + + + FORCED + Forced hard fault + 30 + 1 + + + DEBUG_VT + Reserved for Debug use + 31 + 1 + + + + + MMFAR + MMFAR + Memory management fault address register + 0x34 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Memory management fault address + 0 + 32 + + + + + BFAR + BFAR + Bus fault address register + 0x38 + 0x20 + read-write + 0x00000000 + + + ADDRESS + Bus fault address + 0 + 32 + + + + + + + PF + Processor features + PF + 0xE000ED78 + + 0x0 + 0xD + registers + + + + CLIDR + CLIDR + Cache Level ID register + 0x0 + 0x20 + read-only + 0x09000003 + + + CL1 + CL1 + 0 + 3 + + + CL2 + CL2 + 3 + 3 + + + CL3 + CL3 + 6 + 3 + + + CL4 + CL4 + 9 + 3 + + + CL5 + CL5 + 12 + 3 + + + CL6 + CL6 + 15 + 3 + + + CL7 + CL7 + 18 + 3 + + + LoUIS + LoUIS + 21 + 3 + + + LoC + LoC + 24 + 3 + + + LoU + LoU + 27 + 3 + + + + + CTR + CTR + Cache Type register + 0x4 + 0x20 + read-only + 0x8303C003 + + + _IminLine + IminLine + 0 + 4 + + + DMinLine + DMinLine + 16 + 4 + + + ERG + ERG + 20 + 4 + + + CWG + CWG + 24 + 4 + + + Format + Format + 29 + 3 + + + + + CCSIDR + CCSIDR + Cache Size ID register + 0x8 + 0x20 + read-only + 0x00000000 + + + LineSize + LineSize + 0 + 3 + + + Associativity + Associativity + 3 + 10 + + + NumSets + NumSets + 13 + 15 + + + WA + WA + 28 + 1 + + + RA + RA + 29 + 1 + + + WB + WB + 30 + 1 + + + WT + WT + 31 + 1 + + + + + + + AC + Access control + AC + 0xE000EF90 + + 0x0 + 0x1D + registers + + + + ITCMCR + ITCMCR + Instruction and Data Tightly-Coupled Memory Control Registers + 0x0 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + DTCMCR + DTCMCR + Instruction and Data Tightly-Coupled Memory Control Registers + 0x4 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + RMW + RMW + 1 + 1 + + + RETEN + RETEN + 2 + 1 + + + SZ + SZ + 3 + 4 + + + + + AHBPCR + AHBPCR + AHBP Control register + 0x8 + 0x20 + read-write + 0x00000000 + + + EN + EN + 0 + 1 + + + SZ + SZ + 1 + 3 + + + + + CACR + CACR + Auxiliary Cache Control register + 0xC + 0x20 + read-write + 0x00000000 + + + SIWT + SIWT + 0 + 1 + + + ECCEN + ECCEN + 1 + 1 + + + FORCEWT + FORCEWT + 2 + 1 + + + + + AHBSCR + AHBSCR + AHB Slave Control register + 0x10 + 0x20 + read-write + 0x00000000 + + + CTL + CTL + 0 + 2 + + + TPRI + TPRI + 2 + 9 + + + INITCOUNT + INITCOUNT + 11 + 5 + + + + + ABFSR + ABFSR + Auxiliary Bus Fault Status register + 0x18 + 0x20 + read-write + 0x00000000 + + + ITCM + ITCM + 0 + 1 + + + DTCM + DTCM + 1 + 1 + + + AHBP + AHBP + 2 + 1 + + + AXIM + AXIM + 3 + 1 + + + EPPB + EPPB + 4 + 1 + + + AXIMTYPE + AXIMTYPE + 8 + 2 + + + + + + + \ No newline at end of file diff --git a/Tools/Toolsets/stm32f74x-lcd.json b/Tools/Toolsets/stm32f74x-lcd.json new file mode 100644 index 00000000..d9c1790b --- /dev/null +++ b/Tools/Toolsets/stm32f74x-lcd.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.0", + "swiftCompiler": { + "extraCLIOptions": [ + "-Xcc", "-D__APPLE__", + "-Xcc", "-D__MACH__", + "-Xfrontend", "-disable-stack-protector", + "-enable-experimental-feature", "Embedded" + ] + }, + "linker": { + "extraCLIOptions": [ + "-arch", "armv7em", + "-dead_strip", + "-static", + "-e", "_reset", + "-no_zero_fill_sections", + "-segalign", "4", + "-segaddr", "__VECTORS", "0x00200000", + "-seg1addr", "0x00200200", + "-pagezero_size", "0", + "-allow_dead_duplicates" + ] + } +} diff --git a/Tools/Toolsets/stm32f74x.json b/Tools/Toolsets/stm32f74x.json new file mode 100644 index 00000000..1dc368ac --- /dev/null +++ b/Tools/Toolsets/stm32f74x.json @@ -0,0 +1,25 @@ +{ + "schemaVersion": "1.0", + "swiftCompiler": { + "extraCLIOptions": [ + "-Xcc", "-D__APPLE__", + "-Xcc", "-D__MACH__", + "-Xfrontend", "-disable-stack-protector", + "-enable-experimental-feature", "Embedded" + ] + }, + "linker": { + "extraCLIOptions": [ + "-arch", "armv7em", + "-dead_strip", + "-static", + "-e", "_reset", + "-no_zero_fill_sections", + "-segalign", "4", + "-segaddr", "__VECTORS", "0x20010000", + "-seg1addr", "0x20010200", + "-pagezero_size", "0", + "-allow_dead_duplicates" + ] + } +} diff --git a/Tools/elf2hex.py b/Tools/elf2hex.py new file mode 100755 index 00000000..37d360e4 --- /dev/null +++ b/Tools/elf2hex.py @@ -0,0 +1,104 @@ +#! /usr/bin/env -S uv run --script + +# /// script +# dependencies = [ +# "pyelftools==0.31", +# ] +# /// + +# This source file is part of the Swift open source project +# +# Copyright (c) 2023 Apple Inc. and the Swift project authors. +# Licensed under Apache License v2.0 with Runtime Library Exception +# +# See https://swift.org/LICENSE.txt for license information + +# +# elf2hex -- Converts a statically-linked ELF executable into an "Intel HEX" +# file format suitable for flashing onto some embedded devices. +# +# Usage: +# $ elf2hex.py [--symbol-map ] +# +# Example: +# $ elf2hex.py ./blink ./blink.hex --symbol-map ./blink.symbols +# + +import argparse +import json +import pathlib + +import elftools.elf.elffile + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('input') + parser.add_argument('output') + parser.add_argument('--symbol-map') + args = parser.parse_args() + + inf = open(args.input, "rb") + outf = open(args.output, "wb") + + def emitrecord(record): + checksum = 0 + pos = 0 + while pos < len(record): + checksum = (checksum + int(record[pos:pos + 2], 16)) % 256 + pos += 2 + checksum = (256 - checksum) % 256 + outf.write((":" + record + f"{checksum:02X}" + "\n").encode()) + + def emit(vmaddr, data): + pos = 0 + while pos < len(data): + chunklen = min(16, len(data) - pos) + chunk = data[pos:pos + chunklen] + chunkhex = chunk.hex().upper() + + assert vmaddr < 0x100000000, f"vmaddr: {vmaddr:x}" + vmaddr_high = (vmaddr >> 16) & 0xffff + recordtype = "04" # Extended Linear Address + emitrecord(f"{2:02X}{0:04X}{recordtype}{vmaddr_high:04X}") + + vmaddr_low = vmaddr & 0xffff + recordtype = "00" # Data + emitrecord(f"{chunklen:02X}{vmaddr_low:04X}{recordtype}{chunkhex}") + + pos += chunklen + vmaddr += chunklen + + elffile = elftools.elf.elffile.ELFFile(inf) + for segment in elffile.iter_segments(): + if segment.header.p_type != "PT_LOAD": + continue + vmaddr = segment.header.p_paddr + data = segment.data() + emit(segment.header.p_paddr, data) + + chunklen = 0 + vmaddr = 0 + recordtype = "01" # EOF + emitrecord(f"{chunklen:02X}{vmaddr:04X}{recordtype}") + + symbol_map = {} + symtab_section = elffile.get_section_by_name(".symtab") + for s in symtab_section.iter_symbols(): + if s.entry.st_info.type not in ["STT_FUNC", "STT_NOTYPE"]: + continue + if s.entry.st_shndx == "SHN_ABS": + continue + if s.name == "": + continue + symbol_map[s.name] = s.entry.st_value + + if args.symbol_map is not None: + pathlib.Path(args.symbol_map).write_text(json.dumps(symbol_map)) + + inf.close() + outf.close() + + +if __name__ == '__main__': + main() diff --git a/Tools/macho2bin.py b/Tools/macho2bin.py index 6ba74b3c..842b4b2f 100755 --- a/Tools/macho2bin.py +++ b/Tools/macho2bin.py @@ -1,4 +1,10 @@ -#!/usr/bin/env python3 -u -tt +#! /usr/bin/env -S uv run --script + +# /// script +# dependencies = [ +# "macholib==1.16.3", +# ] +# /// # This source file is part of the Swift open source project # diff --git a/Tools/macho2uf2.py b/Tools/macho2uf2.py index 5043b4a8..39acd6c3 100755 --- a/Tools/macho2uf2.py +++ b/Tools/macho2uf2.py @@ -1,4 +1,10 @@ -#!/usr/bin/env python3 -u -tt +#! /usr/bin/env -S uv run --script + +# /// script +# dependencies = [ +# "macholib==1.16.3", +# ] +# /// # This source file is part of the Swift open source project # diff --git a/Tools/requirements.txt b/Tools/requirements.txt deleted file mode 100644 index 08708ebc..00000000 --- a/Tools/requirements.txt +++ /dev/null @@ -1 +0,0 @@ -macholib==1.16.3 diff --git a/arduino-esp32-led-blink-sdk/CMakeLists.txt b/arduino-esp32-led-blink-sdk/CMakeLists.txt new file mode 100644 index 00000000..bda69778 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(app-template) diff --git a/arduino-esp32-led-blink-sdk/README.md b/arduino-esp32-led-blink-sdk/README.md new file mode 100644 index 00000000..1ad5e52c --- /dev/null +++ b/arduino-esp32-led-blink-sdk/README.md @@ -0,0 +1,57 @@ +# arduino-esp32-led-blink-sdk + +This example demonstrates how to integrate with the ESP-IDF SDK via CMake and how to use the Arduino GPIO library to control an LED from Swift. This example is specifically made for the RISC-V MCUs from ESP32 (the Xtensa MCUs are not currently supported by Swift). + +## Requirements + +- Set up **version v5.4** (required for this `arduino-esp32` version) of the [ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32/) development environment. Follow the steps in the [ESP32-C6 "Get Started" guide](https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32c6/get-started/index.html). + - Make sure you specifically set up development for the RISC-V ESP32-C6, and not the Xtensa based products. + - If you have a different version of ESP-IDF installed, make sure to also delete `~/.espressif` before running `install.sh` + +```sh +rm -rf ~/esp-idf ~/.espressif # Remove old installation files +git clone --recurse-submodules https://github.com/espressif/esp-idf.git ~/esp-idf +cd ~/esp-idf +git checkout release/v5.4 +git submodule update --init --recursive +./install.sh +idf_tools.py install-python-env +. ./export.sh +``` + +- Before trying to use Swift with the ESP-IDF SDK, make sure your environment works and can build the provided C/C++ sample projects, in particular: + - Try building and running the "get-started/blink" example from ESP-IDF written in C. + +## Building + +- Make sure you have a recent nightly Swift toolchain that has Embedded Swift support. +- If needed, run export.sh to get access to the idf.py script from ESP-IDF. +- Specify the nightly toolchain to be used via the `TOOLCHAINS` environment variable and the target board type by using `idf.py set-target`. +```sh +cd arduino-esp32-led-blink-sdk +export TOOLCHAINS=... +. /export.sh +idf.py set-target esp32c6 +idf.py build +``` + +## Running + +- Connect the Esp32-C6-Bug board (or any other board with integrated LED on GPIO pin 8) over a USB cable to your Mac. Alternatively you can just connect external LED to GPIO pin 8 on any other board. +- Connect RX pin of USB-UART converter to TX0 pin of your board if you need serial output. You may also need to connect GND converter pin to the GND pin of the board. +- Use `idf.py` to upload the firmware and to run it: + +```sh +idf.py flash +``` + +- The LED should be blinking now. + +### Simulating in VS Code + +- Build the project, to generate binaries for simulation +- Install [Wokwi for VS Code](https://docs.wokwi.com/vscode/getting-started/). +- Open the `diagram.json` file. +- Click the Play button to start simulation. +- Click the Pause button to freeze simulation and display states of GPIOs. + diff --git a/arduino-esp32-led-blink-sdk/diagram.json b/arduino-esp32-led-blink-sdk/diagram.json new file mode 100644 index 00000000..7d76a534 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/diagram.json @@ -0,0 +1,36 @@ +{ + "version": 1, + "author": "", + "editor": "wokwi", + "parts": [ + { + "type": "board-esp32-c6-devkitc-1", + "id": "esp", + "top": 0, + "left": 0, + "attrs": { "builder": "esp-idf" } + }, + { + "type": "wokwi-resistor", + "id": "r1", + "top": 119.15, + "left": -76.8, + "attrs": { "value": "1000" } + }, + { + "type": "wokwi-led", + "id": "led1", + "top": 25.2, + "left": -111.4, + "attrs": { "color": "red" } + } + ], + "connections": [ + [ "esp:TX", "$serialMonitor:RX", "", [] ], + [ "esp:RX", "$serialMonitor:TX", "", [] ], + [ "r1:2", "esp:8", "red", [ "v0" ] ], + [ "r1:1", "led1:A", "red", [ "h0" ] ], + [ "led1:C", "esp:GND.1", "black", [ "v0" ] ] + ], + "dependencies": {} +} diff --git a/arduino-esp32-led-blink-sdk/main/BridgingHeader.h b/arduino-esp32-led-blink-sdk/main/BridgingHeader.h new file mode 100644 index 00000000..c0a19063 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/BridgingHeader.h @@ -0,0 +1,27 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// For some reason swiftc's clang++ defines `__UINT32_TYPE__` as `unsigned int` (g++'s x86 behaviour) not `long unsigned int` (g++'s riscv32 behaviour) +#undef __UINT32_TYPE__ +#undef uint32_t +#define __UINT32_TYPE__ long unsigned int +#define uint32_t __UINT32_TYPE__ +#define _UINT32_T_DECLARED + +#include +#include + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "sdkconfig.h" + +#include diff --git a/arduino-esp32-led-blink-sdk/main/CMakeLists.txt b/arduino-esp32-led-blink-sdk/main/CMakeLists.txt new file mode 100644 index 00000000..a1314a17 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/CMakeLists.txt @@ -0,0 +1,73 @@ +# Register the app as an IDF component +idf_component_register( + SRCS /dev/null # We don't have any C++ sources + PRIV_INCLUDE_DIRS "." + REQUIRES arduino +) + +idf_build_get_property(target IDF_TARGET) +idf_build_get_property(arch IDF_TARGET_ARCH) + +if("${arch}" STREQUAL "xtensa") + message(FATAL_ERROR "Not supported target: ${target}") +endif() + +# Extract the -march flag and remove any vendor-specific extensions (_x*) +string(REGEX MATCH "-march=[^ ]+" march_flag "${CMAKE_C_FLAGS}") +string(REGEX REPLACE "_x[^ ]*" "" march_flag "${march_flag}") + +# Extract the -mabi flag or set a default value if not present +string(REGEX MATCH "-mabi=[^ ]+" mabi_flag "${CMAKE_C_FLAGS}") +if("${mabi_flag}" STREQUAL "") + set(mabi_flag "-mabi=ilp32") +endif() + +# Clear the default COMPILE_OPTIONS which include a lot of C/C++ specific compiler flags that the Swift compiler will not accept +get_target_property(var ${COMPONENT_LIB} COMPILE_OPTIONS) +set_target_properties(${COMPONENT_LIB} PROPERTIES COMPILE_OPTIONS "") + +# Compute -Xcc flags to set up the C and C++ header search paths for Swift (for bridging header). +set(SWIFT_INCLUDES) +foreach(dir ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() +foreach(dir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() + +# Swift compiler flags to build in Embedded Swift mode, optimize for size, choose the right ISA, ABI, etc. +target_compile_options(${COMPONENT_LIB} PUBLIC "$<$:SHELL: + -target riscv32-none-none-eabi + -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library -Osize -cxx-interoperability-mode=default + -Xcc ${march_flag} -Xcc ${mabi_flag} -Xcc -fno-pic -Xcc -fno-pie -Xcc -fno-exceptions + + -pch-output-dir /tmp + -Xfrontend -enable-single-module-llvm-emission + + ${SWIFT_INCLUDES} + + -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h + >") + +# Enable Swift support in CMake, force Whole Module builds (required by Embedded Swift), and use "CMAKE_Swift_COMPILER_WORKS" to +# skip the trial compilations which don't (yet) correctly work when cross-compiling. +set(CMAKE_Swift_COMPILER_WORKS YES) +set(CMAKE_Swift_COMPILATION_MODE_DEFAULT wholemodule) +set(CMAKE_Swift_COMPILATION_MODE wholemodule) +enable_language(Swift) + +# List of Swift source files to build. +target_sources(${COMPONENT_LIB} + PRIVATE + Main.swift + Led.swift +) + +add_custom_command( + TARGET ${COMPONENT_LIB} + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} --remove-section .swift_modhash + $ $ +) diff --git a/arduino-esp32-led-blink-sdk/main/Kconfig.projbuild b/arduino-esp32-led-blink-sdk/main/Kconfig.projbuild new file mode 100644 index 00000000..94f2f0e1 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/Kconfig.projbuild @@ -0,0 +1,8 @@ +# put here your custom config value +menu "Example Configuration" +config LED_BLINK_INTERVAL_MS + int "LED blinking interval / ms" + default 500 + help + Interval in milliseconds between turning the LED on/off +endmenu diff --git a/arduino-esp32-led-blink-sdk/main/Led.swift b/arduino-esp32-led-blink-sdk/main/Led.swift new file mode 100644 index 00000000..8a504146 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/Led.swift @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// A simple "overlay" to provide nicer APIs in Swift +struct Led { + var ledPin: UInt8 + init(gpioPin: gpio_num_t) { + ledPin = UInt8(gpioPin.rawValue) + pinMode(ledPin, UInt8(OUTPUT)) + } + + func setLed(value: Bool) { + digitalWrite(ledPin, value ? 1 : 0) + } +} diff --git a/arduino-esp32-led-blink-sdk/main/Main.swift b/arduino-esp32-led-blink-sdk/main/Main.swift new file mode 100644 index 00000000..7509e935 --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/Main.swift @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// The code will blink an LED on GPIO8. To change the pin, modify Led(gpioPin: GPIO_NUM_8) + +var ledValue: Bool = false +var led: Led? + +@_cdecl("_Z5setupv") +func setup() { + print("Hello from Swift on ESP32-C6!") + led = Led(gpioPin: GPIO_NUM_8) +} + +@_cdecl("_Z4loopv") +func loop() { + led?.setLed(value: ledValue) + ledValue.toggle() // Toggle the boolean value + delay(UInt(CONFIG_LED_BLINK_INTERVAL_MS)) +} diff --git a/arduino-esp32-led-blink-sdk/main/component.mk b/arduino-esp32-led-blink-sdk/main/component.mk new file mode 100644 index 00000000..61f8990c --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/component.mk @@ -0,0 +1,8 @@ +# +# Main component makefile. +# +# This Makefile can be left empty. By default, it will take the sources in the +# src/ directory, compile them and link them into lib(subdirectory_name).a +# in the build directory. This behaviour is entirely configurable, +# please read the ESP-IDF documents if you need to do this. +# diff --git a/arduino-esp32-led-blink-sdk/main/idf_component.yml b/arduino-esp32-led-blink-sdk/main/idf_component.yml new file mode 100644 index 00000000..cdf6c3da --- /dev/null +++ b/arduino-esp32-led-blink-sdk/main/idf_component.yml @@ -0,0 +1,19 @@ +## IDF Component Manager Manifest File +dependencies: + # # Put list of dependencies here + # # For components maintained by Espressif: + # component: "~1.0.0" + # # For 3rd party components: + # username/component: ">=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true + + ## Required IDF version + idf: ">=5.3,<5.5" + arduino: # Can't be defined as the espressif/arduino-esp32 shorthand since the library name must be 'arduino' for libraries that depend on it + git: https://github.com/espressif/arduino-esp32.git + version: 3.2.0 diff --git a/arduino-esp32-led-blink-sdk/sdkconfig.defaults b/arduino-esp32-led-blink-sdk/sdkconfig.defaults new file mode 100644 index 00000000..d4f9762e --- /dev/null +++ b/arduino-esp32-led-blink-sdk/sdkconfig.defaults @@ -0,0 +1,4 @@ +CONFIG_FREERTOS_HZ=1000 +CONFIG_MBEDTLS_PSK_MODES=y +CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y +CONFIG_AUTOSTART_ARDUINO=y diff --git a/arduino-esp32-led-blink-sdk/wokwi.toml b/arduino-esp32-led-blink-sdk/wokwi.toml new file mode 100644 index 00000000..ab73f47b --- /dev/null +++ b/arduino-esp32-led-blink-sdk/wokwi.toml @@ -0,0 +1,8 @@ +# Wokwi Configuration File +# Reference: https://docs.wokwi.com/vscode/project-config +[wokwi] +version = 1 +firmware = 'build/flasher_args.json' +elf = 'build/main.elf' +# gdbServerPort=3333 + diff --git a/arduino-esp32-wifi-scan-sdk/CMakeLists.txt b/arduino-esp32-wifi-scan-sdk/CMakeLists.txt new file mode 100644 index 00000000..bda69778 --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/CMakeLists.txt @@ -0,0 +1,6 @@ +# The following lines of boilerplate have to be in your project's +# CMakeLists in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(app-template) diff --git a/arduino-esp32-wifi-scan-sdk/README.md b/arduino-esp32-wifi-scan-sdk/README.md new file mode 100644 index 00000000..b7f3389d --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/README.md @@ -0,0 +1,48 @@ +# arduino-esp32-wifi-scan-sdk + +This example demonstrates how to integrate with the ESP-IDF SDK via CMake and how to use the Arduino Wi-Fi library to scan for nearby networks from Swift. This example is specifically made for the RISC-V MCUs from ESP32 (the Xtensa MCUs are not currently supported by Swift). + +## Requirements + +- Set up **version v5.4** (required for this `arduino-esp32` version) of the [ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32/) development environment. Follow the steps in the [ESP32-C6 "Get Started" guide](https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32c6/get-started/index.html). + - Make sure you specifically set up development for the RISC-V ESP32-C6, and not the Xtensa based products. + - If you have a different version of ESP-IDF installed, make sure to also delete `~/.espressif` before running `install.sh` + +```sh +rm -rf ~/esp-idf ~/.espressif # Remove old installation files +git clone --recurse-submodules https://github.com/espressif/esp-idf.git ~/esp-idf +cd ~/esp-idf +git checkout release/v5.4 +git submodule update --init --recursive +./install.sh +idf_tools.py install-python-env +. ./export.sh +``` + +- Before trying to use Swift with the ESP-IDF SDK, make sure your environment works and can build the provided C/C++ sample projects, in particular: + - Try building and running the "get-started/blink" example from ESP-IDF written in C. + +## Building + +- Make sure you have a recent nightly Swift toolchain that has Embedded Swift support. +- If needed, run export.sh to get access to the idf.py script from ESP-IDF. +- Specify the nightly toolchain to be used via the `TOOLCHAINS` environment variable and the target board type by using `idf.py set-target`. +```sh +cd arduino-esp32-wifi-scan-sdk +export TOOLCHAINS=... +. /export.sh +idf.py set-target esp32c6 +idf.py build +``` + +## Running + +- Connect any board with an ESP32-C6 +- Connect the RX and TX pins of your USB-UART converter to the TX0 and RX0 respective pins of your board. You may also need to connect the GND converter pin to the GND pin of the board. +- Use `idf.py` to upload the firmware and to run it: + +```sh +idf.py flash monitor +``` + +- You should see a list of discovered Wi-Fi APs being printed every 5 seconds diff --git a/arduino-esp32-wifi-scan-sdk/main/ArduinoString.swift b/arduino-esp32-wifi-scan-sdk/main/ArduinoString.swift new file mode 100644 index 00000000..a3610a63 --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/main/ArduinoString.swift @@ -0,0 +1,23 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +public typealias ArduinoString = String + +extension ArduinoString: CustomStringConvertible { + public var description: Swift.String { + let size = self.length() + 1 + let buffer = UnsafeMutablePointer.allocate(capacity: Int(size)) + self.getBytes(buffer, size) + let result = Swift.String(cString: UnsafePointer(buffer)) + buffer.deallocate() + return result + } +} diff --git a/arduino-esp32-wifi-scan-sdk/main/BridgingHeader.h b/arduino-esp32-wifi-scan-sdk/main/BridgingHeader.h new file mode 100644 index 00000000..3d6ac7e7 --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/main/BridgingHeader.h @@ -0,0 +1,31 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// For some reason swiftc's clang++ defines `__UINT32_TYPE__` as `unsigned int` (g++'s x86 behaviour) not `long unsigned int` (g++'s riscv32 behaviour) +#undef __UINT32_TYPE__ +#undef uint32_t +#define __UINT32_TYPE__ long unsigned int +#define uint32_t __UINT32_TYPE__ +#define _UINT32_T_DECLARED + +#include +#include +#include +#include + +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "driver/gpio.h" +#include "sdkconfig.h" + +#include +#include +#include diff --git a/arduino-esp32-wifi-scan-sdk/main/CMakeLists.txt b/arduino-esp32-wifi-scan-sdk/main/CMakeLists.txt new file mode 100644 index 00000000..a50a389f --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/main/CMakeLists.txt @@ -0,0 +1,73 @@ +# Register the app as an IDF component +idf_component_register( + SRCS /dev/null # We don't have any C++ sources + PRIV_INCLUDE_DIRS "." + REQUIRES arduino +) + +idf_build_get_property(target IDF_TARGET) +idf_build_get_property(arch IDF_TARGET_ARCH) + +if("${arch}" STREQUAL "xtensa") + message(FATAL_ERROR "Not supported target: ${target}") +endif() + +# Extract the -march flag and remove any vendor-specific extensions (_x*) +string(REGEX MATCH "-march=[^ ]+" march_flag "${CMAKE_C_FLAGS}") +string(REGEX REPLACE "_x[^ ]*" "" march_flag "${march_flag}") + +# Extract the -mabi flag or set a default value if not present +string(REGEX MATCH "-mabi=[^ ]+" mabi_flag "${CMAKE_C_FLAGS}") +if("${mabi_flag}" STREQUAL "") + set(mabi_flag "-mabi=ilp32") +endif() + +# Clear the default COMPILE_OPTIONS which include a lot of C/C++ specific compiler flags that the Swift compiler will not accept +get_target_property(var ${COMPONENT_LIB} COMPILE_OPTIONS) +set_target_properties(${COMPONENT_LIB} PROPERTIES COMPILE_OPTIONS "") + +# Compute -Xcc flags to set up the C and C++ header search paths for Swift (for bridging header). +set(SWIFT_INCLUDES) +foreach(dir ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() +foreach(dir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() + +# Swift compiler flags to build in Embedded Swift mode, optimize for size, choose the right ISA, ABI, etc. +target_compile_options(${COMPONENT_LIB} PUBLIC "$<$:SHELL: + -target riscv32-none-none-eabi + -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library -Osize -cxx-interoperability-mode=default + -Xcc ${march_flag} -Xcc ${mabi_flag} -Xcc -fno-pic -Xcc -fno-pie -Xcc -fno-exceptions + + -pch-output-dir /tmp + -Xfrontend -enable-single-module-llvm-emission + + ${SWIFT_INCLUDES} + + -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h + >") + +# Enable Swift support in CMake, force Whole Module builds (required by Embedded Swift), and use "CMAKE_Swift_COMPILER_WORKS" to +# skip the trial compilations which don't (yet) correctly work when cross-compiling. +set(CMAKE_Swift_COMPILER_WORKS YES) +set(CMAKE_Swift_COMPILATION_MODE_DEFAULT wholemodule) +set(CMAKE_Swift_COMPILATION_MODE wholemodule) +enable_language(Swift) + +# List of Swift source files to build. +target_sources(${COMPONENT_LIB} + PRIVATE + Main.swift + ArduinoString.swift +) + +add_custom_command( + TARGET ${COMPONENT_LIB} + POST_BUILD + COMMAND ${CMAKE_OBJCOPY} --remove-section .swift_modhash + $ $ +) diff --git a/arduino-esp32-wifi-scan-sdk/main/Kconfig.projbuild b/arduino-esp32-wifi-scan-sdk/main/Kconfig.projbuild new file mode 100644 index 00000000..befc4efa --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/main/Kconfig.projbuild @@ -0,0 +1,8 @@ +# put here your custom config value +menu "Example Configuration" +config WIFI_SCAN_INTERVAL_MS + int "WiFi network scanning interval / ms" + default 5000 + help + Interval in milliseconds between scanning for networks +endmenu diff --git a/arduino-esp32-wifi-scan-sdk/main/Main.swift b/arduino-esp32-wifi-scan-sdk/main/Main.swift new file mode 100644 index 00000000..6326eca3 --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/main/Main.swift @@ -0,0 +1,26 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2025 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +@_cdecl("_Z5setupv") +func setup() { + print("Hello from Swift on a ESP32-C6!") +} + +@_cdecl("_Z4loopv") +func loop() { + print("Scanning...") + let count = WiFi.scanNetworks(false, true) + print("Found \(count) networks:") + for i in 0..=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true + + ## Required IDF version + idf: ">=5.3,<5.5" + arduino: # Can't be defined as the espressif/arduino-esp32 shorthand since the library name must be 'arduino' for libraries that depend on it + git: https://github.com/espressif/arduino-esp32.git + version: 3.2.0 diff --git a/arduino-esp32-wifi-scan-sdk/sdkconfig.defaults b/arduino-esp32-wifi-scan-sdk/sdkconfig.defaults new file mode 100644 index 00000000..d4f9762e --- /dev/null +++ b/arduino-esp32-wifi-scan-sdk/sdkconfig.defaults @@ -0,0 +1,4 @@ +CONFIG_FREERTOS_HZ=1000 +CONFIG_MBEDTLS_PSK_MODES=y +CONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y +CONFIG_AUTOSTART_ARDUINO=y diff --git a/harmony/.vscode/settings.json b/harmony/.vscode/settings.json new file mode 100644 index 00000000..3416ca02 --- /dev/null +++ b/harmony/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "swift.path": "/Users/rauhul/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-2025-01-05-a.xctoolchain/usr/bin", + "swift.swiftEnvironmentVariables": { + "DEVELOPER_DIR": "/Applications/Xcode.app/" + }, + "cmake.environment": { + "TOOLCHAINS": "org.swift.62202501051a", + "PICO_BOARD": "pico_w", + "PICO_PLATFORM": "rp2040", + "PICO_SDK_PATH": "/Volumes/Developer/org.swift/swift-embedded-examples/harmony/pico-sdk", + "PICO_TOOLCHAIN_PATH": "/Volumes/Developer/org.swift/swift-embedded-examples/harmony/arm-gnu-toolchain-14.2.rel1-darwin-arm64-arm-none-eabi", + "PICO_EXTRAS_PATH": "/Volumes/Developer/org.swift/swift-embedded-examples/harmony/pico-extras", + }, + "cmake.generator": "Ninja", + "swift.disableAutoResolve": true +} diff --git a/harmony/.vscode/tasks.json b/harmony/.vscode/tasks.json new file mode 100644 index 00000000..2fcc2f12 --- /dev/null +++ b/harmony/.vscode/tasks.json @@ -0,0 +1,34 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "cmake", + "label": "CMake: build", + "command": "build", + "targets": [ + "all" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "presentation": { + "clear": true + } + }, + { + "label": "deploy", + "type": "shell", + "command": "cp build/app.uf2 /Volumes/RPI-RP2/", + "group": { + "kind": "build", + "isDefault": false + }, + "presentation": { + "clear": true, + "reveal": "always", + "panel": "shared" + } + } + ] +} \ No newline at end of file diff --git a/harmony/3DModels/Assembly.step b/harmony/3DModels/Assembly.step new file mode 100644 index 00000000..db3a19ff --- /dev/null +++ b/harmony/3DModels/Assembly.step @@ -0,0 +1,35875 @@ +ISO-10303-21; +HEADER; +FILE_DESCRIPTION(('FreeCAD Model'),'2;1'); +FILE_NAME('Open CASCADE Shape Model','2025-02-04T14:13:05',('Author'),( + ''),'Open CASCADE STEP processor 7.8','FreeCAD','Unknown'); +FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }')); +ENDSEC; +DATA; +#1 = APPLICATION_PROTOCOL_DEFINITION('international standard', + 'automotive_design',2000,#2); +#2 = APPLICATION_CONTEXT( + 'core data for automotive mechanical design processes'); +#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10); +#4 = PRODUCT_DEFINITION_SHAPE('','',#5); +#5 = PRODUCT_DEFINITION('design','',#6,#9); +#6 = PRODUCT_DEFINITION_FORMATION('','',#7); +#7 = PRODUCT('embedded_swift_btspeaker','embedded_swift_btspeaker','',( + #8)); +#8 = PRODUCT_CONTEXT('',#2,'mechanical'); +#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#10 = SHAPE_REPRESENTATION('',(#11,#15,#19,#23,#27,#31,#35,#39),#43); +#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14); +#12 = CARTESIAN_POINT('',(0.,0.,0.)); +#13 = DIRECTION('',(0.,0.,1.)); +#14 = DIRECTION('',(1.,0.,-0.)); +#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18); +#16 = CARTESIAN_POINT('',(0.,0.,0.)); +#17 = DIRECTION('',(0.,0.,1.)); +#18 = DIRECTION('',(1.,0.,0.)); +#19 = AXIS2_PLACEMENT_3D('',#20,#21,#22); +#20 = CARTESIAN_POINT('',(0.,0.,0.)); +#21 = DIRECTION('',(0.,0.,1.)); +#22 = DIRECTION('',(1.,0.,0.)); +#23 = AXIS2_PLACEMENT_3D('',#24,#25,#26); +#24 = CARTESIAN_POINT('',(0.,0.,0.)); +#25 = DIRECTION('',(0.,0.,1.)); +#26 = DIRECTION('',(1.,0.,0.)); +#27 = AXIS2_PLACEMENT_3D('',#28,#29,#30); +#28 = CARTESIAN_POINT('',(0.,0.,0.)); +#29 = DIRECTION('',(0.,0.,1.)); +#30 = DIRECTION('',(1.,0.,0.)); +#31 = AXIS2_PLACEMENT_3D('',#32,#33,#34); +#32 = CARTESIAN_POINT('',(0.,0.,0.)); +#33 = DIRECTION('',(0.,0.,1.)); +#34 = DIRECTION('',(1.,0.,0.)); +#35 = AXIS2_PLACEMENT_3D('',#36,#37,#38); +#36 = CARTESIAN_POINT('',(0.,0.,0.)); +#37 = DIRECTION('',(0.,0.,1.)); +#38 = DIRECTION('',(1.,0.,0.)); +#39 = AXIS2_PLACEMENT_3D('',#40,#41,#42); +#40 = CARTESIAN_POINT('',(0.,0.,0.)); +#41 = DIRECTION('',(0.,0.,1.)); +#42 = DIRECTION('',(1.,0.,0.)); +#43 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#47)) GLOBAL_UNIT_ASSIGNED_CONTEXT( +(#44,#45,#46)) REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#44 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#45 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#46 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#47 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-06),#44, + 'distance_accuracy_value','confusion accuracy'); +#48 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7)); +#49 = SHAPE_DEFINITION_REPRESENTATION(#50,#56); +#50 = PRODUCT_DEFINITION_SHAPE('','',#51); +#51 = PRODUCT_DEFINITION('design','',#52,#55); +#52 = PRODUCT_DEFINITION_FORMATION('','',#53); +#53 = PRODUCT('fan_mount_right','fan_mount_right','',(#54)); +#54 = PRODUCT_CONTEXT('',#2,'mechanical'); +#55 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#56 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#57),#1412); +#57 = MANIFOLD_SOLID_BREP('',#58); +#58 = CLOSED_SHELL('',(#59,#200,#241,#329,#470,#512,#551,#584,#608,#647, + #680,#704,#780,#821,#845,#861,#885,#901,#918,#934,#946,#963,#994, + #1025,#1049,#1063,#1075,#1084,#1160,#1182,#1199,#1211,#1233,#1250, + #1262,#1274,#1283,#1314,#1347,#1364,#1388,#1400)); +#59 = ADVANCED_FACE('',(#60,#71,#82),#195,.T.); +#60 = FACE_BOUND('',#61,.T.); +#61 = EDGE_LOOP('',(#62)); +#62 = ORIENTED_EDGE('',*,*,#63,.F.); +#63 = EDGE_CURVE('',#64,#64,#66,.T.); +#64 = VERTEX_POINT('',#65); +#65 = CARTESIAN_POINT('',(137.35,88.250305922417,120.07625984774)); +#66 = CIRCLE('',#67,1.); +#67 = AXIS2_PLACEMENT_3D('',#68,#69,#70); +#68 = CARTESIAN_POINT('',(137.35,89.201362438712,120.38527684212)); +#69 = DIRECTION('',(-1.,0.,0.)); +#70 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#71 = FACE_BOUND('',#72,.T.); +#72 = EDGE_LOOP('',(#73)); +#73 = ORIENTED_EDGE('',*,*,#74,.F.); +#74 = EDGE_CURVE('',#75,#75,#77,.T.); +#75 = VERTEX_POINT('',#76); +#76 = CARTESIAN_POINT('',(137.35,31.760430917444,101.72158682089)); +#77 = CIRCLE('',#78,1.); +#78 = AXIS2_PLACEMENT_3D('',#79,#80,#81); +#79 = CARTESIAN_POINT('',(137.35,32.711487433739,102.03060381527)); +#80 = DIRECTION('',(-1.,0.,0.)); +#81 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#82 = FACE_BOUND('',#83,.T.); +#83 = EDGE_LOOP('',(#84,#94,#103,#112,#120,#128,#136,#145,#154,#163,#172 + ,#181,#189)); +#84 = ORIENTED_EDGE('',*,*,#85,.F.); +#85 = EDGE_CURVE('',#86,#88,#90,.T.); +#86 = VERTEX_POINT('',#87); +#87 = CARTESIAN_POINT('',(137.35,105.59159393969,74.153122810178)); +#88 = VERTEX_POINT('',#89); +#89 = CARTESIAN_POINT('',(137.35,114.61310209858,46.387775669058)); +#90 = LINE('',#91,#92); +#91 = CARTESIAN_POINT('',(137.35,106.41488733104,71.619286293343)); +#92 = VECTOR('',#93,1.); +#93 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#94 = ORIENTED_EDGE('',*,*,#95,.T.); +#95 = EDGE_CURVE('',#86,#96,#98,.T.); +#96 = VERTEX_POINT('',#97); +#97 = CARTESIAN_POINT('',(137.34999999984,35.386057212599, + 71.672789320719)); +#98 = CIRCLE('',#99,36.535898384862); +#99 = AXIS2_PLACEMENT_3D('',#100,#101,#102); +#100 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#101 = DIRECTION('',(1.,0.,0.)); +#102 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#103 = ORIENTED_EDGE('',*,*,#104,.T.); +#104 = EDGE_CURVE('',#96,#105,#107,.T.); +#105 = VERTEX_POINT('',#106); +#106 = CARTESIAN_POINT('',(137.35,46.626089929396,54.994069158932)); +#107 = CIRCLE('',#108,36.535898384862); +#108 = AXIS2_PLACEMENT_3D('',#109,#110,#111); +#109 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#110 = DIRECTION('',(1.,0.,0.)); +#111 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#112 = ORIENTED_EDGE('',*,*,#113,.F.); +#113 = EDGE_CURVE('',#114,#105,#116,.T.); +#114 = VERTEX_POINT('',#115); +#115 = CARTESIAN_POINT('',(137.35,55.64759808829,27.228722017811)); +#116 = LINE('',#117,#118); +#117 = CARTESIAN_POINT('',(137.35,47.44938332075,52.460232642096)); +#118 = VECTOR('',#119,1.); +#119 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#120 = ORIENTED_EDGE('',*,*,#121,.F.); +#121 = EDGE_CURVE('',#122,#114,#124,.T.); +#122 = VERTEX_POINT('',#123); +#123 = CARTESIAN_POINT('',(137.35,48.990202474224,25.065603057186)); +#124 = LINE('',#125,#126); +#125 = CARTESIAN_POINT('',(137.35,41.340983800763,22.580221249386)); +#126 = VECTOR('',#127,1.); +#127 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#128 = ORIENTED_EDGE('',*,*,#129,.F.); +#129 = EDGE_CURVE('',#130,#122,#132,.T.); +#130 = VERTEX_POINT('',#131); +#131 = CARTESIAN_POINT('',(137.35,33.993613830435,71.220357039965)); +#132 = LINE('',#133,#134); +#133 = CARTESIAN_POINT('',(137.35,33.993613830435,71.220357039965)); +#134 = VECTOR('',#135,1.); +#135 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#136 = ORIENTED_EDGE('',*,*,#137,.F.); +#137 = EDGE_CURVE('',#138,#130,#140,.T.); +#138 = VERTEX_POINT('',#139); +#139 = CARTESIAN_POINT('',(137.35,30.506384947062,101.59185230598)); +#140 = CIRCLE('',#141,77.); +#141 = AXIS2_PLACEMENT_3D('',#142,#143,#144); +#142 = CARTESIAN_POINT('',(137.35,107.22496558516,95.014665606836)); +#143 = DIRECTION('',(1.,0.,0.)); +#144 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#145 = ORIENTED_EDGE('',*,*,#146,.F.); +#146 = EDGE_CURVE('',#147,#138,#149,.T.); +#147 = VERTEX_POINT('',#148); +#148 = CARTESIAN_POINT('',(137.35,31.770318139601,104.07246086791)); +#149 = CIRCLE('',#150,3.7); +#150 = AXIS2_PLACEMENT_3D('',#151,#152,#153); +#151 = CARTESIAN_POINT('',(137.35,34.192862198503,101.27580567238)); +#152 = DIRECTION('',(1.,0.,0.)); +#153 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#154 = ORIENTED_EDGE('',*,*,#155,.F.); +#155 = EDGE_CURVE('',#156,#147,#158,.T.); +#156 = VERTEX_POINT('',#157); +#157 = CARTESIAN_POINT('',(137.35,88.762610929421,122.5903793288)); +#158 = CIRCLE('',#159,77.); +#159 = AXIS2_PLACEMENT_3D('',#160,#161,#162); +#160 = CARTESIAN_POINT('',(137.35,82.185424230274,45.871798690702)); +#161 = DIRECTION('',(1.,0.,0.)); +#162 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#163 = ORIENTED_EDGE('',*,*,#164,.F.); +#164 = EDGE_CURVE('',#165,#156,#167,.T.); +#165 = VERTEX_POINT('',#166); +#166 = CARTESIAN_POINT('',(137.35,91.243219491354,121.32644613626)); +#167 = CIRCLE('',#168,3.7); +#168 = AXIS2_PLACEMENT_3D('',#169,#170,#171); +#169 = CARTESIAN_POINT('',(137.35,88.446564295826,118.90390207736)); +#170 = DIRECTION('',(1.,0.,0.)); +#171 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#172 = ORIENTED_EDGE('',*,*,#173,.F.); +#173 = EDGE_CURVE('',#174,#165,#176,.T.); +#174 = VERTEX_POINT('',#175); +#175 = CARTESIAN_POINT('',(137.35,106.27390906886,94.705648612461)); +#176 = CIRCLE('',#177,77.); +#177 = AXIS2_PLACEMENT_3D('',#178,#179,#180); +#178 = CARTESIAN_POINT('',(137.35,33.04255731414,70.91134004559)); +#179 = DIRECTION('',(1.,0.,0.)); +#180 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#181 = ORIENTED_EDGE('',*,*,#182,.F.); +#182 = EDGE_CURVE('',#183,#174,#185,.T.); +#183 = VERTEX_POINT('',#184); +#184 = CARTESIAN_POINT('',(137.35,121.27049771265,48.550894629682)); +#185 = LINE('',#186,#187); +#186 = CARTESIAN_POINT('',(137.35,106.27390906886,94.705648612461)); +#187 = VECTOR('',#188,1.); +#188 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#189 = ORIENTED_EDGE('',*,*,#190,.F.); +#190 = EDGE_CURVE('',#88,#183,#191,.T.); +#191 = LINE('',#192,#193); +#192 = CARTESIAN_POINT('',(137.35,41.340983800763,22.580221249386)); +#193 = VECTOR('',#194,1.); +#194 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#195 = PLANE('',#196); +#196 = AXIS2_PLACEMENT_3D('',#197,#198,#199); +#197 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#198 = DIRECTION('',(-1.,0.,0.)); +#199 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#200 = ADVANCED_FACE('',(#201),#236,.T.); +#201 = FACE_BOUND('',#202,.T.); +#202 = EDGE_LOOP('',(#203,#214,#222,#230)); +#203 = ORIENTED_EDGE('',*,*,#204,.T.); +#204 = EDGE_CURVE('',#205,#207,#209,.T.); +#205 = VERTEX_POINT('',#206); +#206 = CARTESIAN_POINT('',(137.35,55.821090615064,49.347242766834)); +#207 = VERTEX_POINT('',#208); +#208 = CARTESIAN_POINT('',(137.35,101.47180339723,64.180058496831)); +#209 = CIRCLE('',#210,36.535898384862); +#210 = AXIS2_PLACEMENT_3D('',#211,#212,#213); +#211 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#212 = DIRECTION('',(1.,0.,0.)); +#213 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#214 = ORIENTED_EDGE('',*,*,#215,.T.); +#215 = EDGE_CURVE('',#207,#216,#218,.T.); +#216 = VERTEX_POINT('',#217); +#217 = CARTESIAN_POINT('',(137.35,107.95570648452,44.224656708433)); +#218 = LINE('',#219,#220); +#219 = CARTESIAN_POINT('',(137.35,93.884129373533,87.532517925022)); +#220 = VECTOR('',#221,1.); +#221 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#222 = ORIENTED_EDGE('',*,*,#223,.F.); +#223 = EDGE_CURVE('',#224,#216,#226,.T.); +#224 = VERTEX_POINT('',#225); +#225 = CARTESIAN_POINT('',(137.35,62.304993702356,29.391840978436)); +#226 = LINE('',#227,#228); +#227 = CARTESIAN_POINT('',(137.35,41.340983800763,22.580221249386)); +#228 = VECTOR('',#229,1.); +#229 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#230 = ORIENTED_EDGE('',*,*,#231,.T.); +#231 = EDGE_CURVE('',#224,#205,#232,.T.); +#232 = LINE('',#233,#234); +#233 = CARTESIAN_POINT('',(137.35,48.233416591365,72.699702195025)); +#234 = VECTOR('',#235,1.); +#235 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#236 = PLANE('',#237); +#237 = AXIS2_PLACEMENT_3D('',#238,#239,#240); +#238 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#239 = DIRECTION('',(-1.,0.,0.)); +#240 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#241 = ADVANCED_FACE('',(#242),#324,.F.); +#242 = FACE_BOUND('',#243,.F.); +#243 = EDGE_LOOP('',(#244,#253,#258,#259,#272,#281,#290,#291,#302,#311, + #322,#323)); +#244 = ORIENTED_EDGE('',*,*,#245,.F.); +#245 = EDGE_CURVE('',#246,#246,#248,.T.); +#246 = VERTEX_POINT('',#247); +#247 = CARTESIAN_POINT('',(139.35,35.895726863025,71.838391028715)); +#248 = CIRCLE('',#249,36.); +#249 = AXIS2_PLACEMENT_3D('',#250,#251,#252); +#250 = CARTESIAN_POINT('',(139.35,70.133761449651,82.963002826213)); +#251 = DIRECTION('',(1.,0.,0.)); +#252 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#253 = ORIENTED_EDGE('',*,*,#254,.T.); +#254 = EDGE_CURVE('',#246,#96,#255,.T.); +#255 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#256,#257),.UNSPECIFIED.,.F.,.F., + (2,2),(1.839019921686E-15,2.07055236082),.PIECEWISE_BEZIER_KNOTS.); +#256 = CARTESIAN_POINT('',(139.35,35.895726863025,71.838391028715)); +#257 = CARTESIAN_POINT('',(137.34999999984,35.386057212599, + 71.672789320719)); +#258 = ORIENTED_EDGE('',*,*,#104,.T.); +#259 = ORIENTED_EDGE('',*,*,#260,.F.); +#260 = EDGE_CURVE('',#261,#105,#263,.T.); +#261 = VERTEX_POINT('',#262); +#262 = CARTESIAN_POINT('',(131.40124823096,47.511509279558, + 52.269028601443)); +#263 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#264,#265,#266,#267,#268,#269, + #270,#271),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0.,0.25,0.5,1.), + .UNSPECIFIED.); +#264 = CARTESIAN_POINT('',(131.40124823096,47.511509279558, + 52.269028601443)); +#265 = CARTESIAN_POINT('',(131.90158644238,47.440356753462, + 52.488013559636)); +#266 = CARTESIAN_POINT('',(132.40119134352,47.368577134642, + 52.708928510781)); +#267 = CARTESIAN_POINT('',(133.39799275255,47.223770563562, + 53.154597310669)); +#268 = CARTESIAN_POINT('',(133.89520144112,47.150742309663, + 53.379355165443)); +#269 = CARTESIAN_POINT('',(135.3829317964,46.929615045284, + 54.059914906643)); +#270 = CARTESIAN_POINT('',(136.36957658309,46.779483404815, + 54.521972584925)); +#271 = CARTESIAN_POINT('',(137.35,46.626089929396,54.994069158932)); +#272 = ORIENTED_EDGE('',*,*,#273,.T.); +#273 = EDGE_CURVE('',#261,#274,#276,.T.); +#274 = VERTEX_POINT('',#275); +#275 = CARTESIAN_POINT('',(128.71274692047,59.470537947551, + 45.604776494726)); +#276 = ELLIPSE('',#277,38.020733700065,36.630431203854); +#277 = AXIS2_PLACEMENT_3D('',#278,#279,#280); +#278 = CARTESIAN_POINT('',(136.64348460142,70.948562425518, + 80.455303276711)); +#279 = DIRECTION('',(0.965925826289,7.997948340457E-02,-0.246151539386) + ); +#280 = DIRECTION('',(-0.258819045103,0.298487495629,-0.91865005135)); +#281 = ORIENTED_EDGE('',*,*,#282,.F.); +#282 = EDGE_CURVE('',#205,#274,#283,.T.); +#283 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#284,#285,#286,#287,#288,#289), + .UNSPECIFIED.,.F.,.F.,(4,2,4),(0.,0.5,1.),.UNSPECIFIED.); +#284 = CARTESIAN_POINT('',(137.35,55.821090615064,49.347242766834)); +#285 = CARTESIAN_POINT('',(135.93637734004,56.438546365285, + 48.672664124141)); +#286 = CARTESIAN_POINT('',(134.50811519201,57.050797699102, + 48.026796954617)); +#287 = CARTESIAN_POINT('',(131.62753896094,58.266749775055, + 46.782234106984)); +#288 = CARTESIAN_POINT('',(130.17520505394,58.870443469666, + 46.183577308317)); +#289 = CARTESIAN_POINT('',(128.71274692047,59.470537947551, + 45.604776494726)); +#290 = ORIENTED_EDGE('',*,*,#204,.T.); +#291 = ORIENTED_EDGE('',*,*,#292,.F.); +#292 = EDGE_CURVE('',#293,#207,#295,.T.); +#293 = VERTEX_POINT('',#294); +#294 = CARTESIAN_POINT('',(128.71274692047,100.71910496712, + 59.007248360767)); +#295 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#296,#297,#298,#299,#300,#301), + .UNSPECIFIED.,.F.,.F.,(4,2,4),(0.,0.5,1.),.UNSPECIFIED.); +#296 = CARTESIAN_POINT('',(128.71274692047,100.71910496712, + 59.007248360767)); +#297 = CARTESIAN_POINT('',(130.17057621053,100.86392120078, + 59.825636225773)); +#298 = CARTESIAN_POINT('',(131.62038114292,101.00023944412, + 60.663220280739)); +#299 = CARTESIAN_POINT('',(134.50072485553,101.2524726061,62.38447765194 + )); +#300 = CARTESIAN_POINT('',(135.93128226203,101.36840725043, + 63.268106409616)); +#301 = CARTESIAN_POINT('',(137.35,101.47180339723,64.180058496831)); +#302 = ORIENTED_EDGE('',*,*,#303,.T.); +#303 = EDGE_CURVE('',#293,#304,#306,.T.); +#304 = VERTEX_POINT('',#305); +#305 = CARTESIAN_POINT('',(131.40124823096,106.47701328985, + 71.428082252689)); +#306 = ELLIPSE('',#307,38.020733700065,36.630431203854); +#307 = AXIS2_PLACEMENT_3D('',#308,#309,#310); +#308 = CARTESIAN_POINT('',(136.64348460142,70.948562425518, + 80.455303276711)); +#309 = DIRECTION('',(0.965925826289,7.997948340457E-02,-0.246151539386) + ); +#310 = DIRECTION('',(-0.258819045103,0.298487495629,-0.91865005135)); +#311 = ORIENTED_EDGE('',*,*,#312,.F.); +#312 = EDGE_CURVE('',#86,#304,#313,.T.); +#313 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#314,#315,#316,#317,#318,#319, + #320,#321),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0.,0.5,0.75,1.), + .UNSPECIFIED.); +#314 = CARTESIAN_POINT('',(137.35,105.59159393969,74.153122810178)); +#315 = CARTESIAN_POINT('',(136.36957680639,105.74498738017, + 73.681026343697)); +#316 = CARTESIAN_POINT('',(135.38293200773,105.89511902418, + 73.218968654536)); +#317 = CARTESIAN_POINT('',(133.89520133046,106.1162463364, + 72.538408766081)); +#318 = CARTESIAN_POINT('',(133.39799248379,106.18927461341, + 72.313650840193)); +#319 = CARTESIAN_POINT('',(132.40119066401,106.33408124314, + 71.867981859779)); +#320 = CARTESIAN_POINT('',(131.90158607652,106.40586081578, + 71.647067050757)); +#321 = CARTESIAN_POINT('',(131.40124823096,106.47701328985, + 71.428082252689)); +#322 = ORIENTED_EDGE('',*,*,#95,.T.); +#323 = ORIENTED_EDGE('',*,*,#254,.F.); +#324 = CONICAL_SURFACE('',#325,36.,0.2617993875); +#325 = AXIS2_PLACEMENT_3D('',#326,#327,#328); +#326 = CARTESIAN_POINT('',(139.35,70.133761449651,82.963002826213)); +#327 = DIRECTION('',(-1.,0.,0.)); +#328 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#329 = ADVANCED_FACE('',(#330),#465,.T.); +#330 = FACE_BOUND('',#331,.T.); +#331 = EDGE_LOOP('',(#332,#342,#350,#356,#357,#365,#373,#381,#389,#395, + #396,#404,#412,#420,#428,#434,#435,#443,#451,#459)); +#332 = ORIENTED_EDGE('',*,*,#333,.F.); +#333 = EDGE_CURVE('',#334,#336,#338,.T.); +#334 = VERTEX_POINT('',#335); +#335 = CARTESIAN_POINT('',(135.35,46.137032925338,24.138552074062)); +#336 = VERTEX_POINT('',#337); +#337 = CARTESIAN_POINT('',(142.35,46.137032925338,24.138552074062)); +#338 = LINE('',#339,#340); +#339 = CARTESIAN_POINT('',(143.75,46.137032925338,24.138552074062)); +#340 = VECTOR('',#341,1.); +#341 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#342 = ORIENTED_EDGE('',*,*,#343,.T.); +#343 = EDGE_CURVE('',#334,#344,#346,.T.); +#344 = VERTEX_POINT('',#345); +#345 = CARTESIAN_POINT('',(135.35,48.990202474224,25.065603057186)); +#346 = LINE('',#347,#348); +#347 = CARTESIAN_POINT('',(135.35,45.185976409043,23.829535079687)); +#348 = VECTOR('',#349,1.); +#349 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#350 = ORIENTED_EDGE('',*,*,#351,.F.); +#351 = EDGE_CURVE('',#122,#344,#352,.T.); +#352 = LINE('',#353,#354); +#353 = CARTESIAN_POINT('',(137.35,48.990202474224,25.065603057187)); +#354 = VECTOR('',#355,1.); +#355 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#356 = ORIENTED_EDGE('',*,*,#121,.T.); +#357 = ORIENTED_EDGE('',*,*,#358,.F.); +#358 = EDGE_CURVE('',#359,#114,#361,.T.); +#359 = VERTEX_POINT('',#360); +#360 = CARTESIAN_POINT('',(130.35,55.64759808829,27.228722017811)); +#361 = LINE('',#362,#363); +#362 = CARTESIAN_POINT('',(143.75,55.64759808829,27.228722017811)); +#363 = VECTOR('',#364,1.); +#364 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#365 = ORIENTED_EDGE('',*,*,#366,.T.); +#366 = EDGE_CURVE('',#359,#367,#369,.T.); +#367 = VERTEX_POINT('',#368); +#368 = CARTESIAN_POINT('',(130.35,60.402880669766,28.773806989686)); +#369 = LINE('',#370,#371); +#370 = CARTESIAN_POINT('',(130.35,128.91971638611,51.036276437482)); +#371 = VECTOR('',#372,1.); +#372 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#373 = ORIENTED_EDGE('',*,*,#374,.T.); +#374 = EDGE_CURVE('',#367,#375,#377,.T.); +#375 = VERTEX_POINT('',#376); +#376 = CARTESIAN_POINT('',(124.34643097,60.402880669766,28.773806989686) + ); +#377 = LINE('',#378,#379); +#378 = CARTESIAN_POINT('',(130.17834250392,60.402880669766, + 28.773806989686)); +#379 = VECTOR('',#380,1.); +#380 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#381 = ORIENTED_EDGE('',*,*,#382,.T.); +#382 = EDGE_CURVE('',#375,#383,#385,.T.); +#383 = VERTEX_POINT('',#384); +#384 = CARTESIAN_POINT('',(124.34643097,65.618755946963,30.468547600341) + ); +#385 = LINE('',#386,#387); +#386 = CARTESIAN_POINT('',(124.34643097,128.91971638611,51.036276437482) + ); +#387 = VECTOR('',#388,1.); +#388 = DIRECTION('',(-6.247150620202E-16,0.951056516295,0.309016994375) + ); +#389 = ORIENTED_EDGE('',*,*,#390,.T.); +#390 = EDGE_CURVE('',#383,#224,#391,.T.); +#391 = LINE('',#392,#393); +#392 = CARTESIAN_POINT('',(61.665941917,81.591927436891,35.658545628725) + ); +#393 = VECTOR('',#394,1.); +#394 = DIRECTION('',(0.965925826289,-0.246151539386,-7.997948340457E-02) + ); +#395 = ORIENTED_EDGE('',*,*,#223,.T.); +#396 = ORIENTED_EDGE('',*,*,#397,.T.); +#397 = EDGE_CURVE('',#216,#398,#400,.T.); +#398 = VERTEX_POINT('',#399); +#399 = CARTESIAN_POINT('',(124.34643097,104.64194423991,43.147950086527) + ); +#400 = LINE('',#401,#402); +#401 = CARTESIAN_POINT('',(84.687374157041,94.535435417585,39.86414631) + ); +#402 = VECTOR('',#403,1.); +#403 = DIRECTION('',(-0.965925826289,-0.246151539386,-7.997948340457E-02 + )); +#404 = ORIENTED_EDGE('',*,*,#405,.T.); +#405 = EDGE_CURVE('',#398,#406,#408,.T.); +#406 = VERTEX_POINT('',#407); +#407 = CARTESIAN_POINT('',(124.34643097,109.85781951711,44.842690697183) + ); +#408 = LINE('',#409,#410); +#409 = CARTESIAN_POINT('',(124.34643097,128.91971638611,51.036276437482) + ); +#410 = VECTOR('',#411,1.); +#411 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#412 = ORIENTED_EDGE('',*,*,#413,.T.); +#413 = EDGE_CURVE('',#406,#414,#416,.T.); +#414 = VERTEX_POINT('',#415); +#415 = CARTESIAN_POINT('',(130.35,109.85781951711,44.842690697183)); +#416 = LINE('',#417,#418); +#417 = CARTESIAN_POINT('',(130.17834250392,109.85781951711, + 44.842690697183)); +#418 = VECTOR('',#419,1.); +#419 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#420 = ORIENTED_EDGE('',*,*,#421,.T.); +#421 = EDGE_CURVE('',#414,#422,#424,.T.); +#422 = VERTEX_POINT('',#423); +#423 = CARTESIAN_POINT('',(130.35,114.61310209858,46.387775669058)); +#424 = LINE('',#425,#426); +#425 = CARTESIAN_POINT('',(130.35,128.91971638611,51.036276437482)); +#426 = VECTOR('',#427,1.); +#427 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#428 = ORIENTED_EDGE('',*,*,#429,.F.); +#429 = EDGE_CURVE('',#88,#422,#430,.T.); +#430 = LINE('',#431,#432); +#431 = CARTESIAN_POINT('',(143.75,114.61310209858,46.387775669058)); +#432 = VECTOR('',#433,1.); +#433 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#434 = ORIENTED_EDGE('',*,*,#190,.T.); +#435 = ORIENTED_EDGE('',*,*,#436,.F.); +#436 = EDGE_CURVE('',#437,#183,#439,.T.); +#437 = VERTEX_POINT('',#438); +#438 = CARTESIAN_POINT('',(135.35,121.27049771265,48.550894629682)); +#439 = LINE('',#440,#441); +#440 = CARTESIAN_POINT('',(137.35,121.27049771265,48.550894629682)); +#441 = VECTOR('',#442,1.); +#442 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#443 = ORIENTED_EDGE('',*,*,#444,.T.); +#444 = EDGE_CURVE('',#437,#445,#447,.T.); +#445 = VERTEX_POINT('',#446); +#446 = CARTESIAN_POINT('',(135.35,124.12366726154,49.477945612807)); +#447 = LINE('',#448,#449); +#448 = CARTESIAN_POINT('',(135.35,125.07472377783,49.786962607182)); +#449 = VECTOR('',#450,1.); +#450 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#451 = ORIENTED_EDGE('',*,*,#452,.F.); +#452 = EDGE_CURVE('',#453,#445,#455,.T.); +#453 = VERTEX_POINT('',#454); +#454 = CARTESIAN_POINT('',(142.35,124.12366726154,49.477945612807)); +#455 = LINE('',#456,#457); +#456 = CARTESIAN_POINT('',(143.75,124.12366726154,49.477945612807)); +#457 = VECTOR('',#458,1.); +#458 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#459 = ORIENTED_EDGE('',*,*,#460,.T.); +#460 = EDGE_CURVE('',#453,#336,#461,.T.); +#461 = LINE('',#462,#463); +#462 = CARTESIAN_POINT('',(142.35,46.137032925338,24.138552074062)); +#463 = VECTOR('',#464,1.); +#464 = DIRECTION('',(1.094764425254E-47,-0.951056516295,-0.309016994375) + ); +#465 = PLANE('',#466); +#466 = AXIS2_PLACEMENT_3D('',#467,#468,#469); +#467 = CARTESIAN_POINT('',(75.,128.91971638611,51.036276437482)); +#468 = DIRECTION('',(-5.551115123125E-17,0.309016994375,-0.951056516295) + ); +#469 = DIRECTION('',(3.538835890993E-15,0.951056516295,0.309016994375)); +#470 = ADVANCED_FACE('',(#471),#507,.T.); +#471 = FACE_BOUND('',#472,.T.); +#472 = EDGE_LOOP('',(#473,#483,#492,#500)); +#473 = ORIENTED_EDGE('',*,*,#474,.F.); +#474 = EDGE_CURVE('',#475,#477,#479,.T.); +#475 = VERTEX_POINT('',#476); +#476 = CARTESIAN_POINT('',(135.35,89.01886495666,125.57941493807)); +#477 = VERTEX_POINT('',#478); +#478 = CARTESIAN_POINT('',(143.35,89.018864956661,125.57941493807)); +#479 = LINE('',#480,#481); +#480 = CARTESIAN_POINT('',(149.75,89.018864956661,125.57941493807)); +#481 = VECTOR('',#482,1.); +#482 = DIRECTION('',(1.,0.,0.)); +#483 = ORIENTED_EDGE('',*,*,#484,.F.); +#484 = EDGE_CURVE('',#485,#475,#487,.T.); +#485 = VERTEX_POINT('',#486); +#486 = CARTESIAN_POINT('',(135.35,29.806093226977,106.34001913456)); +#487 = CIRCLE('',#488,80.); +#488 = AXIS2_PLACEMENT_3D('',#489,#490,#491); +#489 = CARTESIAN_POINT('',(135.35,82.185424230274,45.871798690702)); +#490 = DIRECTION('',(-1.,0.,0.)); +#491 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#492 = ORIENTED_EDGE('',*,*,#493,.F.); +#493 = EDGE_CURVE('',#494,#485,#496,.T.); +#494 = VERTEX_POINT('',#495); +#495 = CARTESIAN_POINT('',(143.35,29.806093226977,106.34001913456)); +#496 = LINE('',#497,#498); +#497 = CARTESIAN_POINT('',(149.75,29.806093226977,106.34001913456)); +#498 = VECTOR('',#499,1.); +#499 = DIRECTION('',(-1.,0.,0.)); +#500 = ORIENTED_EDGE('',*,*,#501,.F.); +#501 = EDGE_CURVE('',#477,#494,#502,.T.); +#502 = CIRCLE('',#503,80.); +#503 = AXIS2_PLACEMENT_3D('',#504,#505,#506); +#504 = CARTESIAN_POINT('',(143.35,82.185424230274,45.871798690702)); +#505 = DIRECTION('',(1.,0.,0.)); +#506 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#507 = CYLINDRICAL_SURFACE('',#508,80.); +#508 = AXIS2_PLACEMENT_3D('',#509,#510,#511); +#509 = CARTESIAN_POINT('',(149.75,82.185424230274,45.871798690702)); +#510 = DIRECTION('',(-1.,0.,0.)); +#511 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#512 = ADVANCED_FACE('',(#513),#546,.T.); +#513 = FACE_BOUND('',#514,.T.); +#514 = EDGE_LOOP('',(#515,#516,#524,#532,#540)); +#515 = ORIENTED_EDGE('',*,*,#452,.T.); +#516 = ORIENTED_EDGE('',*,*,#517,.F.); +#517 = EDGE_CURVE('',#518,#445,#520,.T.); +#518 = VERTEX_POINT('',#519); +#519 = CARTESIAN_POINT('',(135.35,109.12707861775,95.632699595586)); +#520 = LINE('',#521,#522); +#521 = CARTESIAN_POINT('',(135.35,100.31303041526,122.75955064424)); +#522 = VECTOR('',#523,1.); +#523 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#524 = ORIENTED_EDGE('',*,*,#525,.F.); +#525 = EDGE_CURVE('',#526,#518,#528,.T.); +#526 = VERTEX_POINT('',#527); +#527 = CARTESIAN_POINT('',(143.35,109.12707861775,95.632699595586)); +#528 = LINE('',#529,#530); +#529 = CARTESIAN_POINT('',(149.75,109.12707861775,95.632699595586)); +#530 = VECTOR('',#531,1.); +#531 = DIRECTION('',(-1.,0.,0.)); +#532 = ORIENTED_EDGE('',*,*,#533,.F.); +#533 = EDGE_CURVE('',#534,#526,#536,.T.); +#534 = VERTEX_POINT('',#535); +#535 = CARTESIAN_POINT('',(143.35,123.81465026716,50.429002129102)); +#536 = LINE('',#537,#538); +#537 = CARTESIAN_POINT('',(143.35,115.925452494,74.709456237092)); +#538 = VECTOR('',#539,1.); +#539 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#540 = ORIENTED_EDGE('',*,*,#541,.T.); +#541 = EDGE_CURVE('',#534,#453,#542,.T.); +#542 = LINE('',#543,#544); +#543 = CARTESIAN_POINT('',(142.35,124.12366726154,49.477945612807)); +#544 = VECTOR('',#545,1.); +#545 = DIRECTION('',(-0.707106781187,0.218508012224,-0.672498511964)); +#546 = PLANE('',#547); +#547 = AXIS2_PLACEMENT_3D('',#548,#549,#550); +#548 = CARTESIAN_POINT('',(143.75,115.925452494,74.709456237092)); +#549 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#550 = DIRECTION('',(-1.,0.,0.)); +#551 = ADVANCED_FACE('',(#552),#579,.T.); +#552 = FACE_BOUND('',#553,.T.); +#553 = EDGE_LOOP('',(#554,#555,#564,#572)); +#554 = ORIENTED_EDGE('',*,*,#525,.T.); +#555 = ORIENTED_EDGE('',*,*,#556,.F.); +#556 = EDGE_CURVE('',#557,#518,#559,.T.); +#557 = VERTEX_POINT('',#558); +#558 = CARTESIAN_POINT('',(135.35,93.510777757999,123.29067104888)); +#559 = CIRCLE('',#560,80.); +#560 = AXIS2_PLACEMENT_3D('',#561,#562,#563); +#561 = CARTESIAN_POINT('',(135.35,33.04255731414,70.91134004559)); +#562 = DIRECTION('',(-1.,0.,0.)); +#563 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#564 = ORIENTED_EDGE('',*,*,#565,.T.); +#565 = EDGE_CURVE('',#557,#566,#568,.T.); +#566 = VERTEX_POINT('',#567); +#567 = CARTESIAN_POINT('',(143.35,93.510777757999,123.29067104888)); +#568 = LINE('',#569,#570); +#569 = CARTESIAN_POINT('',(149.75,93.510777757999,123.29067104888)); +#570 = VECTOR('',#571,1.); +#571 = DIRECTION('',(1.,0.,0.)); +#572 = ORIENTED_EDGE('',*,*,#573,.F.); +#573 = EDGE_CURVE('',#526,#566,#574,.T.); +#574 = CIRCLE('',#575,80.); +#575 = AXIS2_PLACEMENT_3D('',#576,#577,#578); +#576 = CARTESIAN_POINT('',(143.35,33.04255731414,70.91134004559)); +#577 = DIRECTION('',(1.,0.,0.)); +#578 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#579 = CYLINDRICAL_SURFACE('',#580,80.); +#580 = AXIS2_PLACEMENT_3D('',#581,#582,#583); +#581 = CARTESIAN_POINT('',(149.75,33.04255731414,70.91134004559)); +#582 = DIRECTION('',(-1.,0.,0.)); +#583 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#584 = ADVANCED_FACE('',(#585),#603,.T.); +#585 = FACE_BOUND('',#586,.T.); +#586 = EDGE_LOOP('',(#587,#588,#595,#596)); +#587 = ORIENTED_EDGE('',*,*,#565,.F.); +#588 = ORIENTED_EDGE('',*,*,#589,.F.); +#589 = EDGE_CURVE('',#475,#557,#590,.T.); +#590 = CIRCLE('',#591,6.7); +#591 = AXIS2_PLACEMENT_3D('',#592,#593,#594); +#592 = CARTESIAN_POINT('',(135.35,88.446564295826,118.90390207736)); +#593 = DIRECTION('',(-1.,0.,0.)); +#594 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#595 = ORIENTED_EDGE('',*,*,#474,.T.); +#596 = ORIENTED_EDGE('',*,*,#597,.F.); +#597 = EDGE_CURVE('',#566,#477,#598,.T.); +#598 = CIRCLE('',#599,6.7); +#599 = AXIS2_PLACEMENT_3D('',#600,#601,#602); +#600 = CARTESIAN_POINT('',(143.35,88.446564295826,118.90390207736)); +#601 = DIRECTION('',(1.,0.,0.)); +#602 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#603 = CYLINDRICAL_SURFACE('',#604,6.7); +#604 = AXIS2_PLACEMENT_3D('',#605,#606,#607); +#605 = CARTESIAN_POINT('',(149.75,88.446564295826,118.90390207736)); +#606 = DIRECTION('',(-1.,0.,0.)); +#607 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#608 = ADVANCED_FACE('',(#609),#642,.T.); +#609 = FACE_BOUND('',#610,.T.); +#610 = EDGE_LOOP('',(#611,#621,#627,#628,#636)); +#611 = ORIENTED_EDGE('',*,*,#612,.F.); +#612 = EDGE_CURVE('',#613,#615,#617,.T.); +#613 = VERTEX_POINT('',#614); +#614 = CARTESIAN_POINT('',(135.35,31.140444281549,70.29330605684)); +#615 = VERTEX_POINT('',#616); +#616 = CARTESIAN_POINT('',(143.35,31.140444281549,70.29330605684)); +#617 = LINE('',#618,#619); +#618 = CARTESIAN_POINT('',(149.75,31.140444281549,70.29330605684)); +#619 = VECTOR('',#620,1.); +#620 = DIRECTION('',(1.,0.,0.)); +#621 = ORIENTED_EDGE('',*,*,#622,.F.); +#622 = EDGE_CURVE('',#334,#613,#623,.T.); +#623 = LINE('',#624,#625); +#624 = CARTESIAN_POINT('',(135.35,22.326396079063,97.420157105501)); +#625 = VECTOR('',#626,1.); +#626 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#627 = ORIENTED_EDGE('',*,*,#333,.T.); +#628 = ORIENTED_EDGE('',*,*,#629,.T.); +#629 = EDGE_CURVE('',#336,#630,#632,.T.); +#630 = VERTEX_POINT('',#631); +#631 = CARTESIAN_POINT('',(143.35,45.828015930964,25.089608590357)); +#632 = LINE('',#633,#634); +#633 = CARTESIAN_POINT('',(142.34999999999,46.137032925338, + 24.138552074062)); +#634 = VECTOR('',#635,1.); +#635 = DIRECTION('',(0.707106781187,-0.218508012224,0.672498511964)); +#636 = ORIENTED_EDGE('',*,*,#637,.F.); +#637 = EDGE_CURVE('',#615,#630,#638,.T.); +#638 = LINE('',#639,#640); +#639 = CARTESIAN_POINT('',(143.35,37.938818157798,49.370062698347)); +#640 = VECTOR('',#641,1.); +#641 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#642 = PLANE('',#643); +#643 = AXIS2_PLACEMENT_3D('',#644,#645,#646); +#644 = CARTESIAN_POINT('',(143.75,37.938818157798,49.370062698347)); +#645 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#646 = DIRECTION('',(-1.,-0.,0.)); +#647 = ADVANCED_FACE('',(#648),#675,.T.); +#648 = FACE_BOUND('',#649,.T.); +#649 = EDGE_LOOP('',(#650,#660,#667,#668)); +#650 = ORIENTED_EDGE('',*,*,#651,.T.); +#651 = EDGE_CURVE('',#652,#654,#656,.T.); +#652 = VERTEX_POINT('',#653); +#653 = CARTESIAN_POINT('',(143.35,27.517349337786,101.84810633322)); +#654 = VERTEX_POINT('',#655); +#655 = CARTESIAN_POINT('',(135.35,27.517349337786,101.84810633322)); +#656 = LINE('',#657,#658); +#657 = CARTESIAN_POINT('',(149.75,27.517349337786,101.84810633322)); +#658 = VECTOR('',#659,1.); +#659 = DIRECTION('',(-1.,0.,0.)); +#660 = ORIENTED_EDGE('',*,*,#661,.F.); +#661 = EDGE_CURVE('',#613,#654,#662,.T.); +#662 = CIRCLE('',#663,80.); +#663 = AXIS2_PLACEMENT_3D('',#664,#665,#666); +#664 = CARTESIAN_POINT('',(135.35,107.22496558516,95.014665606836)); +#665 = DIRECTION('',(-1.,0.,0.)); +#666 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#667 = ORIENTED_EDGE('',*,*,#612,.T.); +#668 = ORIENTED_EDGE('',*,*,#669,.F.); +#669 = EDGE_CURVE('',#652,#615,#670,.T.); +#670 = CIRCLE('',#671,80.); +#671 = AXIS2_PLACEMENT_3D('',#672,#673,#674); +#672 = CARTESIAN_POINT('',(143.35,107.22496558516,95.014665606836)); +#673 = DIRECTION('',(1.,0.,0.)); +#674 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#675 = CYLINDRICAL_SURFACE('',#676,80.); +#676 = AXIS2_PLACEMENT_3D('',#677,#678,#679); +#677 = CARTESIAN_POINT('',(149.75,107.22496558516,95.014665606836)); +#678 = DIRECTION('',(-1.,0.,0.)); +#679 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#680 = ADVANCED_FACE('',(#681),#699,.T.); +#681 = FACE_BOUND('',#682,.T.); +#682 = EDGE_LOOP('',(#683,#684,#691,#692)); +#683 = ORIENTED_EDGE('',*,*,#493,.T.); +#684 = ORIENTED_EDGE('',*,*,#685,.F.); +#685 = EDGE_CURVE('',#654,#485,#686,.T.); +#686 = CIRCLE('',#687,6.7); +#687 = AXIS2_PLACEMENT_3D('',#688,#689,#690); +#688 = CARTESIAN_POINT('',(135.35,34.192862198503,101.27580567238)); +#689 = DIRECTION('',(-1.,0.,0.)); +#690 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#691 = ORIENTED_EDGE('',*,*,#651,.F.); +#692 = ORIENTED_EDGE('',*,*,#693,.F.); +#693 = EDGE_CURVE('',#494,#652,#694,.T.); +#694 = CIRCLE('',#695,6.7); +#695 = AXIS2_PLACEMENT_3D('',#696,#697,#698); +#696 = CARTESIAN_POINT('',(143.35,34.192862198503,101.27580567238)); +#697 = DIRECTION('',(1.,0.,0.)); +#698 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#699 = CYLINDRICAL_SURFACE('',#700,6.7); +#700 = AXIS2_PLACEMENT_3D('',#701,#702,#703); +#701 = CARTESIAN_POINT('',(149.75,34.192862198503,101.27580567238)); +#702 = DIRECTION('',(-1.,0.,0.)); +#703 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#704 = ADVANCED_FACE('',(#705,#716,#731,#742,#753,#764),#775,.F.); +#705 = FACE_BOUND('',#706,.T.); +#706 = EDGE_LOOP('',(#707)); +#707 = ORIENTED_EDGE('',*,*,#708,.T.); +#708 = EDGE_CURVE('',#709,#709,#711,.T.); +#709 = VERTEX_POINT('',#710); +#710 = CARTESIAN_POINT('',(143.35,32.757240359251,70.818634947278)); +#711 = CIRCLE('',#712,39.3); +#712 = AXIS2_PLACEMENT_3D('',#713,#714,#715); +#713 = CARTESIAN_POINT('',(143.35,70.133761449651,82.963002826213)); +#714 = DIRECTION('',(-1.,0.,0.)); +#715 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#716 = FACE_BOUND('',#717,.T.); +#717 = EDGE_LOOP('',(#718,#719,#725,#726,#727,#728,#729,#730)); +#718 = ORIENTED_EDGE('',*,*,#637,.T.); +#719 = ORIENTED_EDGE('',*,*,#720,.T.); +#720 = EDGE_CURVE('',#630,#534,#721,.T.); +#721 = LINE('',#722,#723); +#722 = CARTESIAN_POINT('',(143.35,123.81465026716,50.429002129102)); +#723 = VECTOR('',#724,1.); +#724 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#725 = ORIENTED_EDGE('',*,*,#533,.T.); +#726 = ORIENTED_EDGE('',*,*,#573,.T.); +#727 = ORIENTED_EDGE('',*,*,#597,.T.); +#728 = ORIENTED_EDGE('',*,*,#501,.T.); +#729 = ORIENTED_EDGE('',*,*,#693,.T.); +#730 = ORIENTED_EDGE('',*,*,#669,.T.); +#731 = FACE_BOUND('',#732,.T.); +#732 = EDGE_LOOP('',(#733)); +#733 = ORIENTED_EDGE('',*,*,#734,.T.); +#734 = EDGE_CURVE('',#735,#735,#737,.T.); +#735 = VERTEX_POINT('',#736); +#736 = CARTESIAN_POINT('',(143.35,88.250305922417,120.07625984774)); +#737 = CIRCLE('',#738,1.); +#738 = AXIS2_PLACEMENT_3D('',#739,#740,#741); +#739 = CARTESIAN_POINT('',(143.35,89.201362438712,120.38527684212)); +#740 = DIRECTION('',(-1.,0.,0.)); +#741 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#742 = FACE_BOUND('',#743,.T.); +#743 = EDGE_LOOP('',(#744)); +#744 = ORIENTED_EDGE('',*,*,#745,.F.); +#745 = EDGE_CURVE('',#746,#746,#748,.T.); +#746 = VERTEX_POINT('',#747); +#747 = CARTESIAN_POINT('',(143.35,106.60497894926,63.586384842777)); +#748 = CIRCLE('',#749,1.); +#749 = AXIS2_PLACEMENT_3D('',#750,#751,#752); +#750 = CARTESIAN_POINT('',(143.35,107.55603546556,63.895401837152)); +#751 = DIRECTION('',(1.,0.,0.)); +#752 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#753 = FACE_BOUND('',#754,.T.); +#754 = EDGE_LOOP('',(#755)); +#755 = ORIENTED_EDGE('',*,*,#756,.T.); +#756 = EDGE_CURVE('',#757,#757,#759,.T.); +#757 = VERTEX_POINT('',#758); +#758 = CARTESIAN_POINT('',(143.35,31.760430917444,101.72158682089)); +#759 = CIRCLE('',#760,1.); +#760 = AXIS2_PLACEMENT_3D('',#761,#762,#763); +#761 = CARTESIAN_POINT('',(143.35,32.711487433739,102.03060381527)); +#762 = DIRECTION('',(-1.,0.,0.)); +#763 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#764 = FACE_BOUND('',#765,.T.); +#765 = EDGE_LOOP('',(#766)); +#766 = ORIENTED_EDGE('',*,*,#767,.F.); +#767 = EDGE_CURVE('',#768,#768,#770,.T.); +#768 = VERTEX_POINT('',#769); +#769 = CARTESIAN_POINT('',(143.35,50.115103944295,45.231711815927)); +#770 = CIRCLE('',#771,1.); +#771 = AXIS2_PLACEMENT_3D('',#772,#773,#774); +#772 = CARTESIAN_POINT('',(143.35,51.06616046059,45.540728810301)); +#773 = DIRECTION('',(1.,0.,0.)); +#774 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#775 = PLANE('',#776); +#776 = AXIS2_PLACEMENT_3D('',#777,#778,#779); +#777 = CARTESIAN_POINT('',(143.35,70.133761449651,82.963002826213)); +#778 = DIRECTION('',(-1.,0.,0.)); +#779 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#780 = ADVANCED_FACE('',(#781),#816,.F.); +#781 = FACE_BOUND('',#782,.F.); +#782 = EDGE_LOOP('',(#783,#794,#801,#808,#809)); +#783 = ORIENTED_EDGE('',*,*,#784,.F.); +#784 = EDGE_CURVE('',#785,#787,#789,.T.); +#785 = VERTEX_POINT('',#786); +#786 = CARTESIAN_POINT('',(142.75,33.327874269028,71.004045143903)); +#787 = VERTEX_POINT('',#788); +#788 = CARTESIAN_POINT('',(142.75,106.93964863027,94.921960508523)); +#789 = CIRCLE('',#790,38.7); +#790 = AXIS2_PLACEMENT_3D('',#791,#792,#793); +#791 = CARTESIAN_POINT('',(142.75,70.133761449651,82.963002826213)); +#792 = DIRECTION('',(1.,0.,0.)); +#793 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#794 = ORIENTED_EDGE('',*,*,#795,.T.); +#795 = EDGE_CURVE('',#785,#796,#798,.T.); +#796 = VERTEX_POINT('',#797); +#797 = CARTESIAN_POINT('',(142.05,33.327874269028,71.004045143903)); +#798 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#799,#800),.UNSPECIFIED.,.F.,.F., + (2,2),(0.6,1.3),.PIECEWISE_BEZIER_KNOTS.); +#799 = CARTESIAN_POINT('',(142.75,33.327874269028,71.004045143903)); +#800 = CARTESIAN_POINT('',(142.05,33.327874269028,71.004045143903)); +#801 = ORIENTED_EDGE('',*,*,#802,.T.); +#802 = EDGE_CURVE('',#796,#796,#803,.T.); +#803 = CIRCLE('',#804,38.7); +#804 = AXIS2_PLACEMENT_3D('',#805,#806,#807); +#805 = CARTESIAN_POINT('',(142.05,70.133761449651,82.963002826213)); +#806 = DIRECTION('',(1.,0.,0.)); +#807 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#808 = ORIENTED_EDGE('',*,*,#795,.F.); +#809 = ORIENTED_EDGE('',*,*,#810,.F.); +#810 = EDGE_CURVE('',#787,#785,#811,.T.); +#811 = CIRCLE('',#812,38.7); +#812 = AXIS2_PLACEMENT_3D('',#813,#814,#815); +#813 = CARTESIAN_POINT('',(142.75,70.133761449651,82.963002826213)); +#814 = DIRECTION('',(1.,0.,0.)); +#815 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#816 = CYLINDRICAL_SURFACE('',#817,38.7); +#817 = AXIS2_PLACEMENT_3D('',#818,#819,#820); +#818 = CARTESIAN_POINT('',(143.35,70.133761449651,82.963002826213)); +#819 = DIRECTION('',(-1.,0.,0.)); +#820 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#821 = ADVANCED_FACE('',(#822),#840,.F.); +#822 = FACE_BOUND('',#823,.F.); +#823 = EDGE_LOOP('',(#824,#833,#838,#839)); +#824 = ORIENTED_EDGE('',*,*,#825,.T.); +#825 = EDGE_CURVE('',#826,#826,#828,.T.); +#826 = VERTEX_POINT('',#827); +#827 = CARTESIAN_POINT('',(137.35,106.60497894926,63.586384842777)); +#828 = CIRCLE('',#829,1.); +#829 = AXIS2_PLACEMENT_3D('',#830,#831,#832); +#830 = CARTESIAN_POINT('',(137.35,107.55603546556,63.895401837152)); +#831 = DIRECTION('',(1.,0.,0.)); +#832 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#833 = ORIENTED_EDGE('',*,*,#834,.F.); +#834 = EDGE_CURVE('',#746,#826,#835,.T.); +#835 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#836,#837),.UNSPECIFIED.,.F.,.F., + (2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#836 = CARTESIAN_POINT('',(143.35,106.60497894926,63.586384842777)); +#837 = CARTESIAN_POINT('',(137.35,106.60497894926,63.586384842777)); +#838 = ORIENTED_EDGE('',*,*,#745,.F.); +#839 = ORIENTED_EDGE('',*,*,#834,.T.); +#840 = CYLINDRICAL_SURFACE('',#841,1.); +#841 = AXIS2_PLACEMENT_3D('',#842,#843,#844); +#842 = CARTESIAN_POINT('',(149.75,107.55603546556,63.895401837152)); +#843 = DIRECTION('',(-1.,0.,0.)); +#844 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#845 = ADVANCED_FACE('',(#846),#856,.F.); +#846 = FACE_BOUND('',#847,.F.); +#847 = EDGE_LOOP('',(#848,#849,#854,#855)); +#848 = ORIENTED_EDGE('',*,*,#63,.F.); +#849 = ORIENTED_EDGE('',*,*,#850,.F.); +#850 = EDGE_CURVE('',#735,#64,#851,.T.); +#851 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#852,#853),.UNSPECIFIED.,.F.,.F., + (2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#852 = CARTESIAN_POINT('',(143.35,88.250305922417,120.07625984774)); +#853 = CARTESIAN_POINT('',(137.35,88.250305922417,120.07625984774)); +#854 = ORIENTED_EDGE('',*,*,#734,.T.); +#855 = ORIENTED_EDGE('',*,*,#850,.T.); +#856 = CYLINDRICAL_SURFACE('',#857,1.); +#857 = AXIS2_PLACEMENT_3D('',#858,#859,#860); +#858 = CARTESIAN_POINT('',(149.75,89.201362438712,120.38527684212)); +#859 = DIRECTION('',(-1.,0.,0.)); +#860 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#861 = ADVANCED_FACE('',(#862),#880,.F.); +#862 = FACE_BOUND('',#863,.F.); +#863 = EDGE_LOOP('',(#864,#873,#878,#879)); +#864 = ORIENTED_EDGE('',*,*,#865,.T.); +#865 = EDGE_CURVE('',#866,#866,#868,.T.); +#866 = VERTEX_POINT('',#867); +#867 = CARTESIAN_POINT('',(137.35,50.115103944295,45.231711815927)); +#868 = CIRCLE('',#869,1.); +#869 = AXIS2_PLACEMENT_3D('',#870,#871,#872); +#870 = CARTESIAN_POINT('',(137.35,51.06616046059,45.540728810301)); +#871 = DIRECTION('',(1.,0.,0.)); +#872 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#873 = ORIENTED_EDGE('',*,*,#874,.F.); +#874 = EDGE_CURVE('',#768,#866,#875,.T.); +#875 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#876,#877),.UNSPECIFIED.,.F.,.F., + (2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#876 = CARTESIAN_POINT('',(143.35,50.115103944295,45.231711815926)); +#877 = CARTESIAN_POINT('',(137.35,50.115103944295,45.231711815926)); +#878 = ORIENTED_EDGE('',*,*,#767,.F.); +#879 = ORIENTED_EDGE('',*,*,#874,.T.); +#880 = CYLINDRICAL_SURFACE('',#881,1.); +#881 = AXIS2_PLACEMENT_3D('',#882,#883,#884); +#882 = CARTESIAN_POINT('',(149.75,51.06616046059,45.540728810301)); +#883 = DIRECTION('',(-1.,0.,0.)); +#884 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#885 = ADVANCED_FACE('',(#886),#896,.F.); +#886 = FACE_BOUND('',#887,.F.); +#887 = EDGE_LOOP('',(#888,#889,#894,#895)); +#888 = ORIENTED_EDGE('',*,*,#74,.F.); +#889 = ORIENTED_EDGE('',*,*,#890,.F.); +#890 = EDGE_CURVE('',#757,#75,#891,.T.); +#891 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#892,#893),.UNSPECIFIED.,.F.,.F., + (2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#892 = CARTESIAN_POINT('',(143.35,31.760430917444,101.72158682089)); +#893 = CARTESIAN_POINT('',(137.35,31.760430917444,101.72158682089)); +#894 = ORIENTED_EDGE('',*,*,#756,.T.); +#895 = ORIENTED_EDGE('',*,*,#890,.T.); +#896 = CYLINDRICAL_SURFACE('',#897,1.); +#897 = AXIS2_PLACEMENT_3D('',#898,#899,#900); +#898 = CARTESIAN_POINT('',(149.75,32.711487433739,102.03060381527)); +#899 = DIRECTION('',(-1.,0.,0.)); +#900 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#901 = ADVANCED_FACE('',(#902),#913,.F.); +#902 = FACE_BOUND('',#903,.F.); +#903 = EDGE_LOOP('',(#904,#905,#910,#911,#912)); +#904 = ORIENTED_EDGE('',*,*,#708,.T.); +#905 = ORIENTED_EDGE('',*,*,#906,.F.); +#906 = EDGE_CURVE('',#785,#709,#907,.T.); +#907 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#908,#909),.UNSPECIFIED.,.F.,.F., + (2,2),(0.282842712475,1.131370849898),.PIECEWISE_BEZIER_KNOTS.); +#908 = CARTESIAN_POINT('',(142.75000000017,33.327874269199, + 71.004045143958)); +#909 = CARTESIAN_POINT('',(143.35000000071,32.757240359934, + 70.818634947499)); +#910 = ORIENTED_EDGE('',*,*,#784,.T.); +#911 = ORIENTED_EDGE('',*,*,#810,.T.); +#912 = ORIENTED_EDGE('',*,*,#906,.T.); +#913 = CONICAL_SURFACE('',#914,38.5,0.7853981625); +#914 = AXIS2_PLACEMENT_3D('',#915,#916,#917); +#915 = CARTESIAN_POINT('',(142.55,70.133761449651,82.963002826213)); +#916 = DIRECTION('',(1.,0.,0.)); +#917 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#918 = ADVANCED_FACE('',(#919),#929,.F.); +#919 = FACE_BOUND('',#920,.F.); +#920 = EDGE_LOOP('',(#921,#922,#927,#928)); +#921 = ORIENTED_EDGE('',*,*,#802,.F.); +#922 = ORIENTED_EDGE('',*,*,#923,.F.); +#923 = EDGE_CURVE('',#246,#796,#924,.T.); +#924 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#925,#926),.UNSPECIFIED.,.F.,.F., + (2,2),(5.024295863279E-15,3.818376618407),.PIECEWISE_BEZIER_KNOTS.); +#925 = CARTESIAN_POINT('',(139.35,35.895726863025,71.838391028715)); +#926 = CARTESIAN_POINT('',(142.05000000242,33.327874271333, + 71.004045144651)); +#927 = ORIENTED_EDGE('',*,*,#245,.T.); +#928 = ORIENTED_EDGE('',*,*,#923,.T.); +#929 = CONICAL_SURFACE('',#930,36.,0.7853981625); +#930 = AXIS2_PLACEMENT_3D('',#931,#932,#933); +#931 = CARTESIAN_POINT('',(139.35,70.133761449651,82.963002826213)); +#932 = DIRECTION('',(1.,0.,0.)); +#933 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#934 = ADVANCED_FACE('',(#935),#941,.T.); +#935 = FACE_BOUND('',#936,.T.); +#936 = EDGE_LOOP('',(#937,#938,#939,#940)); +#937 = ORIENTED_EDGE('',*,*,#541,.F.); +#938 = ORIENTED_EDGE('',*,*,#720,.F.); +#939 = ORIENTED_EDGE('',*,*,#629,.F.); +#940 = ORIENTED_EDGE('',*,*,#460,.F.); +#941 = PLANE('',#942); +#942 = AXIS2_PLACEMENT_3D('',#943,#944,#945); +#943 = CARTESIAN_POINT('',(142.35,128.91971638611,51.036276437482)); +#944 = DIRECTION('',(0.707106781187,0.218508012224,-0.672498511964)); +#945 = DIRECTION('',(4.718447854657E-16,0.951056516295,0.309016994375)); +#946 = ADVANCED_FACE('',(#947),#958,.T.); +#947 = FACE_BOUND('',#948,.T.); +#948 = EDGE_LOOP('',(#949,#950,#951,#957)); +#949 = ORIENTED_EDGE('',*,*,#231,.F.); +#950 = ORIENTED_EDGE('',*,*,#390,.F.); +#951 = ORIENTED_EDGE('',*,*,#952,.F.); +#952 = EDGE_CURVE('',#274,#383,#953,.T.); +#953 = LINE('',#954,#955); +#954 = CARTESIAN_POINT('',(124.44439847907,65.480807706506, + 30.808160825397)); +#955 = VECTOR('',#956,1.); +#956 = DIRECTION('',(-0.258198889747,0.363570359859,-0.895069788768)); +#957 = ORIENTED_EDGE('',*,*,#282,.F.); +#958 = PLANE('',#959); +#959 = AXIS2_PLACEMENT_3D('',#960,#961,#962); +#960 = CARTESIAN_POINT('',(137.35,48.233416591365,72.699702195025)); +#961 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#962 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340458E-02) + ); +#963 = ADVANCED_FACE('',(#964),#989,.F.); +#964 = FACE_BOUND('',#965,.T.); +#965 = EDGE_LOOP('',(#966,#976,#982,#983)); +#966 = ORIENTED_EDGE('',*,*,#967,.F.); +#967 = EDGE_CURVE('',#968,#970,#972,.T.); +#968 = VERTEX_POINT('',#969); +#969 = CARTESIAN_POINT('',(130.35,61.947965641641,24.01852440821)); +#970 = VERTEX_POINT('',#971); +#971 = CARTESIAN_POINT('',(130.35,57.192683060165,22.473439436335)); +#972 = LINE('',#973,#974); +#973 = CARTESIAN_POINT('',(130.35,130.46480135799,46.280993856006)); +#974 = VECTOR('',#975,1.); +#975 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#976 = ORIENTED_EDGE('',*,*,#977,.F.); +#977 = EDGE_CURVE('',#367,#968,#978,.T.); +#978 = LINE('',#979,#980); +#979 = CARTESIAN_POINT('',(130.35,57.16092912612,38.751507883885)); +#980 = VECTOR('',#981,1.); +#981 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#982 = ORIENTED_EDGE('',*,*,#366,.F.); +#983 = ORIENTED_EDGE('',*,*,#984,.F.); +#984 = EDGE_CURVE('',#970,#359,#985,.T.); +#985 = LINE('',#986,#987); +#986 = CARTESIAN_POINT('',(130.35,47.44938332075,52.460232642096)); +#987 = VECTOR('',#988,1.); +#988 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#989 = PLANE('',#990); +#990 = AXIS2_PLACEMENT_3D('',#991,#992,#993); +#991 = CARTESIAN_POINT('',(130.35,81.888398549794,46.785949737633)); +#992 = DIRECTION('',(-1.,0.,0.)); +#993 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#994 = ADVANCED_FACE('',(#995),#1020,.T.); +#995 = FACE_BOUND('',#996,.T.); +#996 = EDGE_LOOP('',(#997,#1007,#1013,#1014)); +#997 = ORIENTED_EDGE('',*,*,#998,.T.); +#998 = EDGE_CURVE('',#999,#1001,#1003,.T.); +#999 = VERTEX_POINT('',#1000); +#1000 = CARTESIAN_POINT('',(123.00668500784,57.192683060165, + 22.473439436335)); +#1001 = VERTEX_POINT('',#1002); +#1002 = CARTESIAN_POINT('',(123.00668500784,61.947965641641, + 24.01852440821)); +#1003 = LINE('',#1004,#1005); +#1004 = CARTESIAN_POINT('',(123.00668500784,130.46480135799, + 46.280993856006)); +#1005 = VECTOR('',#1006,1.); +#1006 = DIRECTION('',(-6.247150620202E-16,0.951056516295,0.309016994375) + ); +#1007 = ORIENTED_EDGE('',*,*,#1008,.T.); +#1008 = EDGE_CURVE('',#1001,#968,#1009,.T.); +#1009 = LINE('',#1010,#1011); +#1010 = CARTESIAN_POINT('',(75.,61.947965641641,24.01852440821)); +#1011 = VECTOR('',#1012,1.); +#1012 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#1013 = ORIENTED_EDGE('',*,*,#967,.T.); +#1014 = ORIENTED_EDGE('',*,*,#1015,.F.); +#1015 = EDGE_CURVE('',#999,#970,#1016,.T.); +#1016 = LINE('',#1017,#1018); +#1017 = CARTESIAN_POINT('',(143.75,57.192683060165,22.473439436335)); +#1018 = VECTOR('',#1019,1.); +#1019 = DIRECTION('',(1.,1.715388910778E-17,-5.279424210553E-17)); +#1020 = PLANE('',#1021); +#1021 = AXIS2_PLACEMENT_3D('',#1022,#1023,#1024); +#1022 = CARTESIAN_POINT('',(75.,130.46480135799,46.280993856006)); +#1023 = DIRECTION('',(-5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#1024 = DIRECTION('',(3.538835890993E-15,0.951056516295,0.309016994375) + ); +#1025 = ADVANCED_FACE('',(#1026),#1044,.T.); +#1026 = FACE_BOUND('',#1027,.T.); +#1027 = EDGE_LOOP('',(#1028,#1029,#1030,#1031,#1037,#1038)); +#1028 = ORIENTED_EDGE('',*,*,#273,.T.); +#1029 = ORIENTED_EDGE('',*,*,#952,.T.); +#1030 = ORIENTED_EDGE('',*,*,#382,.F.); +#1031 = ORIENTED_EDGE('',*,*,#1032,.F.); +#1032 = EDGE_CURVE('',#1001,#375,#1033,.T.); +#1033 = LINE('',#1034,#1035); +#1034 = CARTESIAN_POINT('',(124.34643097,60.402880669766,28.773806989686 + )); +#1035 = VECTOR('',#1036,1.); +#1036 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#1037 = ORIENTED_EDGE('',*,*,#998,.F.); +#1038 = ORIENTED_EDGE('',*,*,#1039,.F.); +#1039 = EDGE_CURVE('',#261,#999,#1040,.T.); +#1040 = LINE('',#1041,#1042); +#1041 = CARTESIAN_POINT('',(132.27871870344,46.499551431885, + 55.383514609539)); +#1042 = VECTOR('',#1043,1.); +#1043 = DIRECTION('',(-0.258819045103,0.298487495629,-0.91865005135)); +#1044 = PLANE('',#1045); +#1045 = AXIS2_PLACEMENT_3D('',#1046,#1047,#1048); +#1046 = CARTESIAN_POINT('',(124.34643097,60.402880669766,28.773806989686 + )); +#1047 = DIRECTION('',(-0.965925826289,-7.997948340457E-02,0.246151539386 + )); +#1048 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#1049 = ADVANCED_FACE('',(#1050),#1058,.T.); +#1050 = FACE_BOUND('',#1051,.T.); +#1051 = EDGE_LOOP('',(#1052,#1053,#1054,#1055,#1056,#1057)); +#1052 = ORIENTED_EDGE('',*,*,#260,.F.); +#1053 = ORIENTED_EDGE('',*,*,#1039,.T.); +#1054 = ORIENTED_EDGE('',*,*,#1015,.T.); +#1055 = ORIENTED_EDGE('',*,*,#984,.T.); +#1056 = ORIENTED_EDGE('',*,*,#358,.T.); +#1057 = ORIENTED_EDGE('',*,*,#113,.T.); +#1058 = PLANE('',#1059); +#1059 = AXIS2_PLACEMENT_3D('',#1060,#1061,#1062); +#1060 = CARTESIAN_POINT('',(143.75,47.44938332075,52.460232642096)); +#1061 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1062 = DIRECTION('',(-1.,-0.,0.)); +#1063 = ADVANCED_FACE('',(#1064),#1070,.F.); +#1064 = FACE_BOUND('',#1065,.T.); +#1065 = EDGE_LOOP('',(#1066,#1067,#1068,#1069)); +#1066 = ORIENTED_EDGE('',*,*,#374,.F.); +#1067 = ORIENTED_EDGE('',*,*,#977,.T.); +#1068 = ORIENTED_EDGE('',*,*,#1008,.F.); +#1069 = ORIENTED_EDGE('',*,*,#1032,.T.); +#1070 = PLANE('',#1071); +#1071 = AXIS2_PLACEMENT_3D('',#1072,#1073,#1074); +#1072 = CARTESIAN_POINT('',(130.17834250392,56.664669076256, + 40.278839269508)); +#1073 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1074 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1075 = ADVANCED_FACE('',(#1076),#1079,.F.); +#1076 = FACE_BOUND('',#1077,.T.); +#1077 = EDGE_LOOP('',(#1078)); +#1078 = ORIENTED_EDGE('',*,*,#865,.T.); +#1079 = PLANE('',#1080); +#1080 = AXIS2_PLACEMENT_3D('',#1081,#1082,#1083); +#1081 = CARTESIAN_POINT('',(137.35,81.888398549794,46.785949737633)); +#1082 = DIRECTION('',(-1.,0.,0.)); +#1083 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1084 = ADVANCED_FACE('',(#1085),#1155,.F.); +#1085 = FACE_BOUND('',#1086,.T.); +#1086 = EDGE_LOOP('',(#1087,#1098,#1107,#1116,#1122,#1123,#1124,#1125, + #1126,#1127,#1128,#1129,#1130,#1131,#1139,#1148)); +#1087 = ORIENTED_EDGE('',*,*,#1088,.F.); +#1088 = EDGE_CURVE('',#1089,#1091,#1093,.T.); +#1089 = VERTEX_POINT('',#1090); +#1090 = CARTESIAN_POINT('',(135.35,31.770318139601,104.07246086791)); +#1091 = VERTEX_POINT('',#1092); +#1092 = CARTESIAN_POINT('',(135.35,88.762610929421,122.5903793288)); +#1093 = CIRCLE('',#1094,77.); +#1094 = AXIS2_PLACEMENT_3D('',#1095,#1096,#1097); +#1095 = CARTESIAN_POINT('',(135.35,82.185424230274,45.871798690702)); +#1096 = DIRECTION('',(-1.,0.,0.)); +#1097 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1098 = ORIENTED_EDGE('',*,*,#1099,.F.); +#1099 = EDGE_CURVE('',#1100,#1089,#1102,.T.); +#1100 = VERTEX_POINT('',#1101); +#1101 = CARTESIAN_POINT('',(135.35,30.506384947062,101.59185230598)); +#1102 = CIRCLE('',#1103,3.7); +#1103 = AXIS2_PLACEMENT_3D('',#1104,#1105,#1106); +#1104 = CARTESIAN_POINT('',(135.35,34.192862198503,101.27580567238)); +#1105 = DIRECTION('',(-1.,0.,0.)); +#1106 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1107 = ORIENTED_EDGE('',*,*,#1108,.F.); +#1108 = EDGE_CURVE('',#1109,#1100,#1111,.T.); +#1109 = VERTEX_POINT('',#1110); +#1110 = CARTESIAN_POINT('',(135.35,33.993613830435,71.220357039965)); +#1111 = CIRCLE('',#1112,77.); +#1112 = AXIS2_PLACEMENT_3D('',#1113,#1114,#1115); +#1113 = CARTESIAN_POINT('',(135.35,107.22496558516,95.014665606836)); +#1114 = DIRECTION('',(-1.,0.,0.)); +#1115 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1116 = ORIENTED_EDGE('',*,*,#1117,.F.); +#1117 = EDGE_CURVE('',#344,#1109,#1118,.T.); +#1118 = LINE('',#1119,#1120); +#1119 = CARTESIAN_POINT('',(135.35,33.993613830435,71.220357039965)); +#1120 = VECTOR('',#1121,1.); +#1121 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1122 = ORIENTED_EDGE('',*,*,#343,.F.); +#1123 = ORIENTED_EDGE('',*,*,#622,.T.); +#1124 = ORIENTED_EDGE('',*,*,#661,.T.); +#1125 = ORIENTED_EDGE('',*,*,#685,.T.); +#1126 = ORIENTED_EDGE('',*,*,#484,.T.); +#1127 = ORIENTED_EDGE('',*,*,#589,.T.); +#1128 = ORIENTED_EDGE('',*,*,#556,.T.); +#1129 = ORIENTED_EDGE('',*,*,#517,.T.); +#1130 = ORIENTED_EDGE('',*,*,#444,.F.); +#1131 = ORIENTED_EDGE('',*,*,#1132,.F.); +#1132 = EDGE_CURVE('',#1133,#437,#1135,.T.); +#1133 = VERTEX_POINT('',#1134); +#1134 = CARTESIAN_POINT('',(135.35,106.27390906886,94.705648612461)); +#1135 = LINE('',#1136,#1137); +#1136 = CARTESIAN_POINT('',(135.35,106.27390906886,94.705648612461)); +#1137 = VECTOR('',#1138,1.); +#1138 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1139 = ORIENTED_EDGE('',*,*,#1140,.F.); +#1140 = EDGE_CURVE('',#1141,#1133,#1143,.T.); +#1141 = VERTEX_POINT('',#1142); +#1142 = CARTESIAN_POINT('',(135.35,91.243219491354,121.32644613626)); +#1143 = CIRCLE('',#1144,77.); +#1144 = AXIS2_PLACEMENT_3D('',#1145,#1146,#1147); +#1145 = CARTESIAN_POINT('',(135.35,33.04255731414,70.91134004559)); +#1146 = DIRECTION('',(-1.,0.,0.)); +#1147 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1148 = ORIENTED_EDGE('',*,*,#1149,.F.); +#1149 = EDGE_CURVE('',#1091,#1141,#1150,.T.); +#1150 = CIRCLE('',#1151,3.7); +#1151 = AXIS2_PLACEMENT_3D('',#1152,#1153,#1154); +#1152 = CARTESIAN_POINT('',(135.35,88.446564295826,118.90390207736)); +#1153 = DIRECTION('',(-1.,0.,0.)); +#1154 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1155 = PLANE('',#1156); +#1156 = AXIS2_PLACEMENT_3D('',#1157,#1158,#1159); +#1157 = CARTESIAN_POINT('',(135.35,34.192862198503,101.27580567238)); +#1158 = DIRECTION('',(1.,0.,0.)); +#1159 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#1160 = ADVANCED_FACE('',(#1161),#1177,.F.); +#1161 = FACE_BOUND('',#1162,.F.); +#1162 = EDGE_LOOP('',(#1163,#1169,#1170,#1176)); +#1163 = ORIENTED_EDGE('',*,*,#1164,.F.); +#1164 = EDGE_CURVE('',#156,#1091,#1165,.T.); +#1165 = LINE('',#1166,#1167); +#1166 = CARTESIAN_POINT('',(137.35,88.762610929421,122.5903793288)); +#1167 = VECTOR('',#1168,1.); +#1168 = DIRECTION('',(-1.,0.,0.)); +#1169 = ORIENTED_EDGE('',*,*,#164,.F.); +#1170 = ORIENTED_EDGE('',*,*,#1171,.T.); +#1171 = EDGE_CURVE('',#165,#1141,#1172,.T.); +#1172 = LINE('',#1173,#1174); +#1173 = CARTESIAN_POINT('',(137.35,91.243219491354,121.32644613626)); +#1174 = VECTOR('',#1175,1.); +#1175 = DIRECTION('',(-1.,0.,0.)); +#1176 = ORIENTED_EDGE('',*,*,#1149,.F.); +#1177 = CYLINDRICAL_SURFACE('',#1178,3.7); +#1178 = AXIS2_PLACEMENT_3D('',#1179,#1180,#1181); +#1179 = CARTESIAN_POINT('',(137.35,88.446564295826,118.90390207736)); +#1180 = DIRECTION('',(-1.,0.,0.)); +#1181 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1182 = ADVANCED_FACE('',(#1183),#1194,.F.); +#1183 = FACE_BOUND('',#1184,.F.); +#1184 = EDGE_LOOP('',(#1185,#1186,#1187,#1193)); +#1185 = ORIENTED_EDGE('',*,*,#1171,.F.); +#1186 = ORIENTED_EDGE('',*,*,#173,.F.); +#1187 = ORIENTED_EDGE('',*,*,#1188,.T.); +#1188 = EDGE_CURVE('',#174,#1133,#1189,.T.); +#1189 = LINE('',#1190,#1191); +#1190 = CARTESIAN_POINT('',(137.35,106.27390906886,94.705648612461)); +#1191 = VECTOR('',#1192,1.); +#1192 = DIRECTION('',(-1.,0.,0.)); +#1193 = ORIENTED_EDGE('',*,*,#1140,.F.); +#1194 = CYLINDRICAL_SURFACE('',#1195,77.); +#1195 = AXIS2_PLACEMENT_3D('',#1196,#1197,#1198); +#1196 = CARTESIAN_POINT('',(137.35,33.04255731414,70.91134004559)); +#1197 = DIRECTION('',(-1.,0.,0.)); +#1198 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1199 = ADVANCED_FACE('',(#1200),#1206,.F.); +#1200 = FACE_BOUND('',#1201,.T.); +#1201 = EDGE_LOOP('',(#1202,#1203,#1204,#1205)); +#1202 = ORIENTED_EDGE('',*,*,#1132,.T.); +#1203 = ORIENTED_EDGE('',*,*,#436,.T.); +#1204 = ORIENTED_EDGE('',*,*,#182,.T.); +#1205 = ORIENTED_EDGE('',*,*,#1188,.T.); +#1206 = PLANE('',#1207); +#1207 = AXIS2_PLACEMENT_3D('',#1208,#1209,#1210); +#1208 = CARTESIAN_POINT('',(137.35,106.27390906886,94.705648612461)); +#1209 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1210 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1211 = ADVANCED_FACE('',(#1212),#1228,.F.); +#1212 = FACE_BOUND('',#1213,.F.); +#1213 = EDGE_LOOP('',(#1214,#1220,#1221,#1227)); +#1214 = ORIENTED_EDGE('',*,*,#1215,.T.); +#1215 = EDGE_CURVE('',#1100,#138,#1216,.T.); +#1216 = LINE('',#1217,#1218); +#1217 = CARTESIAN_POINT('',(137.35,30.506384947062,101.59185230598)); +#1218 = VECTOR('',#1219,1.); +#1219 = DIRECTION('',(1.,0.,0.)); +#1220 = ORIENTED_EDGE('',*,*,#146,.F.); +#1221 = ORIENTED_EDGE('',*,*,#1222,.F.); +#1222 = EDGE_CURVE('',#1089,#147,#1223,.T.); +#1223 = LINE('',#1224,#1225); +#1224 = CARTESIAN_POINT('',(137.35,31.770318139601,104.07246086791)); +#1225 = VECTOR('',#1226,1.); +#1226 = DIRECTION('',(1.,0.,0.)); +#1227 = ORIENTED_EDGE('',*,*,#1099,.F.); +#1228 = CYLINDRICAL_SURFACE('',#1229,3.7); +#1229 = AXIS2_PLACEMENT_3D('',#1230,#1231,#1232); +#1230 = CARTESIAN_POINT('',(137.35,34.192862198503,101.27580567238)); +#1231 = DIRECTION('',(-1.,0.,0.)); +#1232 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1233 = ADVANCED_FACE('',(#1234),#1245,.F.); +#1234 = FACE_BOUND('',#1235,.F.); +#1235 = EDGE_LOOP('',(#1236,#1242,#1243,#1244)); +#1236 = ORIENTED_EDGE('',*,*,#1237,.T.); +#1237 = EDGE_CURVE('',#1109,#130,#1238,.T.); +#1238 = LINE('',#1239,#1240); +#1239 = CARTESIAN_POINT('',(137.35,33.993613830435,71.220357039965)); +#1240 = VECTOR('',#1241,1.); +#1241 = DIRECTION('',(1.,0.,0.)); +#1242 = ORIENTED_EDGE('',*,*,#137,.F.); +#1243 = ORIENTED_EDGE('',*,*,#1215,.F.); +#1244 = ORIENTED_EDGE('',*,*,#1108,.F.); +#1245 = CYLINDRICAL_SURFACE('',#1246,77.); +#1246 = AXIS2_PLACEMENT_3D('',#1247,#1248,#1249); +#1247 = CARTESIAN_POINT('',(137.35,107.22496558516,95.014665606836)); +#1248 = DIRECTION('',(-1.,0.,0.)); +#1249 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1250 = ADVANCED_FACE('',(#1251),#1257,.F.); +#1251 = FACE_BOUND('',#1252,.T.); +#1252 = EDGE_LOOP('',(#1253,#1254,#1255,#1256)); +#1253 = ORIENTED_EDGE('',*,*,#1117,.T.); +#1254 = ORIENTED_EDGE('',*,*,#1237,.T.); +#1255 = ORIENTED_EDGE('',*,*,#129,.T.); +#1256 = ORIENTED_EDGE('',*,*,#351,.T.); +#1257 = PLANE('',#1258); +#1258 = AXIS2_PLACEMENT_3D('',#1259,#1260,#1261); +#1259 = CARTESIAN_POINT('',(137.35,33.993613830435,71.220357039965)); +#1260 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1261 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1262 = ADVANCED_FACE('',(#1263),#1269,.F.); +#1263 = FACE_BOUND('',#1264,.F.); +#1264 = EDGE_LOOP('',(#1265,#1266,#1267,#1268)); +#1265 = ORIENTED_EDGE('',*,*,#1164,.T.); +#1266 = ORIENTED_EDGE('',*,*,#1088,.F.); +#1267 = ORIENTED_EDGE('',*,*,#1222,.T.); +#1268 = ORIENTED_EDGE('',*,*,#155,.F.); +#1269 = CYLINDRICAL_SURFACE('',#1270,77.); +#1270 = AXIS2_PLACEMENT_3D('',#1271,#1272,#1273); +#1271 = CARTESIAN_POINT('',(137.35,82.185424230274,45.871798690702)); +#1272 = DIRECTION('',(-1.,0.,0.)); +#1273 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1274 = ADVANCED_FACE('',(#1275),#1278,.F.); +#1275 = FACE_BOUND('',#1276,.T.); +#1276 = EDGE_LOOP('',(#1277)); +#1277 = ORIENTED_EDGE('',*,*,#825,.T.); +#1278 = PLANE('',#1279); +#1279 = AXIS2_PLACEMENT_3D('',#1280,#1281,#1282); +#1280 = CARTESIAN_POINT('',(137.35,81.888398549794,46.785949737633)); +#1281 = DIRECTION('',(-1.,0.,0.)); +#1282 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1283 = ADVANCED_FACE('',(#1284),#1309,.F.); +#1284 = FACE_BOUND('',#1285,.T.); +#1285 = EDGE_LOOP('',(#1286,#1287,#1295,#1303)); +#1286 = ORIENTED_EDGE('',*,*,#413,.F.); +#1287 = ORIENTED_EDGE('',*,*,#1288,.F.); +#1288 = EDGE_CURVE('',#1289,#406,#1291,.T.); +#1289 = VERTEX_POINT('',#1290); +#1290 = CARTESIAN_POINT('',(123.00668500784,111.40290448898, + 40.087408115707)); +#1291 = LINE('',#1292,#1293); +#1292 = CARTESIAN_POINT('',(124.34643097,109.85781951711,44.842690697183 + )); +#1293 = VECTOR('',#1294,1.); +#1294 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#1295 = ORIENTED_EDGE('',*,*,#1296,.F.); +#1296 = EDGE_CURVE('',#1297,#1289,#1299,.T.); +#1297 = VERTEX_POINT('',#1298); +#1298 = CARTESIAN_POINT('',(130.35,111.40290448898,40.087408115707)); +#1299 = LINE('',#1300,#1301); +#1300 = CARTESIAN_POINT('',(75.,111.40290448898,40.087408115707)); +#1301 = VECTOR('',#1302,1.); +#1302 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#1303 = ORIENTED_EDGE('',*,*,#1304,.T.); +#1304 = EDGE_CURVE('',#1297,#414,#1305,.T.); +#1305 = LINE('',#1306,#1307); +#1306 = CARTESIAN_POINT('',(130.35,106.61586797346,54.820391591382)); +#1307 = VECTOR('',#1308,1.); +#1308 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1309 = PLANE('',#1310); +#1310 = AXIS2_PLACEMENT_3D('',#1311,#1312,#1313); +#1311 = CARTESIAN_POINT('',(130.17834250392,106.1196079236, + 56.347722977005)); +#1312 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1313 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1314 = ADVANCED_FACE('',(#1315),#1342,.T.); +#1315 = FACE_BOUND('',#1316,.T.); +#1316 = EDGE_LOOP('',(#1317,#1318,#1319,#1320,#1328,#1336)); +#1317 = ORIENTED_EDGE('',*,*,#312,.F.); +#1318 = ORIENTED_EDGE('',*,*,#85,.T.); +#1319 = ORIENTED_EDGE('',*,*,#429,.T.); +#1320 = ORIENTED_EDGE('',*,*,#1321,.T.); +#1321 = EDGE_CURVE('',#422,#1322,#1324,.T.); +#1322 = VERTEX_POINT('',#1323); +#1323 = CARTESIAN_POINT('',(130.35,116.15818707046,41.632493087582)); +#1324 = LINE('',#1325,#1326); +#1325 = CARTESIAN_POINT('',(130.35,106.41488733104,71.619286293343)); +#1326 = VECTOR('',#1327,1.); +#1327 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1328 = ORIENTED_EDGE('',*,*,#1329,.T.); +#1329 = EDGE_CURVE('',#1322,#1330,#1332,.T.); +#1330 = VERTEX_POINT('',#1331); +#1331 = CARTESIAN_POINT('',(123.00668500784,116.15818707046, + 41.632493087582)); +#1332 = LINE('',#1333,#1334); +#1333 = CARTESIAN_POINT('',(143.75,116.15818707046,41.632493087582)); +#1334 = VECTOR('',#1335,1.); +#1335 = DIRECTION('',(-1.,-1.715388910778E-17,5.279424210553E-17)); +#1336 = ORIENTED_EDGE('',*,*,#1337,.T.); +#1337 = EDGE_CURVE('',#1330,#304,#1338,.T.); +#1338 = LINE('',#1339,#1340); +#1339 = CARTESIAN_POINT('',(132.27871870344,105.46505544218, + 74.542568260785)); +#1340 = VECTOR('',#1341,1.); +#1341 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#1342 = PLANE('',#1343); +#1343 = AXIS2_PLACEMENT_3D('',#1344,#1345,#1346); +#1344 = CARTESIAN_POINT('',(143.75,106.41488733104,71.619286293343)); +#1345 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1346 = DIRECTION('',(-1.,0.,0.)); +#1347 = ADVANCED_FACE('',(#1348),#1359,.F.); +#1348 = FACE_BOUND('',#1349,.T.); +#1349 = EDGE_LOOP('',(#1350,#1351,#1352,#1358)); +#1350 = ORIENTED_EDGE('',*,*,#421,.F.); +#1351 = ORIENTED_EDGE('',*,*,#1304,.F.); +#1352 = ORIENTED_EDGE('',*,*,#1353,.F.); +#1353 = EDGE_CURVE('',#1322,#1297,#1354,.T.); +#1354 = LINE('',#1355,#1356); +#1355 = CARTESIAN_POINT('',(130.35,130.46480135799,46.280993856006)); +#1356 = VECTOR('',#1357,1.); +#1357 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1358 = ORIENTED_EDGE('',*,*,#1321,.F.); +#1359 = PLANE('',#1360); +#1360 = AXIS2_PLACEMENT_3D('',#1361,#1362,#1363); +#1361 = CARTESIAN_POINT('',(130.35,81.888398549794,46.785949737633)); +#1362 = DIRECTION('',(-1.,0.,0.)); +#1363 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#1364 = ADVANCED_FACE('',(#1365),#1383,.T.); +#1365 = FACE_BOUND('',#1366,.T.); +#1366 = EDGE_LOOP('',(#1367,#1373,#1374,#1375,#1381,#1382)); +#1367 = ORIENTED_EDGE('',*,*,#1368,.F.); +#1368 = EDGE_CURVE('',#1289,#1330,#1369,.T.); +#1369 = LINE('',#1370,#1371); +#1370 = CARTESIAN_POINT('',(123.00668500784,130.46480135799, + 46.280993856006)); +#1371 = VECTOR('',#1372,1.); +#1372 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1373 = ORIENTED_EDGE('',*,*,#1288,.T.); +#1374 = ORIENTED_EDGE('',*,*,#405,.F.); +#1375 = ORIENTED_EDGE('',*,*,#1376,.T.); +#1376 = EDGE_CURVE('',#398,#293,#1377,.T.); +#1377 = LINE('',#1378,#1379); +#1378 = CARTESIAN_POINT('',(124.44439847907,104.55392706561, + 43.503786898431)); +#1379 = VECTOR('',#1380,1.); +#1380 = DIRECTION('',(0.258198889747,-0.231974221834,0.937827965961)); +#1381 = ORIENTED_EDGE('',*,*,#303,.T.); +#1382 = ORIENTED_EDGE('',*,*,#1337,.F.); +#1383 = PLANE('',#1384); +#1384 = AXIS2_PLACEMENT_3D('',#1385,#1386,#1387); +#1385 = CARTESIAN_POINT('',(124.34643097,109.85781951711,44.842690697183 + )); +#1386 = DIRECTION('',(-0.965925826289,-7.997948340457E-02,0.246151539386 + )); +#1387 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#1388 = ADVANCED_FACE('',(#1389),#1395,.T.); +#1389 = FACE_BOUND('',#1390,.T.); +#1390 = EDGE_LOOP('',(#1391,#1392,#1393,#1394)); +#1391 = ORIENTED_EDGE('',*,*,#1353,.T.); +#1392 = ORIENTED_EDGE('',*,*,#1296,.T.); +#1393 = ORIENTED_EDGE('',*,*,#1368,.T.); +#1394 = ORIENTED_EDGE('',*,*,#1329,.F.); +#1395 = PLANE('',#1396); +#1396 = AXIS2_PLACEMENT_3D('',#1397,#1398,#1399); +#1397 = CARTESIAN_POINT('',(75.,130.46480135799,46.280993856006)); +#1398 = DIRECTION('',(-5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#1399 = DIRECTION('',(3.538835890993E-15,0.951056516295,0.309016994375) + ); +#1400 = ADVANCED_FACE('',(#1401),#1407,.T.); +#1401 = FACE_BOUND('',#1402,.T.); +#1402 = EDGE_LOOP('',(#1403,#1404,#1405,#1406)); +#1403 = ORIENTED_EDGE('',*,*,#397,.F.); +#1404 = ORIENTED_EDGE('',*,*,#215,.F.); +#1405 = ORIENTED_EDGE('',*,*,#292,.F.); +#1406 = ORIENTED_EDGE('',*,*,#1376,.F.); +#1407 = PLANE('',#1408); +#1408 = AXIS2_PLACEMENT_3D('',#1409,#1410,#1411); +#1409 = CARTESIAN_POINT('',(137.35,93.884129373533,87.532517925022)); +#1410 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#1411 = DIRECTION('',(-0.965925826289,-0.246151539386, + -7.997948340457E-02)); +#1412 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1416)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#1413,#1414,#1415)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#1413 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#1414 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#1415 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#1416 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-06),#1413, + 'distance_accuracy_value','confusion accuracy'); +#1417 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1418,#1420); +#1418 = ( REPRESENTATION_RELATIONSHIP('','',#56,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1419) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#1419 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15); +#1420 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #1421); +#1421 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','fan_mount_right','',#5,#51,$ + ); +#1422 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#53)); +#1423 = SHAPE_DEFINITION_REPRESENTATION(#1424,#1430); +#1424 = PRODUCT_DEFINITION_SHAPE('','',#1425); +#1425 = PRODUCT_DEFINITION('design','',#1426,#1429); +#1426 = PRODUCT_DEFINITION_FORMATION('','',#1427); +#1427 = PRODUCT('chassis','chassis','',(#1428)); +#1428 = PRODUCT_CONTEXT('',#2,'mechanical'); +#1429 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#1430 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#1431),#3493); +#1431 = MANIFOLD_SOLID_BREP('',#1432); +#1432 = CLOSED_SHELL('',(#1433,#1505,#1586,#1640,#1671,#2032,#2152,#2176 + ,#2200,#2217,#2242,#2266,#2284,#2308,#2341,#2358,#2389,#2422,#2446, + #2472,#2503,#2536,#2560,#2586,#2617,#2641,#2665,#2682,#2713,#2746, + #2770,#2796,#2827,#2851,#2875,#2892,#2923,#2956,#2980,#3006,#3039, + #3074,#3118,#3156,#3168,#3180,#3192,#3287,#3304,#3321,#3343,#3360, + #3377,#3399,#3411,#3423,#3445,#3457,#3469,#3481)); +#1433 = ADVANCED_FACE('',(#1434),#1500,.T.); +#1434 = FACE_BOUND('',#1435,.T.); +#1435 = EDGE_LOOP('',(#1436,#1446,#1454,#1462,#1470,#1478,#1486,#1494)); +#1436 = ORIENTED_EDGE('',*,*,#1437,.T.); +#1437 = EDGE_CURVE('',#1438,#1440,#1442,.T.); +#1438 = VERTEX_POINT('',#1439); +#1439 = CARTESIAN_POINT('',(109.75,44.126103320003,41.990896584144)); +#1440 = VERTEX_POINT('',#1441); +#1441 = CARTESIAN_POINT('',(100.2261538817,44.126103320003, + 41.990896584144)); +#1442 = LINE('',#1443,#1444); +#1443 = CARTESIAN_POINT('',(75.,44.126103320003,41.990896584144)); +#1444 = VECTOR('',#1445,1.); +#1445 = DIRECTION('',(-1.,0.,0.)); +#1446 = ORIENTED_EDGE('',*,*,#1447,.F.); +#1447 = EDGE_CURVE('',#1448,#1440,#1450,.T.); +#1448 = VERTEX_POINT('',#1449); +#1449 = CARTESIAN_POINT('',(100.2261538817,49.564802421002, + 25.252301897349)); +#1450 = LINE('',#1451,#1452); +#1451 = CARTESIAN_POINT('',(100.2261538817,49.564802421002, + 25.252301897349)); +#1452 = VECTOR('',#1453,1.); +#1453 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1454 = ORIENTED_EDGE('',*,*,#1455,.T.); +#1455 = EDGE_CURVE('',#1448,#1456,#1458,.T.); +#1456 = VERTEX_POINT('',#1457); +#1457 = CARTESIAN_POINT('',(103.65,49.564802421002,25.252301897349)); +#1458 = LINE('',#1459,#1460); +#1459 = CARTESIAN_POINT('',(62.5,49.564802421002,25.252301897349)); +#1460 = VECTOR('',#1461,1.); +#1461 = DIRECTION('',(1.,0.,0.)); +#1462 = ORIENTED_EDGE('',*,*,#1463,.T.); +#1463 = EDGE_CURVE('',#1456,#1464,#1466,.T.); +#1464 = VERTEX_POINT('',#1465); +#1465 = CARTESIAN_POINT('',(103.65,51.418904387252,19.545962799578)); +#1466 = LINE('',#1467,#1468); +#1467 = CARTESIAN_POINT('',(103.65,41.6450965178,49.626650374905)); +#1468 = VECTOR('',#1469,1.); +#1469 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1470 = ORIENTED_EDGE('',*,*,#1471,.F.); +#1471 = EDGE_CURVE('',#1472,#1464,#1474,.T.); +#1472 = VERTEX_POINT('',#1473); +#1473 = CARTESIAN_POINT('',(109.85,51.418904387252,19.545962799578)); +#1474 = LINE('',#1475,#1476); +#1475 = CARTESIAN_POINT('',(75.,51.418904387252,19.545962799578)); +#1476 = VECTOR('',#1477,1.); +#1477 = DIRECTION('',(-1.,0.,0.)); +#1478 = ORIENTED_EDGE('',*,*,#1479,.F.); +#1479 = EDGE_CURVE('',#1480,#1472,#1482,.T.); +#1480 = VERTEX_POINT('',#1481); +#1481 = CARTESIAN_POINT('',(109.85,49.564802421002,25.252301897349)); +#1482 = LINE('',#1483,#1484); +#1483 = CARTESIAN_POINT('',(109.85,50.491853404127,22.399132348464)); +#1484 = VECTOR('',#1485,1.); +#1485 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1486 = ORIENTED_EDGE('',*,*,#1487,.T.); +#1487 = EDGE_CURVE('',#1480,#1488,#1490,.T.); +#1488 = VERTEX_POINT('',#1489); +#1489 = CARTESIAN_POINT('',(109.75,49.564802421002,25.252301897349)); +#1490 = LINE('',#1491,#1492); +#1491 = CARTESIAN_POINT('',(75.,49.564802421002,25.252301897349)); +#1492 = VECTOR('',#1493,1.); +#1493 = DIRECTION('',(-1.,0.,0.)); +#1494 = ORIENTED_EDGE('',*,*,#1495,.T.); +#1495 = EDGE_CURVE('',#1488,#1438,#1496,.T.); +#1496 = LINE('',#1497,#1498); +#1497 = CARTESIAN_POINT('',(109.75,36.895105651629,64.24561906545)); +#1498 = VECTOR('',#1499,1.); +#1499 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1500 = PLANE('',#1501); +#1501 = AXIS2_PLACEMENT_3D('',#1502,#1503,#1504); +#1502 = CARTESIAN_POINT('',(62.5,36.895105651629,64.24561906545)); +#1503 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1504 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1505 = ADVANCED_FACE('',(#1506),#1581,.T.); +#1506 = FACE_BOUND('',#1507,.T.); +#1507 = EDGE_LOOP('',(#1508,#1518,#1526,#1534,#1542,#1551,#1559,#1567, + #1575)); +#1508 = ORIENTED_EDGE('',*,*,#1509,.T.); +#1509 = EDGE_CURVE('',#1510,#1512,#1514,.T.); +#1510 = VERTEX_POINT('',#1511); +#1511 = CARTESIAN_POINT('',(24.773846118291,44.126103320003, + 41.990896584144)); +#1512 = VERTEX_POINT('',#1513); +#1513 = CARTESIAN_POINT('',(15.25,44.126103320003,41.990896584144)); +#1514 = LINE('',#1515,#1516); +#1515 = CARTESIAN_POINT('',(75.,44.126103320003,41.990896584144)); +#1516 = VECTOR('',#1517,1.); +#1517 = DIRECTION('',(-1.,0.,0.)); +#1518 = ORIENTED_EDGE('',*,*,#1519,.F.); +#1519 = EDGE_CURVE('',#1520,#1512,#1522,.T.); +#1520 = VERTEX_POINT('',#1521); +#1521 = CARTESIAN_POINT('',(15.25,49.564802421002,25.252301897349)); +#1522 = LINE('',#1523,#1524); +#1523 = CARTESIAN_POINT('',(15.25,50.491853404127,22.399132348464)); +#1524 = VECTOR('',#1525,1.); +#1525 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1526 = ORIENTED_EDGE('',*,*,#1527,.T.); +#1527 = EDGE_CURVE('',#1520,#1528,#1530,.T.); +#1528 = VERTEX_POINT('',#1529); +#1529 = CARTESIAN_POINT('',(15.15,49.564802421002,25.252301897349)); +#1530 = LINE('',#1531,#1532); +#1531 = CARTESIAN_POINT('',(62.5,49.564802421002,25.252301897349)); +#1532 = VECTOR('',#1533,1.); +#1533 = DIRECTION('',(-1.,0.,0.)); +#1534 = ORIENTED_EDGE('',*,*,#1535,.T.); +#1535 = EDGE_CURVE('',#1528,#1536,#1538,.T.); +#1536 = VERTEX_POINT('',#1537); +#1537 = CARTESIAN_POINT('',(15.15,51.204523483958,20.205759376332)); +#1538 = LINE('',#1539,#1540); +#1539 = CARTESIAN_POINT('',(15.15,36.895105651629,64.24561906545)); +#1540 = VECTOR('',#1541,1.); +#1541 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1542 = ORIENTED_EDGE('',*,*,#1543,.F.); +#1543 = EDGE_CURVE('',#1544,#1536,#1546,.T.); +#1544 = VERTEX_POINT('',#1545); +#1545 = CARTESIAN_POINT('',(20.,51.418904387252,19.545962799578)); +#1546 = CIRCLE('',#1547,17.3); +#1547 = AXIS2_PLACEMENT_3D('',#1548,#1549,#1550); +#1548 = CARTESIAN_POINT('',(20.,46.072910384566,35.999240531484)); +#1549 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1550 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1551 = ORIENTED_EDGE('',*,*,#1552,.F.); +#1552 = EDGE_CURVE('',#1553,#1544,#1555,.T.); +#1553 = VERTEX_POINT('',#1554); +#1554 = CARTESIAN_POINT('',(21.35,51.418904387252,19.545962799578)); +#1555 = LINE('',#1556,#1557); +#1556 = CARTESIAN_POINT('',(75.,51.418904387252,19.545962799578)); +#1557 = VECTOR('',#1558,1.); +#1558 = DIRECTION('',(-1.,0.,0.)); +#1559 = ORIENTED_EDGE('',*,*,#1560,.F.); +#1560 = EDGE_CURVE('',#1561,#1553,#1563,.T.); +#1561 = VERTEX_POINT('',#1562); +#1562 = CARTESIAN_POINT('',(21.35,49.564802421002,25.252301897349)); +#1563 = LINE('',#1564,#1565); +#1564 = CARTESIAN_POINT('',(21.35,36.895105651629,64.24561906545)); +#1565 = VECTOR('',#1566,1.); +#1566 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1567 = ORIENTED_EDGE('',*,*,#1568,.T.); +#1568 = EDGE_CURVE('',#1561,#1569,#1571,.T.); +#1569 = VERTEX_POINT('',#1570); +#1570 = CARTESIAN_POINT('',(24.773846118291,49.564802421002, + 25.252301897349)); +#1571 = LINE('',#1572,#1573); +#1572 = CARTESIAN_POINT('',(62.5,49.564802421002,25.252301897349)); +#1573 = VECTOR('',#1574,1.); +#1574 = DIRECTION('',(1.,0.,0.)); +#1575 = ORIENTED_EDGE('',*,*,#1576,.T.); +#1576 = EDGE_CURVE('',#1569,#1510,#1577,.T.); +#1577 = LINE('',#1578,#1579); +#1578 = CARTESIAN_POINT('',(24.773846118291,49.564802421002, + 25.252301897349)); +#1579 = VECTOR('',#1580,1.); +#1580 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#1581 = PLANE('',#1582); +#1582 = AXIS2_PLACEMENT_3D('',#1583,#1584,#1585); +#1583 = CARTESIAN_POINT('',(62.5,36.895105651629,64.24561906545)); +#1584 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1585 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1586 = ADVANCED_FACE('',(#1587),#1635,.F.); +#1587 = FACE_BOUND('',#1588,.T.); +#1588 = EDGE_LOOP('',(#1589,#1597,#1598,#1606,#1614,#1620,#1621,#1629)); +#1589 = ORIENTED_EDGE('',*,*,#1590,.F.); +#1590 = EDGE_CURVE('',#1440,#1591,#1593,.T.); +#1591 = VERTEX_POINT('',#1592); +#1592 = CARTESIAN_POINT('',(101.41212469192,39.7,40.552768437913)); +#1593 = LINE('',#1594,#1595); +#1594 = CARTESIAN_POINT('',(78.721398234443,124.38294399995, + 68.067924878486)); +#1595 = VECTOR('',#1596,1.); +#1596 = DIRECTION('',(0.246942617606,-0.92160239546,-0.299446770381)); +#1597 = ORIENTED_EDGE('',*,*,#1437,.F.); +#1598 = ORIENTED_EDGE('',*,*,#1599,.F.); +#1599 = EDGE_CURVE('',#1600,#1438,#1602,.T.); +#1600 = VERTEX_POINT('',#1601); +#1601 = CARTESIAN_POINT('',(109.75,45.894795202667,42.565579413388)); +#1602 = LINE('',#1603,#1604); +#1603 = CARTESIAN_POINT('',(109.75,123.48101728511,67.774871124277)); +#1604 = VECTOR('',#1605,1.); +#1605 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1606 = ORIENTED_EDGE('',*,*,#1607,.T.); +#1607 = EDGE_CURVE('',#1600,#1608,#1610,.T.); +#1608 = VERTEX_POINT('',#1609); +#1609 = CARTESIAN_POINT('',(15.25,45.894795202667,42.565579413388)); +#1610 = LINE('',#1611,#1612); +#1611 = CARTESIAN_POINT('',(75.,45.894795202667,42.565579413388)); +#1612 = VECTOR('',#1613,1.); +#1613 = DIRECTION('',(-1.,0.,0.)); +#1614 = ORIENTED_EDGE('',*,*,#1615,.T.); +#1615 = EDGE_CURVE('',#1608,#1512,#1616,.T.); +#1616 = LINE('',#1617,#1618); +#1617 = CARTESIAN_POINT('',(15.25,37.33528655601,39.784426464014)); +#1618 = VECTOR('',#1619,1.); +#1619 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1620 = ORIENTED_EDGE('',*,*,#1509,.F.); +#1621 = ORIENTED_EDGE('',*,*,#1622,.F.); +#1622 = EDGE_CURVE('',#1623,#1510,#1625,.T.); +#1623 = VERTEX_POINT('',#1624); +#1624 = CARTESIAN_POINT('',(23.58787530808,39.7,40.552768437913)); +#1625 = LINE('',#1626,#1627); +#1626 = CARTESIAN_POINT('',(47.803118175312,130.07251669813, + 69.916579111273)); +#1627 = VECTOR('',#1628,1.); +#1628 = DIRECTION('',(0.246942617606,0.92160239546,0.299446770381)); +#1629 = ORIENTED_EDGE('',*,*,#1630,.T.); +#1630 = EDGE_CURVE('',#1623,#1591,#1631,.T.); +#1631 = LINE('',#1632,#1633); +#1632 = CARTESIAN_POINT('',(75.,39.7,40.552768437913)); +#1633 = VECTOR('',#1634,1.); +#1634 = DIRECTION('',(1.,0.,0.)); +#1635 = PLANE('',#1636); +#1636 = AXIS2_PLACEMENT_3D('',#1637,#1638,#1639); +#1637 = CARTESIAN_POINT('',(75.,123.48101728511,67.774871124277)); +#1638 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#1639 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1640 = ADVANCED_FACE('',(#1641),#1666,.F.); +#1641 = FACE_BOUND('',#1642,.T.); +#1642 = EDGE_LOOP('',(#1643,#1653,#1659,#1660)); +#1643 = ORIENTED_EDGE('',*,*,#1644,.F.); +#1644 = EDGE_CURVE('',#1645,#1647,#1649,.T.); +#1645 = VERTEX_POINT('',#1646); +#1646 = CARTESIAN_POINT('',(102.8694197239,39.7,22.047033291319)); +#1647 = VERTEX_POINT('',#1648); +#1648 = CARTESIAN_POINT('',(22.130580276091,39.7,22.047033291319)); +#1649 = LINE('',#1650,#1651); +#1650 = CARTESIAN_POINT('',(62.5,39.7,22.047033291319)); +#1651 = VECTOR('',#1652,1.); +#1652 = DIRECTION('',(-1.,0.,0.)); +#1653 = ORIENTED_EDGE('',*,*,#1654,.T.); +#1654 = EDGE_CURVE('',#1645,#1591,#1655,.T.); +#1655 = LINE('',#1656,#1657); +#1656 = CARTESIAN_POINT('',(98.736401891947,39.7,74.530937837444)); +#1657 = VECTOR('',#1658,1.); +#1658 = DIRECTION('',(-7.850525099682E-02,0.,0.99691370016)); +#1659 = ORIENTED_EDGE('',*,*,#1630,.F.); +#1660 = ORIENTED_EDGE('',*,*,#1661,.F.); +#1661 = EDGE_CURVE('',#1647,#1623,#1662,.T.); +#1662 = LINE('',#1663,#1664); +#1663 = CARTESIAN_POINT('',(26.263598108053,39.7,74.530937837444)); +#1664 = VECTOR('',#1665,1.); +#1665 = DIRECTION('',(7.850525099682E-02,0.,0.99691370016)); +#1666 = PLANE('',#1667); +#1667 = AXIS2_PLACEMENT_3D('',#1668,#1669,#1670); +#1668 = CARTESIAN_POINT('',(62.5,39.7,71.677383086122)); +#1669 = DIRECTION('',(0.,1.,0.)); +#1670 = DIRECTION('',(0.,-0.,1.)); +#1671 = ADVANCED_FACE('',(#1672,#1757,#1791,#1825,#1859,#1893,#1927, + #1961),#2027,.F.); +#1672 = FACE_BOUND('',#1673,.T.); +#1673 = EDGE_LOOP('',(#1674,#1675,#1681,#1682,#1690,#1698,#1704,#1705, + #1713,#1721,#1727,#1728,#1736,#1744,#1750,#1751)); +#1674 = ORIENTED_EDGE('',*,*,#1644,.T.); +#1675 = ORIENTED_EDGE('',*,*,#1676,.T.); +#1676 = EDGE_CURVE('',#1647,#1569,#1677,.T.); +#1677 = LINE('',#1678,#1679); +#1678 = CARTESIAN_POINT('',(47.803118175312,135.51121579913, + 53.177984424479)); +#1679 = VECTOR('',#1680,1.); +#1680 = DIRECTION('',(0.246942617606,0.92160239546,0.299446770381)); +#1681 = ORIENTED_EDGE('',*,*,#1568,.F.); +#1682 = ORIENTED_EDGE('',*,*,#1683,.F.); +#1683 = EDGE_CURVE('',#1684,#1561,#1686,.T.); +#1684 = VERTEX_POINT('',#1685); +#1685 = CARTESIAN_POINT('',(21.35,36.8,21.104766172244)); +#1686 = LINE('',#1687,#1688); +#1687 = CARTESIAN_POINT('',(21.35,128.91971638611,51.036276437482)); +#1688 = VECTOR('',#1689,1.); +#1689 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1690 = ORIENTED_EDGE('',*,*,#1691,.F.); +#1691 = EDGE_CURVE('',#1692,#1684,#1694,.T.); +#1692 = VERTEX_POINT('',#1693); +#1693 = CARTESIAN_POINT('',(15.15,36.8,21.104766172244)); +#1694 = LINE('',#1695,#1696); +#1695 = CARTESIAN_POINT('',(62.5,36.8,21.104766172244)); +#1696 = VECTOR('',#1697,1.); +#1697 = DIRECTION('',(1.,0.,0.)); +#1698 = ORIENTED_EDGE('',*,*,#1699,.T.); +#1699 = EDGE_CURVE('',#1692,#1528,#1700,.T.); +#1700 = LINE('',#1701,#1702); +#1701 = CARTESIAN_POINT('',(15.15,128.91971638611,51.036276437482)); +#1702 = VECTOR('',#1703,1.); +#1703 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1704 = ORIENTED_EDGE('',*,*,#1527,.F.); +#1705 = ORIENTED_EDGE('',*,*,#1706,.T.); +#1706 = EDGE_CURVE('',#1520,#1707,#1709,.T.); +#1707 = VERTEX_POINT('',#1708); +#1708 = CARTESIAN_POINT('',(15.25,55.137720368846,27.063052704093)); +#1709 = LINE('',#1710,#1711); +#1710 = CARTESIAN_POINT('',(15.25,128.91971638611,51.036276437482)); +#1711 = VECTOR('',#1712,1.); +#1712 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1713 = ORIENTED_EDGE('',*,*,#1714,.F.); +#1714 = EDGE_CURVE('',#1715,#1707,#1717,.T.); +#1715 = VERTEX_POINT('',#1716); +#1716 = CARTESIAN_POINT('',(109.75,55.137720368846,27.063052704093)); +#1717 = LINE('',#1718,#1719); +#1718 = CARTESIAN_POINT('',(75.,55.137720368846,27.063052704093)); +#1719 = VECTOR('',#1720,1.); +#1720 = DIRECTION('',(-1.,0.,0.)); +#1721 = ORIENTED_EDGE('',*,*,#1722,.F.); +#1722 = EDGE_CURVE('',#1488,#1715,#1723,.T.); +#1723 = LINE('',#1724,#1725); +#1724 = CARTESIAN_POINT('',(109.75,42.773985657009,23.045831777219)); +#1725 = VECTOR('',#1726,1.); +#1726 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1727 = ORIENTED_EDGE('',*,*,#1487,.F.); +#1728 = ORIENTED_EDGE('',*,*,#1729,.F.); +#1729 = EDGE_CURVE('',#1730,#1480,#1732,.T.); +#1730 = VERTEX_POINT('',#1731); +#1731 = CARTESIAN_POINT('',(109.85,36.704894348371,21.073864472806)); +#1732 = LINE('',#1733,#1734); +#1733 = CARTESIAN_POINT('',(109.85,42.773985657009,23.045831777219)); +#1734 = VECTOR('',#1735,1.); +#1735 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1736 = ORIENTED_EDGE('',*,*,#1737,.T.); +#1737 = EDGE_CURVE('',#1730,#1738,#1740,.T.); +#1738 = VERTEX_POINT('',#1739); +#1739 = CARTESIAN_POINT('',(103.65,36.704894348371,21.073864472806)); +#1740 = LINE('',#1741,#1742); +#1741 = CARTESIAN_POINT('',(75.,36.704894348371,21.073864472806)); +#1742 = VECTOR('',#1743,1.); +#1743 = DIRECTION('',(-1.,0.,0.)); +#1744 = ORIENTED_EDGE('',*,*,#1745,.F.); +#1745 = EDGE_CURVE('',#1456,#1738,#1746,.T.); +#1746 = LINE('',#1747,#1748); +#1747 = CARTESIAN_POINT('',(103.65,128.91971638611,51.036276437482)); +#1748 = VECTOR('',#1749,1.); +#1749 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1750 = ORIENTED_EDGE('',*,*,#1455,.F.); +#1751 = ORIENTED_EDGE('',*,*,#1752,.T.); +#1752 = EDGE_CURVE('',#1448,#1645,#1753,.T.); +#1753 = LINE('',#1754,#1755); +#1754 = CARTESIAN_POINT('',(78.721398234443,129.82164310095, + 51.329330191691)); +#1755 = VECTOR('',#1756,1.); +#1756 = DIRECTION('',(0.246942617606,-0.92160239546,-0.299446770381)); +#1757 = FACE_BOUND('',#1758,.T.); +#1758 = EDGE_LOOP('',(#1759,#1769,#1777,#1785)); +#1759 = ORIENTED_EDGE('',*,*,#1760,.F.); +#1760 = EDGE_CURVE('',#1761,#1763,#1765,.T.); +#1761 = VERTEX_POINT('',#1762); +#1762 = CARTESIAN_POINT('',(122.80668500784,55.457386785031, + 27.166918618936)); +#1763 = VERTEX_POINT('',#1764); +#1764 = CARTESIAN_POINT('',(130.54999999999,55.457386785031, + 27.166918618936)); +#1765 = LINE('',#1766,#1767); +#1766 = CARTESIAN_POINT('',(75.,55.457386785031,27.166918618936)); +#1767 = VECTOR('',#1768,1.); +#1768 = DIRECTION('',(1.,-2.22824051607E-15,-7.239992316154E-16)); +#1769 = ORIENTED_EDGE('',*,*,#1770,.T.); +#1770 = EDGE_CURVE('',#1761,#1771,#1773,.T.); +#1771 = VERTEX_POINT('',#1772); +#1772 = CARTESIAN_POINT('',(122.80668500784,60.593091973025, + 28.835610388561)); +#1773 = LINE('',#1774,#1775); +#1774 = CARTESIAN_POINT('',(122.80668500784,128.91971638611, + 51.036276437482)); +#1775 = VECTOR('',#1776,1.); +#1776 = DIRECTION('',(1.718195667145E-15,0.951056516295,0.309016994375) + ); +#1777 = ORIENTED_EDGE('',*,*,#1778,.F.); +#1778 = EDGE_CURVE('',#1779,#1771,#1781,.T.); +#1779 = VERTEX_POINT('',#1780); +#1780 = CARTESIAN_POINT('',(130.54999999999,60.593091973025, + 28.835610388561)); +#1781 = LINE('',#1782,#1783); +#1782 = CARTESIAN_POINT('',(75.,60.593091973025,28.835610388561)); +#1783 = VECTOR('',#1784,1.); +#1784 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#1785 = ORIENTED_EDGE('',*,*,#1786,.F.); +#1786 = EDGE_CURVE('',#1763,#1779,#1787,.T.); +#1787 = LINE('',#1788,#1789); +#1788 = CARTESIAN_POINT('',(130.55,128.91971638611,51.036276437482)); +#1789 = VECTOR('',#1790,1.); +#1790 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#1791 = FACE_BOUND('',#1792,.T.); +#1792 = EDGE_LOOP('',(#1793,#1803,#1811,#1819)); +#1793 = ORIENTED_EDGE('',*,*,#1794,.F.); +#1794 = EDGE_CURVE('',#1795,#1797,#1799,.T.); +#1795 = VERTEX_POINT('',#1796); +#1796 = CARTESIAN_POINT('',(122.80668500784,109.66760821385, + 44.780887298308)); +#1797 = VERTEX_POINT('',#1798); +#1798 = CARTESIAN_POINT('',(130.55,109.66760821385,44.780887298308)); +#1799 = LINE('',#1800,#1801); +#1800 = CARTESIAN_POINT('',(75.,109.66760821385,44.780887298308)); +#1801 = VECTOR('',#1802,1.); +#1802 = DIRECTION('',(1.,-2.22824051607E-15,-7.239992316154E-16)); +#1803 = ORIENTED_EDGE('',*,*,#1804,.T.); +#1804 = EDGE_CURVE('',#1795,#1805,#1807,.T.); +#1805 = VERTEX_POINT('',#1806); +#1806 = CARTESIAN_POINT('',(122.80668500784,114.80331340184, + 46.449579067933)); +#1807 = LINE('',#1808,#1809); +#1808 = CARTESIAN_POINT('',(122.80668500784,128.91971638611, + 51.036276437482)); +#1809 = VECTOR('',#1810,1.); +#1810 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#1811 = ORIENTED_EDGE('',*,*,#1812,.F.); +#1812 = EDGE_CURVE('',#1813,#1805,#1815,.T.); +#1813 = VERTEX_POINT('',#1814); +#1814 = CARTESIAN_POINT('',(130.55,114.80331340184,46.449579067933)); +#1815 = LINE('',#1816,#1817); +#1816 = CARTESIAN_POINT('',(75.,114.80331340184,46.449579067933)); +#1817 = VECTOR('',#1818,1.); +#1818 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#1819 = ORIENTED_EDGE('',*,*,#1820,.F.); +#1820 = EDGE_CURVE('',#1797,#1813,#1821,.T.); +#1821 = LINE('',#1822,#1823); +#1822 = CARTESIAN_POINT('',(130.55,128.91971638611,51.036276437482)); +#1823 = VECTOR('',#1824,1.); +#1824 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#1825 = FACE_BOUND('',#1826,.T.); +#1826 = EDGE_LOOP('',(#1827,#1837,#1845,#1853)); +#1827 = ORIENTED_EDGE('',*,*,#1828,.F.); +#1828 = EDGE_CURVE('',#1829,#1831,#1833,.T.); +#1829 = VERTEX_POINT('',#1830); +#1830 = CARTESIAN_POINT('',(124.34643096999,65.815677178472, + 30.532531187065)); +#1831 = VERTEX_POINT('',#1832); +#1832 = CARTESIAN_POINT('',(137.35,62.501914933865,29.455824565159)); +#1833 = LINE('',#1834,#1835); +#1834 = CARTESIAN_POINT('',(137.40176380902,62.488723712626, + 29.451538477561)); +#1835 = VECTOR('',#1836,1.); +#1836 = DIRECTION('',(0.965925826289,-0.246151539386,-7.997948340458E-02 + )); +#1837 = ORIENTED_EDGE('',*,*,#1838,.T.); +#1838 = EDGE_CURVE('',#1829,#1839,#1841,.T.); +#1839 = VERTEX_POINT('',#1840); +#1840 = CARTESIAN_POINT('',(124.34643097,104.4450230084,43.083966499804) + ); +#1841 = LINE('',#1842,#1843); +#1842 = CARTESIAN_POINT('',(124.34643097,128.91971638611,51.036276437482 + )); +#1843 = VECTOR('',#1844,1.); +#1844 = DIRECTION('',(3.045387193347E-15,0.951056516295,0.309016994375) + ); +#1845 = ORIENTED_EDGE('',*,*,#1846,.F.); +#1846 = EDGE_CURVE('',#1847,#1839,#1849,.T.); +#1847 = VERTEX_POINT('',#1848); +#1848 = CARTESIAN_POINT('',(137.35,107.75878525301,44.160673121709)); +#1849 = LINE('',#1850,#1851); +#1850 = CARTESIAN_POINT('',(137.40176380902,107.77197647425, + 44.164959209307)); +#1851 = VECTOR('',#1852,1.); +#1852 = DIRECTION('',(-0.965925826289,-0.246151539386, + -7.997948340457E-02)); +#1853 = ORIENTED_EDGE('',*,*,#1854,.F.); +#1854 = EDGE_CURVE('',#1831,#1847,#1855,.T.); +#1855 = LINE('',#1856,#1857); +#1856 = CARTESIAN_POINT('',(137.34999999999,41.340983800763, + 22.580221249386)); +#1857 = VECTOR('',#1858,1.); +#1858 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#1859 = FACE_BOUND('',#1860,.T.); +#1860 = EDGE_LOOP('',(#1861,#1871,#1879,#1887)); +#1861 = ORIENTED_EDGE('',*,*,#1862,.F.); +#1862 = EDGE_CURVE('',#1863,#1865,#1867,.T.); +#1863 = VERTEX_POINT('',#1864); +#1864 = CARTESIAN_POINT('',(27.193314992156,60.593091973025, + 28.835610388561)); +#1865 = VERTEX_POINT('',#1866); +#1866 = CARTESIAN_POINT('',(19.45,60.593091973025,28.835610388561)); +#1867 = LINE('',#1868,#1869); +#1868 = CARTESIAN_POINT('',(75.,60.593091973025,28.835610388561)); +#1869 = VECTOR('',#1870,1.); +#1870 = DIRECTION('',(-1.,3.363485606343E-15,1.092862721497E-15)); +#1871 = ORIENTED_EDGE('',*,*,#1872,.T.); +#1872 = EDGE_CURVE('',#1863,#1873,#1875,.T.); +#1873 = VERTEX_POINT('',#1874); +#1874 = CARTESIAN_POINT('',(27.193314992156,55.457386785031, + 27.166918618936)); +#1875 = LINE('',#1876,#1877); +#1876 = CARTESIAN_POINT('',(27.193314992156,128.91971638611, + 51.036276437482)); +#1877 = VECTOR('',#1878,1.); +#1878 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#1879 = ORIENTED_EDGE('',*,*,#1880,.F.); +#1880 = EDGE_CURVE('',#1881,#1873,#1883,.T.); +#1881 = VERTEX_POINT('',#1882); +#1882 = CARTESIAN_POINT('',(19.45,55.457386785031,27.166918618936)); +#1883 = LINE('',#1884,#1885); +#1884 = CARTESIAN_POINT('',(75.,55.457386785031,27.166918618936)); +#1885 = VECTOR('',#1886,1.); +#1886 = DIRECTION('',(1.,-3.363485606343E-15,-1.092862721497E-15)); +#1887 = ORIENTED_EDGE('',*,*,#1888,.F.); +#1888 = EDGE_CURVE('',#1865,#1881,#1889,.T.); +#1889 = LINE('',#1890,#1891); +#1890 = CARTESIAN_POINT('',(19.450000000001,128.91971638611, + 51.036276437482)); +#1891 = VECTOR('',#1892,1.); +#1892 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#1893 = FACE_BOUND('',#1894,.T.); +#1894 = EDGE_LOOP('',(#1895,#1905,#1913,#1921)); +#1895 = ORIENTED_EDGE('',*,*,#1896,.F.); +#1896 = EDGE_CURVE('',#1897,#1899,#1901,.T.); +#1897 = VERTEX_POINT('',#1898); +#1898 = CARTESIAN_POINT('',(25.65356903,65.815677178472,30.532531187065) + ); +#1899 = VERTEX_POINT('',#1900); +#1900 = CARTESIAN_POINT('',(25.65356903,104.4450230084,43.083966499804) + ); +#1901 = LINE('',#1902,#1903); +#1902 = CARTESIAN_POINT('',(25.65356903,60.402880669766,28.773806989686) + ); +#1903 = VECTOR('',#1904,1.); +#1904 = DIRECTION('',(3.520488628129E-15,0.951056516295,0.309016994375) + ); +#1905 = ORIENTED_EDGE('',*,*,#1906,.F.); +#1906 = EDGE_CURVE('',#1907,#1897,#1909,.T.); +#1907 = VERTEX_POINT('',#1908); +#1908 = CARTESIAN_POINT('',(12.65,62.501914933865,29.455824565159)); +#1909 = LINE('',#1910,#1911); +#1910 = CARTESIAN_POINT('',(12.59823619098,62.488723712626, + 29.451538477561)); +#1911 = VECTOR('',#1912,1.); +#1912 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#1913 = ORIENTED_EDGE('',*,*,#1914,.F.); +#1914 = EDGE_CURVE('',#1915,#1907,#1917,.T.); +#1915 = VERTEX_POINT('',#1916); +#1916 = CARTESIAN_POINT('',(12.65,107.75878525301,44.160673121709)); +#1917 = LINE('',#1918,#1919); +#1918 = CARTESIAN_POINT('',(12.65,128.91971638611,51.036276437482)); +#1919 = VECTOR('',#1920,1.); +#1920 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#1921 = ORIENTED_EDGE('',*,*,#1922,.F.); +#1922 = EDGE_CURVE('',#1899,#1915,#1923,.T.); +#1923 = LINE('',#1924,#1925); +#1924 = CARTESIAN_POINT('',(12.59823619098,107.77197647425, + 44.164959209307)); +#1925 = VECTOR('',#1926,1.); +#1926 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340458E-02) + ); +#1927 = FACE_BOUND('',#1928,.T.); +#1928 = EDGE_LOOP('',(#1929,#1939,#1947,#1955)); +#1929 = ORIENTED_EDGE('',*,*,#1930,.F.); +#1930 = EDGE_CURVE('',#1931,#1933,#1935,.T.); +#1931 = VERTEX_POINT('',#1932); +#1932 = CARTESIAN_POINT('',(27.193314992156,114.80331340184, + 46.449579067933)); +#1933 = VERTEX_POINT('',#1934); +#1934 = CARTESIAN_POINT('',(19.45,114.80331340184,46.449579067933)); +#1935 = LINE('',#1936,#1937); +#1936 = CARTESIAN_POINT('',(75.,114.80331340184,46.449579067933)); +#1937 = VECTOR('',#1938,1.); +#1938 = DIRECTION('',(-1.,3.363485606343E-15,1.092862721497E-15)); +#1939 = ORIENTED_EDGE('',*,*,#1940,.T.); +#1940 = EDGE_CURVE('',#1931,#1941,#1943,.T.); +#1941 = VERTEX_POINT('',#1942); +#1942 = CARTESIAN_POINT('',(27.193314992156,109.66760821385, + 44.780887298308)); +#1943 = LINE('',#1944,#1945); +#1944 = CARTESIAN_POINT('',(27.193314992156,128.91971638611, + 51.036276437482)); +#1945 = VECTOR('',#1946,1.); +#1946 = DIRECTION('',(-2.911862994819E-15,-0.951056516295, + -0.309016994375)); +#1947 = ORIENTED_EDGE('',*,*,#1948,.F.); +#1948 = EDGE_CURVE('',#1949,#1941,#1951,.T.); +#1949 = VERTEX_POINT('',#1950); +#1950 = CARTESIAN_POINT('',(19.45,109.66760821385,44.780887298308)); +#1951 = LINE('',#1952,#1953); +#1952 = CARTESIAN_POINT('',(75.,109.66760821385,44.780887298308)); +#1953 = VECTOR('',#1954,1.); +#1954 = DIRECTION('',(1.,-3.363485606343E-15,-1.092862721497E-15)); +#1955 = ORIENTED_EDGE('',*,*,#1956,.F.); +#1956 = EDGE_CURVE('',#1933,#1949,#1957,.T.); +#1957 = LINE('',#1958,#1959); +#1958 = CARTESIAN_POINT('',(19.450000000001,128.91971638611, + 51.036276437482)); +#1959 = VECTOR('',#1960,1.); +#1960 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#1961 = FACE_BOUND('',#1962,.T.); +#1962 = EDGE_LOOP('',(#1963,#1973,#1981,#1989,#1997,#2005,#2013,#2021)); +#1963 = ORIENTED_EDGE('',*,*,#1964,.F.); +#1964 = EDGE_CURVE('',#1965,#1967,#1969,.T.); +#1965 = VERTEX_POINT('',#1966); +#1966 = CARTESIAN_POINT('',(120.66552506059,115.05428089544, + 46.531123349715)); +#1967 = VERTEX_POINT('',#1968); +#1968 = CARTESIAN_POINT('',(120.66552506059,124.56484605839, + 49.621293293464)); +#1969 = LINE('',#1970,#1971); +#1970 = CARTESIAN_POINT('',(120.66552506059,128.91971638611, + 51.036276437482)); +#1971 = VECTOR('',#1972,1.); +#1972 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#1973 = ORIENTED_EDGE('',*,*,#1974,.T.); +#1974 = EDGE_CURVE('',#1965,#1975,#1977,.T.); +#1975 = VERTEX_POINT('',#1976); +#1976 = CARTESIAN_POINT('',(29.334474939404,115.05428089544, + 46.531123349715)); +#1977 = LINE('',#1978,#1979); +#1978 = CARTESIAN_POINT('',(75.,115.05428089544,46.531123349715)); +#1979 = VECTOR('',#1980,1.); +#1980 = DIRECTION('',(-1.,0.,0.)); +#1981 = ORIENTED_EDGE('',*,*,#1982,.F.); +#1982 = EDGE_CURVE('',#1983,#1975,#1985,.T.); +#1983 = VERTEX_POINT('',#1984); +#1984 = CARTESIAN_POINT('',(29.334474939404,124.56484605839, + 49.621293293464)); +#1985 = LINE('',#1986,#1987); +#1986 = CARTESIAN_POINT('',(29.334474939404,128.91971638611, + 51.036276437482)); +#1987 = VECTOR('',#1988,1.); +#1988 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#1989 = ORIENTED_EDGE('',*,*,#1990,.T.); +#1990 = EDGE_CURVE('',#1983,#1991,#1993,.T.); +#1991 = VERTEX_POINT('',#1992); +#1992 = CARTESIAN_POINT('',(6.90038168495,124.56484605839, + 49.621293293464)); +#1993 = LINE('',#1994,#1995); +#1994 = CARTESIAN_POINT('',(130.,124.56484605839,49.621293293464)); +#1995 = VECTOR('',#1996,1.); +#1996 = DIRECTION('',(-1.,0.,0.)); +#1997 = ORIENTED_EDGE('',*,*,#1998,.F.); +#1998 = EDGE_CURVE('',#1999,#1991,#2001,.T.); +#1999 = VERTEX_POINT('',#2000); +#2000 = CARTESIAN_POINT('',(6.90038168495,14.908029729561, + 13.991633842033)); +#2001 = LINE('',#2002,#2003); +#2002 = CARTESIAN_POINT('',(6.90038168495,65.149689437999, + 30.316138652736)); +#2003 = VECTOR('',#2004,1.); +#2004 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2005 = ORIENTED_EDGE('',*,*,#2006,.T.); +#2006 = EDGE_CURVE('',#1999,#2007,#2009,.T.); +#2007 = VERTEX_POINT('',#2008); +#2008 = CARTESIAN_POINT('',(143.09961831505,14.908029729561, + 13.991633842033)); +#2009 = LINE('',#2010,#2011); +#2010 = CARTESIAN_POINT('',(130.,14.908029729561,13.991633842033)); +#2011 = VECTOR('',#2012,1.); +#2012 = DIRECTION('',(1.,0.,0.)); +#2013 = ORIENTED_EDGE('',*,*,#2014,.T.); +#2014 = EDGE_CURVE('',#2007,#2015,#2017,.T.); +#2015 = VERTEX_POINT('',#2016); +#2016 = CARTESIAN_POINT('',(143.09961831505,124.56484605839, + 49.621293293464)); +#2017 = LINE('',#2018,#2019); +#2018 = CARTESIAN_POINT('',(143.09961831505,68.640790871075, + 31.450466269889)); +#2019 = VECTOR('',#2020,1.); +#2020 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2021 = ORIENTED_EDGE('',*,*,#2022,.T.); +#2022 = EDGE_CURVE('',#2015,#1967,#2023,.T.); +#2023 = LINE('',#2024,#2025); +#2024 = CARTESIAN_POINT('',(130.,124.56484605839,49.621293293464)); +#2025 = VECTOR('',#2026,1.); +#2026 = DIRECTION('',(-1.,0.,0.)); +#2027 = PLANE('',#2028); +#2028 = AXIS2_PLACEMENT_3D('',#2029,#2030,#2031); +#2029 = CARTESIAN_POINT('',(75.,128.91971638611,51.036276437482)); +#2030 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2031 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2032 = ADVANCED_FACE('',(#2033),#2147,.F.); +#2033 = FACE_BOUND('',#2034,.T.); +#2034 = EDGE_LOOP('',(#2035,#2043,#2044,#2053,#2061,#2068,#2069,#2077, + #2085,#2093,#2101,#2109,#2117,#2125,#2133,#2141)); +#2035 = ORIENTED_EDGE('',*,*,#2036,.F.); +#2036 = EDGE_CURVE('',#1967,#2037,#2039,.T.); +#2037 = VERTEX_POINT('',#2038); +#2038 = CARTESIAN_POINT('',(120.66552506059,124.93566645164, + 48.48002547391)); +#2039 = LINE('',#2040,#2041); +#2040 = CARTESIAN_POINT('',(120.66552506059,124.62664945726, + 49.431081990205)); +#2041 = VECTOR('',#2042,1.); +#2042 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2043 = ORIENTED_EDGE('',*,*,#2022,.F.); +#2044 = ORIENTED_EDGE('',*,*,#2045,.T.); +#2045 = EDGE_CURVE('',#2015,#2046,#2048,.T.); +#2046 = VERTEX_POINT('',#2047); +#2047 = CARTESIAN_POINT('',(130.,126.41894802464,43.914954195694)); +#2048 = CIRCLE('',#2049,17.3); +#2049 = AXIS2_PLACEMENT_3D('',#2050,#2051,#2052); +#2050 = CARTESIAN_POINT('',(130.,121.07295402195,60.3682319276)); +#2051 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2052 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2053 = ORIENTED_EDGE('',*,*,#2054,.T.); +#2054 = EDGE_CURVE('',#2046,#2055,#2057,.T.); +#2055 = VERTEX_POINT('',#2056); +#2056 = CARTESIAN_POINT('',(20.,126.41894802464,43.914954195694)); +#2057 = LINE('',#2058,#2059); +#2058 = CARTESIAN_POINT('',(75.,126.41894802464,43.914954195694)); +#2059 = VECTOR('',#2060,1.); +#2060 = DIRECTION('',(-1.,0.,0.)); +#2061 = ORIENTED_EDGE('',*,*,#2062,.T.); +#2062 = EDGE_CURVE('',#2055,#1991,#2063,.T.); +#2063 = CIRCLE('',#2064,17.3); +#2064 = AXIS2_PLACEMENT_3D('',#2065,#2066,#2067); +#2065 = CARTESIAN_POINT('',(20.,121.07295402195,60.3682319276)); +#2066 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2067 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2068 = ORIENTED_EDGE('',*,*,#1990,.F.); +#2069 = ORIENTED_EDGE('',*,*,#2070,.T.); +#2070 = EDGE_CURVE('',#1983,#2071,#2073,.T.); +#2071 = VERTEX_POINT('',#2072); +#2072 = CARTESIAN_POINT('',(29.334474939404,124.93566645164, + 48.48002547391)); +#2073 = LINE('',#2074,#2075); +#2074 = CARTESIAN_POINT('',(29.334474939404,124.87386305276, + 48.670236777169)); +#2075 = VECTOR('',#2076,1.); +#2076 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2077 = ORIENTED_EDGE('',*,*,#2078,.F.); +#2078 = EDGE_CURVE('',#2079,#2071,#2081,.T.); +#2079 = VERTEX_POINT('',#2080); +#2080 = CARTESIAN_POINT('',(36.792944763918,124.93566645164, + 48.48002547391)); +#2081 = LINE('',#2082,#2083); +#2082 = CARTESIAN_POINT('',(75.,124.93566645164,48.48002547391)); +#2083 = VECTOR('',#2084,1.); +#2084 = DIRECTION('',(-1.,0.,0.)); +#2085 = ORIENTED_EDGE('',*,*,#2086,.T.); +#2086 = EDGE_CURVE('',#2079,#2087,#2089,.T.); +#2087 = VERTEX_POINT('',#2088); +#2088 = CARTESIAN_POINT('',(36.792944763918,126.26443952745, + 44.390482453841)); +#2089 = LINE('',#2090,#2091); +#2090 = CARTESIAN_POINT('',(36.792944763918,124.4103375612, + 50.096821551612)); +#2091 = VECTOR('',#2092,1.); +#2092 = DIRECTION('',(1.436734315422E-17,0.309016994375,-0.951056516295) + ); +#2093 = ORIENTED_EDGE('',*,*,#2094,.T.); +#2094 = EDGE_CURVE('',#2087,#2095,#2097,.T.); +#2095 = VERTEX_POINT('',#2096); +#2096 = CARTESIAN_POINT('',(62.207055236082,126.26443952745, + 44.390482453841)); +#2097 = LINE('',#2098,#2099); +#2098 = CARTESIAN_POINT('',(62.,126.26443952745,44.390482453841)); +#2099 = VECTOR('',#2100,1.); +#2100 = DIRECTION('',(1.,0.,0.)); +#2101 = ORIENTED_EDGE('',*,*,#2102,.T.); +#2102 = EDGE_CURVE('',#2095,#2103,#2105,.T.); +#2103 = VERTEX_POINT('',#2104); +#2104 = CARTESIAN_POINT('',(62.207055236082,124.93566645164, + 48.48002547391)); +#2105 = LINE('',#2106,#2107); +#2106 = CARTESIAN_POINT('',(62.207055236082,124.4103375612, + 50.096821551612)); +#2107 = VECTOR('',#2108,1.); +#2108 = DIRECTION('',(1.436734315422E-17,-0.309016994375,0.951056516295) + ); +#2109 = ORIENTED_EDGE('',*,*,#2110,.F.); +#2110 = EDGE_CURVE('',#2111,#2103,#2113,.T.); +#2111 = VERTEX_POINT('',#2112); +#2112 = CARTESIAN_POINT('',(87.792944763918,124.93566645164, + 48.48002547391)); +#2113 = LINE('',#2114,#2115); +#2114 = CARTESIAN_POINT('',(75.,124.93566645164,48.48002547391)); +#2115 = VECTOR('',#2116,1.); +#2116 = DIRECTION('',(-1.,0.,0.)); +#2117 = ORIENTED_EDGE('',*,*,#2118,.T.); +#2118 = EDGE_CURVE('',#2111,#2119,#2121,.T.); +#2119 = VERTEX_POINT('',#2120); +#2120 = CARTESIAN_POINT('',(87.792944763918,126.26443952745, + 44.390482453841)); +#2121 = LINE('',#2122,#2123); +#2122 = CARTESIAN_POINT('',(87.792944763918,124.4103375612, + 50.096821551612)); +#2123 = VECTOR('',#2124,1.); +#2124 = DIRECTION('',(1.436734315422E-17,0.309016994375,-0.951056516295) + ); +#2125 = ORIENTED_EDGE('',*,*,#2126,.T.); +#2126 = EDGE_CURVE('',#2119,#2127,#2129,.T.); +#2127 = VERTEX_POINT('',#2128); +#2128 = CARTESIAN_POINT('',(113.20705523608,126.26443952745, + 44.390482453841)); +#2129 = LINE('',#2130,#2131); +#2130 = CARTESIAN_POINT('',(88.,126.26443952745,44.390482453841)); +#2131 = VECTOR('',#2132,1.); +#2132 = DIRECTION('',(1.,0.,0.)); +#2133 = ORIENTED_EDGE('',*,*,#2134,.T.); +#2134 = EDGE_CURVE('',#2127,#2135,#2137,.T.); +#2135 = VERTEX_POINT('',#2136); +#2136 = CARTESIAN_POINT('',(113.20705523608,124.93566645164, + 48.48002547391)); +#2137 = LINE('',#2138,#2139); +#2138 = CARTESIAN_POINT('',(113.20705523608,124.4103375612, + 50.096821551612)); +#2139 = VECTOR('',#2140,1.); +#2140 = DIRECTION('',(1.436734315422E-17,-0.309016994375,0.951056516295) + ); +#2141 = ORIENTED_EDGE('',*,*,#2142,.F.); +#2142 = EDGE_CURVE('',#2037,#2135,#2143,.T.); +#2143 = LINE('',#2144,#2145); +#2144 = CARTESIAN_POINT('',(75.,124.93566645164,48.48002547391)); +#2145 = VECTOR('',#2146,1.); +#2146 = DIRECTION('',(-1.,0.,0.)); +#2147 = PLANE('',#2148); +#2148 = AXIS2_PLACEMENT_3D('',#2149,#2150,#2151); +#2149 = CARTESIAN_POINT('',(75.,124.4103375612,50.096821551612)); +#2150 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2151 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2152 = ADVANCED_FACE('',(#2153),#2171,.T.); +#2153 = FACE_BOUND('',#2154,.T.); +#2154 = EDGE_LOOP('',(#2155,#2163,#2164,#2165)); +#2155 = ORIENTED_EDGE('',*,*,#2156,.F.); +#2156 = EDGE_CURVE('',#1464,#2157,#2159,.T.); +#2157 = VERTEX_POINT('',#2158); +#2158 = CARTESIAN_POINT('',(103.65,38.55899631462,15.367525375036)); +#2159 = LINE('',#2160,#2161); +#2160 = CARTESIAN_POINT('',(103.65,70.494892837324,25.744127172118)); +#2161 = VECTOR('',#2162,1.); +#2162 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2163 = ORIENTED_EDGE('',*,*,#1463,.F.); +#2164 = ORIENTED_EDGE('',*,*,#1745,.T.); +#2165 = ORIENTED_EDGE('',*,*,#2166,.T.); +#2166 = EDGE_CURVE('',#1738,#2157,#2167,.T.); +#2167 = LINE('',#2168,#2169); +#2168 = CARTESIAN_POINT('',(103.65,28.785188445168,45.448212950362)); +#2169 = VECTOR('',#2170,1.); +#2170 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2171 = PLANE('',#2172); +#2172 = AXIS2_PLACEMENT_3D('',#2173,#2174,#2175); +#2173 = CARTESIAN_POINT('',(103.65,32.525,46.663351384726)); +#2174 = DIRECTION('',(1.,0.,0.)); +#2175 = DIRECTION('',(0.,0.,-1.)); +#2176 = ADVANCED_FACE('',(#2177),#2195,.F.); +#2177 = FACE_BOUND('',#2178,.T.); +#2178 = EDGE_LOOP('',(#2179,#2187,#2193,#2194)); +#2179 = ORIENTED_EDGE('',*,*,#2180,.T.); +#2180 = EDGE_CURVE('',#1730,#2181,#2183,.T.); +#2181 = VERTEX_POINT('',#2182); +#2182 = CARTESIAN_POINT('',(109.85,38.55899631462,15.367525375036)); +#2183 = LINE('',#2184,#2185); +#2184 = CARTESIAN_POINT('',(109.85,37.631945331495,18.220694923921)); +#2185 = VECTOR('',#2186,1.); +#2186 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2187 = ORIENTED_EDGE('',*,*,#2188,.T.); +#2188 = EDGE_CURVE('',#2181,#2157,#2189,.T.); +#2189 = LINE('',#2190,#2191); +#2190 = CARTESIAN_POINT('',(75.,38.55899631462,15.367525375036)); +#2191 = VECTOR('',#2192,1.); +#2192 = DIRECTION('',(-1.,0.,0.)); +#2193 = ORIENTED_EDGE('',*,*,#2166,.F.); +#2194 = ORIENTED_EDGE('',*,*,#1737,.F.); +#2195 = PLANE('',#2196); +#2196 = AXIS2_PLACEMENT_3D('',#2197,#2198,#2199); +#2197 = CARTESIAN_POINT('',(69.90038168495,36.704894348371, + 21.073864472806)); +#2198 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2199 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2200 = ADVANCED_FACE('',(#2201),#2212,.F.); +#2201 = FACE_BOUND('',#2202,.T.); +#2202 = EDGE_LOOP('',(#2203,#2204,#2210,#2211)); +#2203 = ORIENTED_EDGE('',*,*,#1479,.T.); +#2204 = ORIENTED_EDGE('',*,*,#2205,.T.); +#2205 = EDGE_CURVE('',#1472,#2181,#2206,.T.); +#2206 = LINE('',#2207,#2208); +#2207 = CARTESIAN_POINT('',(109.85,70.494892837324,25.744127172118)); +#2208 = VECTOR('',#2209,1.); +#2209 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2210 = ORIENTED_EDGE('',*,*,#2180,.F.); +#2211 = ORIENTED_EDGE('',*,*,#1729,.T.); +#2212 = PLANE('',#2213); +#2213 = AXIS2_PLACEMENT_3D('',#2214,#2215,#2216); +#2214 = CARTESIAN_POINT('',(109.85,43.701036640134,20.192662228334)); +#2215 = DIRECTION('',(1.,0.,0.)); +#2216 = DIRECTION('',(0.,0.,1.)); +#2217 = ADVANCED_FACE('',(#2218),#2237,.T.); +#2218 = FACE_BOUND('',#2219,.T.); +#2219 = EDGE_LOOP('',(#2220,#2228,#2234,#2235,#2236)); +#2220 = ORIENTED_EDGE('',*,*,#2221,.T.); +#2221 = EDGE_CURVE('',#1715,#2222,#2224,.T.); +#2222 = VERTEX_POINT('',#2223); +#2223 = CARTESIAN_POINT('',(109.75,50.935089245347,39.997421325707)); +#2224 = LINE('',#2225,#2226); +#2225 = CARTESIAN_POINT('',(109.75,56.064771351971,24.209883155208)); +#2226 = VECTOR('',#2227,1.); +#2227 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2228 = ORIENTED_EDGE('',*,*,#2229,.T.); +#2229 = EDGE_CURVE('',#2222,#1600,#2230,.T.); +#2230 = LINE('',#2231,#2232); +#2231 = CARTESIAN_POINT('',(109.75,53.203221564553,38.841750186251)); +#2232 = VECTOR('',#2233,1.); +#2233 = DIRECTION('',(0.,-0.891006524188,0.45399049974)); +#2234 = ORIENTED_EDGE('',*,*,#1599,.T.); +#2235 = ORIENTED_EDGE('',*,*,#1495,.F.); +#2236 = ORIENTED_EDGE('',*,*,#1722,.T.); +#2237 = PLANE('',#2238); +#2238 = AXIS2_PLACEMENT_3D('',#2239,#2240,#2241); +#2239 = CARTESIAN_POINT('',(109.75,43.701036640134,20.192662228334)); +#2240 = DIRECTION('',(1.,0.,0.)); +#2241 = DIRECTION('',(0.,0.,1.)); +#2242 = ADVANCED_FACE('',(#2243),#2261,.F.); +#2243 = FACE_BOUND('',#2244,.T.); +#2244 = EDGE_LOOP('',(#2245,#2253,#2259,#2260)); +#2245 = ORIENTED_EDGE('',*,*,#2246,.T.); +#2246 = EDGE_CURVE('',#1707,#2247,#2249,.T.); +#2247 = VERTEX_POINT('',#2248); +#2248 = CARTESIAN_POINT('',(15.25,50.935089245347,39.997421325707)); +#2249 = LINE('',#2250,#2251); +#2250 = CARTESIAN_POINT('',(15.25,56.064771351971,24.209883155208)); +#2251 = VECTOR('',#2252,1.); +#2252 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2253 = ORIENTED_EDGE('',*,*,#2254,.T.); +#2254 = EDGE_CURVE('',#2247,#2222,#2255,.T.); +#2255 = LINE('',#2256,#2257); +#2256 = CARTESIAN_POINT('',(75.,50.935089245347,39.997421325707)); +#2257 = VECTOR('',#2258,1.); +#2258 = DIRECTION('',(1.,0.,0.)); +#2259 = ORIENTED_EDGE('',*,*,#2221,.F.); +#2260 = ORIENTED_EDGE('',*,*,#1714,.T.); +#2261 = PLANE('',#2262); +#2262 = AXIS2_PLACEMENT_3D('',#2263,#2264,#2265); +#2263 = CARTESIAN_POINT('',(75.,56.064771351971,24.209883155208)); +#2264 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2265 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2266 = ADVANCED_FACE('',(#2267),#2279,.T.); +#2267 = FACE_BOUND('',#2268,.T.); +#2268 = EDGE_LOOP('',(#2269,#2270,#2271,#2277,#2278)); +#2269 = ORIENTED_EDGE('',*,*,#1519,.T.); +#2270 = ORIENTED_EDGE('',*,*,#1615,.F.); +#2271 = ORIENTED_EDGE('',*,*,#2272,.T.); +#2272 = EDGE_CURVE('',#1608,#2247,#2273,.T.); +#2273 = LINE('',#2274,#2275); +#2274 = CARTESIAN_POINT('',(15.25,53.203221564553,38.841750186251)); +#2275 = VECTOR('',#2276,1.); +#2276 = DIRECTION('',(0.,0.891006524188,-0.45399049974)); +#2277 = ORIENTED_EDGE('',*,*,#2246,.F.); +#2278 = ORIENTED_EDGE('',*,*,#1706,.F.); +#2279 = PLANE('',#2280); +#2280 = AXIS2_PLACEMENT_3D('',#2281,#2282,#2283); +#2281 = CARTESIAN_POINT('',(15.25,43.701036640134,20.192662228334)); +#2282 = DIRECTION('',(-1.,0.,0.)); +#2283 = DIRECTION('',(0.,0.,1.)); +#2284 = ADVANCED_FACE('',(#2285),#2303,.F.); +#2285 = FACE_BOUND('',#2286,.T.); +#2286 = EDGE_LOOP('',(#2287,#2288,#2296,#2302)); +#2287 = ORIENTED_EDGE('',*,*,#1699,.F.); +#2288 = ORIENTED_EDGE('',*,*,#2289,.F.); +#2289 = EDGE_CURVE('',#2290,#1692,#2292,.T.); +#2290 = VERTEX_POINT('',#2291); +#2291 = CARTESIAN_POINT('',(15.15,38.439721062955,16.058223651227)); +#2292 = LINE('',#2293,#2294); +#2293 = CARTESIAN_POINT('',(15.15,36.8,21.104766172244)); +#2294 = VECTOR('',#2295,1.); +#2295 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2296 = ORIENTED_EDGE('',*,*,#2297,.T.); +#2297 = EDGE_CURVE('',#2290,#1536,#2298,.T.); +#2298 = LINE('',#2299,#2300); +#2299 = CARTESIAN_POINT('',(15.15,66.789410500954,25.269596131719)); +#2300 = VECTOR('',#2301,1.); +#2301 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2302 = ORIENTED_EDGE('',*,*,#1535,.F.); +#2303 = PLANE('',#2304); +#2304 = AXIS2_PLACEMENT_3D('',#2305,#2306,#2307); +#2305 = CARTESIAN_POINT('',(15.15,43.701036640134,20.192662228334)); +#2306 = DIRECTION('',(-1.,0.,0.)); +#2307 = DIRECTION('',(0.,0.,1.)); +#2308 = ADVANCED_FACE('',(#2309),#2336,.F.); +#2309 = FACE_BOUND('',#2310,.T.); +#2310 = EDGE_LOOP('',(#2311,#2312,#2320,#2328,#2335)); +#2311 = ORIENTED_EDGE('',*,*,#1691,.T.); +#2312 = ORIENTED_EDGE('',*,*,#2313,.T.); +#2313 = EDGE_CURVE('',#1684,#2314,#2316,.T.); +#2314 = VERTEX_POINT('',#2315); +#2315 = CARTESIAN_POINT('',(21.35,38.65410196625,15.398427074473)); +#2316 = LINE('',#2317,#2318); +#2317 = CARTESIAN_POINT('',(21.35,28.880294096798,45.479114649799)); +#2318 = VECTOR('',#2319,1.); +#2319 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2320 = ORIENTED_EDGE('',*,*,#2321,.F.); +#2321 = EDGE_CURVE('',#2322,#2314,#2324,.T.); +#2322 = VERTEX_POINT('',#2323); +#2323 = CARTESIAN_POINT('',(20.,38.65410196625,15.398427074473)); +#2324 = LINE('',#2325,#2326); +#2325 = CARTESIAN_POINT('',(75.,38.65410196625,15.398427074473)); +#2326 = VECTOR('',#2327,1.); +#2327 = DIRECTION('',(1.,0.,0.)); +#2328 = ORIENTED_EDGE('',*,*,#2329,.F.); +#2329 = EDGE_CURVE('',#2290,#2322,#2330,.T.); +#2330 = CIRCLE('',#2331,17.3); +#2331 = AXIS2_PLACEMENT_3D('',#2332,#2333,#2334); +#2332 = CARTESIAN_POINT('',(20.,33.308107963563,31.851704806379)); +#2333 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2334 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2335 = ORIENTED_EDGE('',*,*,#2289,.T.); +#2336 = PLANE('',#2337); +#2337 = AXIS2_PLACEMENT_3D('',#2338,#2339,#2340); +#2338 = CARTESIAN_POINT('',(69.90038168495,36.8,21.104766172244)); +#2339 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2340 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#2341 = ADVANCED_FACE('',(#2342),#2353,.T.); +#2342 = FACE_BOUND('',#2343,.T.); +#2343 = EDGE_LOOP('',(#2344,#2350,#2351,#2352)); +#2344 = ORIENTED_EDGE('',*,*,#2345,.T.); +#2345 = EDGE_CURVE('',#1553,#2314,#2346,.T.); +#2346 = LINE('',#2347,#2348); +#2347 = CARTESIAN_POINT('',(21.35,42.298807869452,16.5826638094)); +#2348 = VECTOR('',#2349,1.); +#2349 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2350 = ORIENTED_EDGE('',*,*,#2313,.F.); +#2351 = ORIENTED_EDGE('',*,*,#1683,.T.); +#2352 = ORIENTED_EDGE('',*,*,#1560,.T.); +#2353 = PLANE('',#2354); +#2354 = AXIS2_PLACEMENT_3D('',#2355,#2356,#2357); +#2355 = CARTESIAN_POINT('',(21.35,32.525,46.663351384726)); +#2356 = DIRECTION('',(-1.,0.,0.)); +#2357 = DIRECTION('',(0.,0.,1.)); +#2358 = ADVANCED_FACE('',(#2359),#2384,.T.); +#2359 = FACE_BOUND('',#2360,.T.); +#2360 = EDGE_LOOP('',(#2361,#2369,#2377,#2383)); +#2361 = ORIENTED_EDGE('',*,*,#2362,.F.); +#2362 = EDGE_CURVE('',#2363,#1779,#2365,.T.); +#2363 = VERTEX_POINT('',#2364); +#2364 = CARTESIAN_POINT('',(130.54999999999,62.44449159035, + 23.137588265587)); +#2365 = LINE('',#2366,#2367); +#2366 = CARTESIAN_POINT('',(130.54999999999,57.351140429379, + 38.81331128276)); +#2367 = VECTOR('',#2368,1.); +#2368 = DIRECTION('',(-5.324811110242E-30,-0.309016994375,0.951056516295 + )); +#2369 = ORIENTED_EDGE('',*,*,#2370,.T.); +#2370 = EDGE_CURVE('',#2363,#2371,#2373,.T.); +#2371 = VERTEX_POINT('',#2372); +#2372 = CARTESIAN_POINT('',(130.54999999999,57.308786402356, + 21.468896495963)); +#2373 = LINE('',#2374,#2375); +#2374 = CARTESIAN_POINT('',(130.54999999999,62.44449159035, + 23.137588265587)); +#2375 = VECTOR('',#2376,1.); +#2376 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2377 = ORIENTED_EDGE('',*,*,#2378,.F.); +#2378 = EDGE_CURVE('',#1763,#2371,#2379,.T.); +#2379 = LINE('',#2380,#2381); +#2380 = CARTESIAN_POINT('',(130.54999999999,52.215435241385, + 37.144619513135)); +#2381 = VECTOR('',#2382,1.); +#2382 = DIRECTION('',(5.324811110242E-30,0.309016994375,-0.951056516295) + ); +#2383 = ORIENTED_EDGE('',*,*,#1786,.T.); +#2384 = PLANE('',#2385); +#2385 = AXIS2_PLACEMENT_3D('',#2386,#2387,#2388); +#2386 = CARTESIAN_POINT('',(130.55,81.888398549794,46.785949737633)); +#2387 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2388 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2389 = ADVANCED_FACE('',(#2390),#2417,.T.); +#2390 = FACE_BOUND('',#2391,.T.); +#2391 = EDGE_LOOP('',(#2392,#2402,#2409,#2410,#2411)); +#2392 = ORIENTED_EDGE('',*,*,#2393,.F.); +#2393 = EDGE_CURVE('',#2394,#2396,#2398,.T.); +#2394 = VERTEX_POINT('',#2395); +#2395 = CARTESIAN_POINT('',(130.,62.447193939274,23.12927129079)); +#2396 = VERTEX_POINT('',#2397); +#2397 = CARTESIAN_POINT('',(122.80668500784,62.447193939274, + 23.12927129079)); +#2398 = LINE('',#2399,#2400); +#2399 = CARTESIAN_POINT('',(75.,62.447193939275,23.12927129079)); +#2400 = VECTOR('',#2401,1.); +#2401 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2402 = ORIENTED_EDGE('',*,*,#2403,.T.); +#2403 = EDGE_CURVE('',#2394,#2363,#2404,.T.); +#2404 = CIRCLE('',#2405,17.3); +#2405 = AXIS2_PLACEMENT_3D('',#2406,#2407,#2408); +#2406 = CARTESIAN_POINT('',(130.,57.101199936588,39.582549022696)); +#2407 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2408 = DIRECTION('',(1.972152263053E-31,0.309016994375,-0.951056516295) + ); +#2409 = ORIENTED_EDGE('',*,*,#2362,.T.); +#2410 = ORIENTED_EDGE('',*,*,#1778,.T.); +#2411 = ORIENTED_EDGE('',*,*,#2412,.T.); +#2412 = EDGE_CURVE('',#1771,#2396,#2413,.T.); +#2413 = LINE('',#2414,#2415); +#2414 = CARTESIAN_POINT('',(122.80668500784,56.854880379515, + 40.340642668383)); +#2415 = VECTOR('',#2416,1.); +#2416 = DIRECTION('',(1.577721810442E-30,0.309016994375,-0.951056516295) + ); +#2417 = PLANE('',#2418); +#2418 = AXIS2_PLACEMENT_3D('',#2419,#2420,#2421); +#2419 = CARTESIAN_POINT('',(130.17834250392,56.854880379515, + 40.340642668383)); +#2420 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2421 = DIRECTION('',(1.972152263053E-31,0.309016994375,-0.951056516295) + ); +#2422 = ADVANCED_FACE('',(#2423),#2441,.F.); +#2423 = FACE_BOUND('',#2424,.T.); +#2424 = EDGE_LOOP('',(#2425,#2426,#2434,#2440)); +#2425 = ORIENTED_EDGE('',*,*,#1770,.F.); +#2426 = ORIENTED_EDGE('',*,*,#2427,.T.); +#2427 = EDGE_CURVE('',#1761,#2428,#2430,.T.); +#2428 = VERTEX_POINT('',#2429); +#2429 = CARTESIAN_POINT('',(122.80668500784,57.311488751281, + 21.460579521165)); +#2430 = LINE('',#2431,#2432); +#2431 = CARTESIAN_POINT('',(122.80668500784,57.002471756906, + 22.41163603746)); +#2432 = VECTOR('',#2433,1.); +#2433 = DIRECTION('',(1.577721810442E-30,0.309016994375,-0.951056516295) + ); +#2434 = ORIENTED_EDGE('',*,*,#2435,.F.); +#2435 = EDGE_CURVE('',#2396,#2428,#2436,.T.); +#2436 = LINE('',#2437,#2438); +#2437 = CARTESIAN_POINT('',(122.80668500784,130.77381835236, + 45.329937339711)); +#2438 = VECTOR('',#2439,1.); +#2439 = DIRECTION('',(-1.718195667145E-15,-0.951056516295, + -0.309016994375)); +#2440 = ORIENTED_EDGE('',*,*,#2412,.F.); +#2441 = PLANE('',#2442); +#2442 = AXIS2_PLACEMENT_3D('',#2443,#2444,#2445); +#2443 = CARTESIAN_POINT('',(122.80668500784,130.46480135799, + 46.280993856006)); +#2444 = DIRECTION('',(-1.,1.634101185508E-15,5.309516608092E-16)); +#2445 = DIRECTION('',(-1.634101185508E-15,-1.,-1.846530844302E-33)); +#2446 = ADVANCED_FACE('',(#2447),#2467,.F.); +#2447 = FACE_BOUND('',#2448,.T.); +#2448 = EDGE_LOOP('',(#2449,#2450,#2459,#2465,#2466)); +#2449 = ORIENTED_EDGE('',*,*,#2378,.T.); +#2450 = ORIENTED_EDGE('',*,*,#2451,.T.); +#2451 = EDGE_CURVE('',#2371,#2452,#2454,.T.); +#2452 = VERTEX_POINT('',#2453); +#2453 = CARTESIAN_POINT('',(130.,57.311488751281,21.460579521165)); +#2454 = CIRCLE('',#2455,17.3); +#2455 = AXIS2_PLACEMENT_3D('',#2456,#2457,#2458); +#2456 = CARTESIAN_POINT('',(130.,51.965494748594,37.913857253071)); +#2457 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#2458 = DIRECTION('',(1.972152263053E-31,0.309016994375,-0.951056516295) + ); +#2459 = ORIENTED_EDGE('',*,*,#2460,.T.); +#2460 = EDGE_CURVE('',#2452,#2428,#2461,.T.); +#2461 = LINE('',#2462,#2463); +#2462 = CARTESIAN_POINT('',(143.74999999999,57.311488751281, + 21.460579521165)); +#2463 = VECTOR('',#2464,1.); +#2464 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2465 = ORIENTED_EDGE('',*,*,#2427,.F.); +#2466 = ORIENTED_EDGE('',*,*,#1760,.T.); +#2467 = PLANE('',#2468); +#2468 = AXIS2_PLACEMENT_3D('',#2469,#2470,#2471); +#2469 = CARTESIAN_POINT('',(143.74999999999,47.259172017491, + 52.398429243221)); +#2470 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2471 = DIRECTION('',(-1.,2.228850717429E-15,7.221212249385E-16)); +#2472 = ADVANCED_FACE('',(#2473),#2498,.T.); +#2473 = FACE_BOUND('',#2474,.T.); +#2474 = EDGE_LOOP('',(#2475,#2485,#2491,#2492)); +#2475 = ORIENTED_EDGE('',*,*,#2476,.F.); +#2476 = EDGE_CURVE('',#2477,#2479,#2481,.T.); +#2477 = VERTEX_POINT('',#2478); +#2478 = CARTESIAN_POINT('',(130.55,111.51900783117,39.082865175335)); +#2479 = VERTEX_POINT('',#2480); +#2480 = CARTESIAN_POINT('',(130.55,116.65471301917,40.751556944959)); +#2481 = LINE('',#2482,#2483); +#2482 = CARTESIAN_POINT('',(130.55,111.51900783117,39.082865175335)); +#2483 = VECTOR('',#2484,1.); +#2484 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#2485 = ORIENTED_EDGE('',*,*,#2486,.F.); +#2486 = EDGE_CURVE('',#1797,#2477,#2487,.T.); +#2487 = LINE('',#2488,#2489); +#2488 = CARTESIAN_POINT('',(130.55,106.4256566702,54.758588192507)); +#2489 = VECTOR('',#2490,1.); +#2490 = DIRECTION('',(-5.522026336547E-30,0.309016994375,-0.951056516295 + )); +#2491 = ORIENTED_EDGE('',*,*,#1820,.T.); +#2492 = ORIENTED_EDGE('',*,*,#2493,.F.); +#2493 = EDGE_CURVE('',#2479,#1813,#2494,.T.); +#2494 = LINE('',#2495,#2496); +#2495 = CARTESIAN_POINT('',(130.55,111.5613618582,56.427279962132)); +#2496 = VECTOR('',#2497,1.); +#2497 = DIRECTION('',(5.522026336547E-30,-0.309016994375,0.951056516295) + ); +#2498 = PLANE('',#2499); +#2499 = AXIS2_PLACEMENT_3D('',#2500,#2501,#2502); +#2500 = CARTESIAN_POINT('',(130.55,81.888398549794,46.785949737633)); +#2501 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2502 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2503 = ADVANCED_FACE('',(#2504),#2531,.F.); +#2504 = FACE_BOUND('',#2505,.T.); +#2505 = EDGE_LOOP('',(#2506,#2515,#2516,#2517,#2525)); +#2506 = ORIENTED_EDGE('',*,*,#2507,.F.); +#2507 = EDGE_CURVE('',#2479,#2508,#2510,.T.); +#2508 = VERTEX_POINT('',#2509); +#2509 = CARTESIAN_POINT('',(130.,116.65741536809,40.743239970162)); +#2510 = CIRCLE('',#2511,17.3); +#2511 = AXIS2_PLACEMENT_3D('',#2512,#2513,#2514); +#2512 = CARTESIAN_POINT('',(130.,111.31142136541,57.196517702068)); +#2513 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#2514 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2515 = ORIENTED_EDGE('',*,*,#2493,.T.); +#2516 = ORIENTED_EDGE('',*,*,#1812,.T.); +#2517 = ORIENTED_EDGE('',*,*,#2518,.T.); +#2518 = EDGE_CURVE('',#1805,#2519,#2521,.T.); +#2519 = VERTEX_POINT('',#2520); +#2520 = CARTESIAN_POINT('',(122.80668500784,116.65741536809, + 40.743239970162)); +#2521 = LINE('',#2522,#2523); +#2522 = CARTESIAN_POINT('',(122.80668500784,106.6050986343, + 71.681089692218)); +#2523 = VECTOR('',#2524,1.); +#2524 = DIRECTION('',(-8.578862344278E-30,0.309016994375,-0.951056516295 + )); +#2525 = ORIENTED_EDGE('',*,*,#2526,.T.); +#2526 = EDGE_CURVE('',#2519,#2508,#2527,.T.); +#2527 = LINE('',#2528,#2529); +#2528 = CARTESIAN_POINT('',(143.75,116.65741536809,40.743239970162)); +#2529 = VECTOR('',#2530,1.); +#2530 = DIRECTION('',(1.,-2.22824051607E-15,-7.239992316154E-16)); +#2531 = PLANE('',#2532); +#2532 = AXIS2_PLACEMENT_3D('',#2533,#2534,#2535); +#2533 = CARTESIAN_POINT('',(143.75,106.6050986343,71.681089692218)); +#2534 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#2535 = DIRECTION('',(-1.,2.229513322836E-15,7.200819351866E-16)); +#2536 = ADVANCED_FACE('',(#2537),#2555,.F.); +#2537 = FACE_BOUND('',#2538,.T.); +#2538 = EDGE_LOOP('',(#2539,#2540,#2548,#2554)); +#2539 = ORIENTED_EDGE('',*,*,#1804,.F.); +#2540 = ORIENTED_EDGE('',*,*,#2541,.T.); +#2541 = EDGE_CURVE('',#1795,#2542,#2544,.T.); +#2542 = VERTEX_POINT('',#2543); +#2543 = CARTESIAN_POINT('',(122.80668500784,111.5217101801, + 39.074548200537)); +#2544 = LINE('',#2545,#2546); +#2545 = CARTESIAN_POINT('',(122.80668500784,111.21269318572, + 40.025604716832)); +#2546 = VECTOR('',#2547,1.); +#2547 = DIRECTION('',(-8.578862344278E-30,0.309016994375,-0.951056516295 + )); +#2548 = ORIENTED_EDGE('',*,*,#2549,.F.); +#2549 = EDGE_CURVE('',#2519,#2542,#2550,.T.); +#2550 = LINE('',#2551,#2552); +#2551 = CARTESIAN_POINT('',(122.80668500784,130.77381835236, + 45.329937339711)); +#2552 = VECTOR('',#2553,1.); +#2553 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2554 = ORIENTED_EDGE('',*,*,#2518,.F.); +#2555 = PLANE('',#2556); +#2556 = AXIS2_PLACEMENT_3D('',#2557,#2558,#2559); +#2557 = CARTESIAN_POINT('',(122.80668500784,130.46480135799, + 46.280993856006)); +#2558 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2559 = DIRECTION('',(-2.22824051607E-15,-1.,-4.404319720895E-33)); +#2560 = ADVANCED_FACE('',(#2561),#2581,.T.); +#2561 = FACE_BOUND('',#2562,.T.); +#2562 = EDGE_LOOP('',(#2563,#2572,#2578,#2579,#2580)); +#2563 = ORIENTED_EDGE('',*,*,#2564,.F.); +#2564 = EDGE_CURVE('',#2565,#2477,#2567,.T.); +#2565 = VERTEX_POINT('',#2566); +#2566 = CARTESIAN_POINT('',(130.,111.5217101801,39.074548200537)); +#2567 = CIRCLE('',#2568,17.3); +#2568 = AXIS2_PLACEMENT_3D('',#2569,#2570,#2571); +#2569 = CARTESIAN_POINT('',(130.,106.17571617741,55.527825932443)); +#2570 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2571 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2572 = ORIENTED_EDGE('',*,*,#2573,.F.); +#2573 = EDGE_CURVE('',#2542,#2565,#2574,.T.); +#2574 = LINE('',#2575,#2576); +#2575 = CARTESIAN_POINT('',(75.,111.5217101801,39.074548200537)); +#2576 = VECTOR('',#2577,1.); +#2577 = DIRECTION('',(1.,-2.22824051607E-15,-7.239992316154E-16)); +#2578 = ORIENTED_EDGE('',*,*,#2541,.F.); +#2579 = ORIENTED_EDGE('',*,*,#1794,.T.); +#2580 = ORIENTED_EDGE('',*,*,#2486,.T.); +#2581 = PLANE('',#2582); +#2582 = AXIS2_PLACEMENT_3D('',#2583,#2584,#2585); +#2583 = CARTESIAN_POINT('',(130.17834250392,105.92939662034, + 56.28591957813)); +#2584 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#2585 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#2586 = ADVANCED_FACE('',(#2587),#2612,.F.); +#2587 = FACE_BOUND('',#2588,.T.); +#2588 = EDGE_LOOP('',(#2589,#2597,#2605,#2611)); +#2589 = ORIENTED_EDGE('',*,*,#2590,.T.); +#2590 = EDGE_CURVE('',#1847,#2591,#2593,.T.); +#2591 = VERTEX_POINT('',#2592); +#2592 = CARTESIAN_POINT('',(137.35,104.97763230364,52.720181768366)); +#2593 = LINE('',#2594,#2595); +#2594 = CARTESIAN_POINT('',(137.35,92.762196609226,90.315427104488)); +#2595 = VECTOR('',#2596,1.); +#2596 = DIRECTION('',(5.61473622072E-30,-0.309016994375,0.951056516295) + ); +#2597 = ORIENTED_EDGE('',*,*,#2598,.T.); +#2598 = EDGE_CURVE('',#2591,#2599,#2601,.T.); +#2599 = VERTEX_POINT('',#2600); +#2600 = CARTESIAN_POINT('',(137.35,59.72076198449,38.015333211816)); +#2601 = LINE('',#2602,#2603); +#2602 = CARTESIAN_POINT('',(137.35,126.13856343674,59.595785084138)); +#2603 = VECTOR('',#2604,1.); +#2604 = DIRECTION('',(-2.342910729165E-15,-0.951056516295, + -0.309016994375)); +#2605 = ORIENTED_EDGE('',*,*,#2606,.T.); +#2606 = EDGE_CURVE('',#2599,#1831,#2607,.T.); +#2607 = LINE('',#2608,#2609); +#2608 = CARTESIAN_POINT('',(137.35,47.505326290076,75.610578547938)); +#2609 = VECTOR('',#2610,1.); +#2610 = DIRECTION('',(5.410563994512E-30,0.309016994375,-0.951056516295) + ); +#2611 = ORIENTED_EDGE('',*,*,#1854,.T.); +#2612 = PLANE('',#2613); +#2613 = AXIS2_PLACEMENT_3D('',#2614,#2615,#2616); +#2614 = CARTESIAN_POINT('',(137.35,70.133761449651,82.963002826213)); +#2615 = DIRECTION('',(-1.,2.22824051607E-15,7.239992316154E-16)); +#2616 = DIRECTION('',(2.342910729165E-15,0.951056516295,0.309016994375) + ); +#2617 = ADVANCED_FACE('',(#2618),#2636,.F.); +#2618 = FACE_BOUND('',#2619,.T.); +#2619 = EDGE_LOOP('',(#2620,#2628,#2634,#2635)); +#2620 = ORIENTED_EDGE('',*,*,#2621,.F.); +#2621 = EDGE_CURVE('',#2622,#1839,#2624,.T.); +#2622 = VERTEX_POINT('',#2623); +#2623 = CARTESIAN_POINT('',(126.75797370188,102.27841513029, + 51.843152944335)); +#2624 = LINE('',#2625,#2626); +#2625 = CARTESIAN_POINT('',(124.44809716462,104.35368281554, + 43.453237648131)); +#2626 = VECTOR('',#2627,1.); +#2627 = DIRECTION('',(-0.258198889747,0.231974221834,-0.937827965961)); +#2628 = ORIENTED_EDGE('',*,*,#2629,.T.); +#2629 = EDGE_CURVE('',#2622,#2591,#2630,.T.); +#2630 = LINE('',#2631,#2632); +#2631 = CARTESIAN_POINT('',(84.739137966061,91.570552457941, + 48.363957457531)); +#2632 = VECTOR('',#2633,1.); +#2633 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#2634 = ORIENTED_EDGE('',*,*,#2590,.F.); +#2635 = ORIENTED_EDGE('',*,*,#1846,.T.); +#2636 = PLANE('',#2637); +#2637 = AXIS2_PLACEMENT_3D('',#2638,#2639,#2640); +#2638 = CARTESIAN_POINT('',(137.40176380902,93.700399363263, + 87.472820425896)); +#2639 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#2640 = DIRECTION('',(-0.965925826289,-0.246151539386, + -7.997948340457E-02)); +#2641 = ADVANCED_FACE('',(#2642),#2660,.T.); +#2642 = FACE_BOUND('',#2643,.T.); +#2643 = EDGE_LOOP('',(#2644,#2652,#2658,#2659)); +#2644 = ORIENTED_EDGE('',*,*,#2645,.T.); +#2645 = EDGE_CURVE('',#1829,#2646,#2648,.T.); +#2646 = VERTEX_POINT('',#2647); +#2647 = CARTESIAN_POINT('',(126.75797370188,62.419979157838, + 38.892362035847)); +#2648 = LINE('',#2649,#2650); +#2649 = CARTESIAN_POINT('',(123.51920663086,66.98049338259, + 27.664883246293)); +#2650 = VECTOR('',#2651,1.); +#2651 = DIRECTION('',(0.258198889747,-0.363570359859,0.895069788768)); +#2652 = ORIENTED_EDGE('',*,*,#2653,.F.); +#2653 = EDGE_CURVE('',#2622,#2646,#2654,.T.); +#2654 = LINE('',#2655,#2656); +#2655 = CARTESIAN_POINT('',(126.75797370188,107.07666656773, + 53.402199343839)); +#2656 = VECTOR('',#2657,1.); +#2657 = DIRECTION('',(-3.045387193347E-15,-0.951056516295, + -0.309016994375)); +#2658 = ORIENTED_EDGE('',*,*,#2621,.T.); +#2659 = ORIENTED_EDGE('',*,*,#1838,.F.); +#2660 = PLANE('',#2661); +#2661 = AXIS2_PLACEMENT_3D('',#2662,#2663,#2664); +#2662 = CARTESIAN_POINT('',(124.34643097,109.85781951711,44.842690697183 + )); +#2663 = DIRECTION('',(-0.965925826289,-7.997948340457E-02,0.246151539386 + )); +#2664 = DIRECTION('',(0.258819045103,-0.298487495629,0.91865005135)); +#2665 = ADVANCED_FACE('',(#2666),#2677,.F.); +#2666 = FACE_BOUND('',#2667,.T.); +#2667 = EDGE_LOOP('',(#2668,#2669,#2675,#2676)); +#2668 = ORIENTED_EDGE('',*,*,#2606,.F.); +#2669 = ORIENTED_EDGE('',*,*,#2670,.T.); +#2670 = EDGE_CURVE('',#2599,#2646,#2671,.T.); +#2671 = LINE('',#2672,#2673); +#2672 = CARTESIAN_POINT('',(61.71770572602,78.994504497786, + 44.277751774507)); +#2673 = VECTOR('',#2674,1.); +#2674 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340458E-02) + ); +#2675 = ORIENTED_EDGE('',*,*,#2645,.F.); +#2676 = ORIENTED_EDGE('',*,*,#1828,.T.); +#2677 = PLANE('',#2678); +#2678 = AXIS2_PLACEMENT_3D('',#2679,#2680,#2681); +#2679 = CARTESIAN_POINT('',(137.40176380902,48.417146601635, + 72.75939969415)); +#2680 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#2681 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340458E-02) + ); +#2682 = ADVANCED_FACE('',(#2683),#2708,.T.); +#2683 = FACE_BOUND('',#2684,.T.); +#2684 = EDGE_LOOP('',(#2685,#2695,#2701,#2702)); +#2685 = ORIENTED_EDGE('',*,*,#2686,.F.); +#2686 = EDGE_CURVE('',#2687,#2689,#2691,.T.); +#2687 = VERTEX_POINT('',#2688); +#2688 = CARTESIAN_POINT('',(19.45,62.44449159035,23.137588265587)); +#2689 = VERTEX_POINT('',#2690); +#2690 = CARTESIAN_POINT('',(19.45,57.308786402356,21.468896495963)); +#2691 = LINE('',#2692,#2693); +#2692 = CARTESIAN_POINT('',(19.45,62.44449159035,23.137588265587)); +#2693 = VECTOR('',#2694,1.); +#2694 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2695 = ORIENTED_EDGE('',*,*,#2696,.F.); +#2696 = EDGE_CURVE('',#1865,#2687,#2697,.T.); +#2697 = LINE('',#2698,#2699); +#2698 = CARTESIAN_POINT('',(19.45,57.351140429379,38.81331128276)); +#2699 = VECTOR('',#2700,1.); +#2700 = DIRECTION('',(-5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#2701 = ORIENTED_EDGE('',*,*,#1888,.T.); +#2702 = ORIENTED_EDGE('',*,*,#2703,.F.); +#2703 = EDGE_CURVE('',#2689,#1881,#2704,.T.); +#2704 = LINE('',#2705,#2706); +#2705 = CARTESIAN_POINT('',(19.45,52.215435241385,37.144619513135)); +#2706 = VECTOR('',#2707,1.); +#2707 = DIRECTION('',(5.551115123125E-17,-0.309016994375,0.951056516295) + ); +#2708 = PLANE('',#2709); +#2709 = AXIS2_PLACEMENT_3D('',#2710,#2711,#2712); +#2710 = CARTESIAN_POINT('',(19.45,81.888398549794,46.785949737633)); +#2711 = DIRECTION('',(1.,-3.346331717236E-15,-1.145656963602E-15)); +#2712 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2713 = ADVANCED_FACE('',(#2714),#2741,.F.); +#2714 = FACE_BOUND('',#2715,.T.); +#2715 = EDGE_LOOP('',(#2716,#2725,#2726,#2727,#2735)); +#2716 = ORIENTED_EDGE('',*,*,#2717,.F.); +#2717 = EDGE_CURVE('',#2689,#2718,#2720,.T.); +#2718 = VERTEX_POINT('',#2719); +#2719 = CARTESIAN_POINT('',(20.,57.311488751281,21.460579521165)); +#2720 = CIRCLE('',#2721,17.3); +#2721 = AXIS2_PLACEMENT_3D('',#2722,#2723,#2724); +#2722 = CARTESIAN_POINT('',(20.,51.965494748594,37.913857253071)); +#2723 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#2724 = DIRECTION('',(-7.88860905221E-31,0.309016994375,-0.951056516295) + ); +#2725 = ORIENTED_EDGE('',*,*,#2703,.T.); +#2726 = ORIENTED_EDGE('',*,*,#1880,.T.); +#2727 = ORIENTED_EDGE('',*,*,#2728,.T.); +#2728 = EDGE_CURVE('',#1873,#2729,#2731,.T.); +#2729 = VERTEX_POINT('',#2730); +#2730 = CARTESIAN_POINT('',(27.193314992156,57.311488751281, + 21.460579521165)); +#2731 = LINE('',#2732,#2733); +#2732 = CARTESIAN_POINT('',(27.193314992156,47.259172017491, + 52.398429243221)); +#2733 = VECTOR('',#2734,1.); +#2734 = DIRECTION('',(3.944304526105E-30,0.309016994375,-0.951056516295) + ); +#2735 = ORIENTED_EDGE('',*,*,#2736,.T.); +#2736 = EDGE_CURVE('',#2729,#2718,#2737,.T.); +#2737 = LINE('',#2738,#2739); +#2738 = CARTESIAN_POINT('',(6.25,57.311488751281,21.460579521165)); +#2739 = VECTOR('',#2740,1.); +#2740 = DIRECTION('',(-1.,3.363485606343E-15,1.092862721497E-15)); +#2741 = PLANE('',#2742); +#2742 = AXIS2_PLACEMENT_3D('',#2743,#2744,#2745); +#2743 = CARTESIAN_POINT('',(6.25,47.259172017491,52.398429243221)); +#2744 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#2745 = DIRECTION('',(1.,-3.346378603317E-15,-1.14551266308E-15)); +#2746 = ADVANCED_FACE('',(#2747),#2765,.F.); +#2747 = FACE_BOUND('',#2748,.T.); +#2748 = EDGE_LOOP('',(#2749,#2750,#2758,#2764)); +#2749 = ORIENTED_EDGE('',*,*,#1872,.F.); +#2750 = ORIENTED_EDGE('',*,*,#2751,.T.); +#2751 = EDGE_CURVE('',#1863,#2752,#2754,.T.); +#2752 = VERTEX_POINT('',#2753); +#2753 = CARTESIAN_POINT('',(27.193314992156,62.447193939274, + 23.12927129079)); +#2754 = LINE('',#2755,#2756); +#2755 = CARTESIAN_POINT('',(27.193314992156,62.1381769449, + 24.080327807085)); +#2756 = VECTOR('',#2757,1.); +#2757 = DIRECTION('',(3.944304526105E-30,0.309016994375,-0.951056516295) + ); +#2758 = ORIENTED_EDGE('',*,*,#2759,.F.); +#2759 = EDGE_CURVE('',#2729,#2752,#2760,.T.); +#2760 = LINE('',#2761,#2762); +#2761 = CARTESIAN_POINT('',(27.193314992156,43.195085767013, + 16.873882151616)); +#2762 = VECTOR('',#2763,1.); +#2763 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2764 = ORIENTED_EDGE('',*,*,#2728,.F.); +#2765 = PLANE('',#2766); +#2766 = AXIS2_PLACEMENT_3D('',#2767,#2768,#2769); +#2767 = CARTESIAN_POINT('',(27.193314992156,42.886068772638, + 17.824938667911)); +#2768 = DIRECTION('',(1.,-3.363485606343E-15,-1.092862721497E-15)); +#2769 = DIRECTION('',(3.363485606343E-15,1.,-1.739301840876E-33)); +#2770 = ADVANCED_FACE('',(#2771),#2791,.T.); +#2771 = FACE_BOUND('',#2772,.T.); +#2772 = EDGE_LOOP('',(#2773,#2782,#2788,#2789,#2790)); +#2773 = ORIENTED_EDGE('',*,*,#2774,.F.); +#2774 = EDGE_CURVE('',#2775,#2687,#2777,.T.); +#2775 = VERTEX_POINT('',#2776); +#2776 = CARTESIAN_POINT('',(20.,62.447193939275,23.12927129079)); +#2777 = CIRCLE('',#2778,17.3); +#2778 = AXIS2_PLACEMENT_3D('',#2779,#2780,#2781); +#2779 = CARTESIAN_POINT('',(20.,57.101199936588,39.582549022696)); +#2780 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2781 = DIRECTION('',(-7.88860905221E-31,0.309016994375,-0.951056516295) + ); +#2782 = ORIENTED_EDGE('',*,*,#2783,.F.); +#2783 = EDGE_CURVE('',#2752,#2775,#2784,.T.); +#2784 = LINE('',#2785,#2786); +#2785 = CARTESIAN_POINT('',(75.,62.447193939274,23.12927129079)); +#2786 = VECTOR('',#2787,1.); +#2787 = DIRECTION('',(-1.,3.363485606343E-15,1.092862721497E-15)); +#2788 = ORIENTED_EDGE('',*,*,#2751,.F.); +#2789 = ORIENTED_EDGE('',*,*,#1862,.T.); +#2790 = ORIENTED_EDGE('',*,*,#2696,.T.); +#2791 = PLANE('',#2792); +#2792 = AXIS2_PLACEMENT_3D('',#2793,#2794,#2795); +#2793 = CARTESIAN_POINT('',(19.821657496078,56.854880379515, + 40.340642668383)); +#2794 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#2795 = DIRECTION('',(5.551115123126E-17,-0.309016994375,0.951056516295) + ); +#2796 = ADVANCED_FACE('',(#2797),#2822,.F.); +#2797 = FACE_BOUND('',#2798,.T.); +#2798 = EDGE_LOOP('',(#2799,#2807,#2815,#2821)); +#2799 = ORIENTED_EDGE('',*,*,#2800,.F.); +#2800 = EDGE_CURVE('',#2801,#1915,#2803,.T.); +#2801 = VERTEX_POINT('',#2802); +#2802 = CARTESIAN_POINT('',(12.65,104.97763230364,52.720181768366)); +#2803 = LINE('',#2804,#2805); +#2804 = CARTESIAN_POINT('',(12.65,92.762196609226,90.315427104488)); +#2805 = VECTOR('',#2806,1.); +#2806 = DIRECTION('',(-5.551115123127E-17,0.309016994375,-0.951056516295 + )); +#2807 = ORIENTED_EDGE('',*,*,#2808,.T.); +#2808 = EDGE_CURVE('',#2801,#2809,#2811,.T.); +#2809 = VERTEX_POINT('',#2810); +#2810 = CARTESIAN_POINT('',(23.24202629812,102.27841513029, + 51.843152944335)); +#2811 = LINE('',#2812,#2813); +#2812 = CARTESIAN_POINT('',(65.260862033939,91.570552457941, + 48.363957457531)); +#2813 = VECTOR('',#2814,1.); +#2814 = DIRECTION('',(0.965925826289,-0.246151539386,-7.997948340458E-02 + )); +#2815 = ORIENTED_EDGE('',*,*,#2816,.F.); +#2816 = EDGE_CURVE('',#1899,#2809,#2817,.T.); +#2817 = LINE('',#2818,#2819); +#2818 = CARTESIAN_POINT('',(26.480793369135,105.1882280723, + 40.079328795423)); +#2819 = VECTOR('',#2820,1.); +#2820 = DIRECTION('',(-0.258198889747,-0.231974221834,0.937827965961)); +#2821 = ORIENTED_EDGE('',*,*,#1922,.T.); +#2822 = PLANE('',#2823); +#2823 = AXIS2_PLACEMENT_3D('',#2824,#2825,#2826); +#2824 = CARTESIAN_POINT('',(12.59823619098,93.700399363263, + 87.472820425896)); +#2825 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#2826 = DIRECTION('',(0.965925826289,-0.246151539386,-7.997948340458E-02 + )); +#2827 = ADVANCED_FACE('',(#2828),#2846,.F.); +#2828 = FACE_BOUND('',#2829,.T.); +#2829 = EDGE_LOOP('',(#2830,#2838,#2844,#2845)); +#2830 = ORIENTED_EDGE('',*,*,#2831,.T.); +#2831 = EDGE_CURVE('',#1907,#2832,#2834,.T.); +#2832 = VERTEX_POINT('',#2833); +#2833 = CARTESIAN_POINT('',(12.65,59.720761984491,38.015333211816)); +#2834 = LINE('',#2835,#2836); +#2835 = CARTESIAN_POINT('',(12.65,47.505326290076,75.610578547938)); +#2836 = VECTOR('',#2837,1.); +#2837 = DIRECTION('',(5.551115123125E-17,-0.309016994375,0.951056516295) + ); +#2838 = ORIENTED_EDGE('',*,*,#2839,.T.); +#2839 = EDGE_CURVE('',#2832,#2801,#2840,.T.); +#2840 = LINE('',#2841,#2842); +#2841 = CARTESIAN_POINT('',(12.65,126.13856343674,59.595785084139)); +#2842 = VECTOR('',#2843,1.); +#2843 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2844 = ORIENTED_EDGE('',*,*,#2800,.T.); +#2845 = ORIENTED_EDGE('',*,*,#1914,.T.); +#2846 = PLANE('',#2847); +#2847 = AXIS2_PLACEMENT_3D('',#2848,#2849,#2850); +#2848 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#2849 = DIRECTION('',(1.,-3.346331717236E-15,-1.145656963602E-15)); +#2850 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#2851 = ADVANCED_FACE('',(#2852),#2870,.F.); +#2852 = FACE_BOUND('',#2853,.T.); +#2853 = EDGE_LOOP('',(#2854,#2862,#2868,#2869)); +#2854 = ORIENTED_EDGE('',*,*,#2855,.F.); +#2855 = EDGE_CURVE('',#2856,#1897,#2858,.T.); +#2856 = VERTEX_POINT('',#2857); +#2857 = CARTESIAN_POINT('',(23.24202629812,62.419979157838, + 38.892362035847)); +#2858 = LINE('',#2859,#2860); +#2859 = CARTESIAN_POINT('',(25.551902835373,65.67252081168, + 30.884966239898)); +#2860 = VECTOR('',#2861,1.); +#2861 = DIRECTION('',(0.258198889747,0.363570359859,-0.895069788768)); +#2862 = ORIENTED_EDGE('',*,*,#2863,.T.); +#2863 = EDGE_CURVE('',#2856,#2832,#2864,.T.); +#2864 = LINE('',#2865,#2866); +#2865 = CARTESIAN_POINT('',(88.28229427398,78.994504497786, + 44.277751774507)); +#2866 = VECTOR('',#2867,1.); +#2867 = DIRECTION('',(-0.965925826289,-0.246151539386, + -7.997948340457E-02)); +#2868 = ORIENTED_EDGE('',*,*,#2831,.F.); +#2869 = ORIENTED_EDGE('',*,*,#1906,.T.); +#2870 = PLANE('',#2871); +#2871 = AXIS2_PLACEMENT_3D('',#2872,#2873,#2874); +#2872 = CARTESIAN_POINT('',(12.59823619098,48.417146601635, + 72.75939969415)); +#2873 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#2874 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#2875 = ADVANCED_FACE('',(#2876),#2887,.T.); +#2876 = FACE_BOUND('',#2877,.T.); +#2877 = EDGE_LOOP('',(#2878,#2879,#2885,#2886)); +#2878 = ORIENTED_EDGE('',*,*,#2816,.T.); +#2879 = ORIENTED_EDGE('',*,*,#2880,.T.); +#2880 = EDGE_CURVE('',#2809,#2856,#2881,.T.); +#2881 = LINE('',#2882,#2883); +#2882 = CARTESIAN_POINT('',(23.24202629812,126.13856343674, + 59.595785084139)); +#2883 = VECTOR('',#2884,1.); +#2884 = DIRECTION('',(-3.520488628129E-15,-0.951056516295, + -0.309016994375)); +#2885 = ORIENTED_EDGE('',*,*,#2855,.T.); +#2886 = ORIENTED_EDGE('',*,*,#1896,.T.); +#2887 = PLANE('',#2888); +#2888 = AXIS2_PLACEMENT_3D('',#2889,#2890,#2891); +#2889 = CARTESIAN_POINT('',(25.65356903,60.402880669766,28.773806989686) + ); +#2890 = DIRECTION('',(0.965925826289,-7.997948340458E-02,0.246151539386) + ); +#2891 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#2892 = ADVANCED_FACE('',(#2893),#2918,.T.); +#2893 = FACE_BOUND('',#2894,.T.); +#2894 = EDGE_LOOP('',(#2895,#2905,#2911,#2912)); +#2895 = ORIENTED_EDGE('',*,*,#2896,.F.); +#2896 = EDGE_CURVE('',#2897,#2899,#2901,.T.); +#2897 = VERTEX_POINT('',#2898); +#2898 = CARTESIAN_POINT('',(19.45,116.65471301917,40.751556944959)); +#2899 = VERTEX_POINT('',#2900); +#2900 = CARTESIAN_POINT('',(19.45,111.51900783117,39.082865175335)); +#2901 = LINE('',#2902,#2903); +#2902 = CARTESIAN_POINT('',(19.45,116.65471301917,40.751556944959)); +#2903 = VECTOR('',#2904,1.); +#2904 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#2905 = ORIENTED_EDGE('',*,*,#2906,.F.); +#2906 = EDGE_CURVE('',#1933,#2897,#2907,.T.); +#2907 = LINE('',#2908,#2909); +#2908 = CARTESIAN_POINT('',(19.45,111.5613618582,56.427279962132)); +#2909 = VECTOR('',#2910,1.); +#2910 = DIRECTION('',(-5.551115123127E-17,0.309016994375,-0.951056516295 + )); +#2911 = ORIENTED_EDGE('',*,*,#1956,.T.); +#2912 = ORIENTED_EDGE('',*,*,#2913,.F.); +#2913 = EDGE_CURVE('',#2899,#1949,#2914,.T.); +#2914 = LINE('',#2915,#2916); +#2915 = CARTESIAN_POINT('',(19.45,106.4256566702,54.758588192507)); +#2916 = VECTOR('',#2917,1.); +#2917 = DIRECTION('',(5.551115123127E-17,-0.309016994375,0.951056516295) + ); +#2918 = PLANE('',#2919); +#2919 = AXIS2_PLACEMENT_3D('',#2920,#2921,#2922); +#2920 = CARTESIAN_POINT('',(19.45,81.888398549794,46.785949737633)); +#2921 = DIRECTION('',(1.,-3.346331717236E-15,-1.145656963602E-15)); +#2922 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2923 = ADVANCED_FACE('',(#2924),#2951,.T.); +#2924 = FACE_BOUND('',#2925,.T.); +#2925 = EDGE_LOOP('',(#2926,#2935,#2936,#2937,#2945)); +#2926 = ORIENTED_EDGE('',*,*,#2927,.F.); +#2927 = EDGE_CURVE('',#2899,#2928,#2930,.T.); +#2928 = VERTEX_POINT('',#2929); +#2929 = CARTESIAN_POINT('',(20.,111.5217101801,39.074548200537)); +#2930 = CIRCLE('',#2931,17.3); +#2931 = AXIS2_PLACEMENT_3D('',#2932,#2933,#2934); +#2932 = CARTESIAN_POINT('',(20.,106.17571617741,55.527825932443)); +#2933 = DIRECTION('',(-3.536578056839E-15,-0.951056516295, + -0.309016994375)); +#2934 = DIRECTION('',(-3.944304526105E-31,-0.309016994375,0.951056516295 + )); +#2935 = ORIENTED_EDGE('',*,*,#2913,.T.); +#2936 = ORIENTED_EDGE('',*,*,#1948,.T.); +#2937 = ORIENTED_EDGE('',*,*,#2938,.T.); +#2938 = EDGE_CURVE('',#1941,#2939,#2941,.T.); +#2939 = VERTEX_POINT('',#2940); +#2940 = CARTESIAN_POINT('',(27.193314992156,111.5217101801, + 39.074548200537)); +#2941 = LINE('',#2942,#2943); +#2942 = CARTESIAN_POINT('',(27.193314992156,105.92939662034, + 56.28591957813)); +#2943 = VECTOR('',#2944,1.); +#2944 = DIRECTION('',(-1.035379938103E-29,0.309016994375,-0.951056516295 + )); +#2945 = ORIENTED_EDGE('',*,*,#2946,.F.); +#2946 = EDGE_CURVE('',#2928,#2939,#2947,.T.); +#2947 = LINE('',#2948,#2949); +#2948 = CARTESIAN_POINT('',(75.,111.5217101801,39.074548200537)); +#2949 = VECTOR('',#2950,1.); +#2950 = DIRECTION('',(1.,-3.363485606343E-15,-1.092862721497E-15)); +#2951 = PLANE('',#2952); +#2952 = AXIS2_PLACEMENT_3D('',#2953,#2954,#2955); +#2953 = CARTESIAN_POINT('',(19.821657496078,105.92939662034, + 56.28591957813)); +#2954 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2955 = DIRECTION('',(-5.551115123126E-17,0.309016994375,-0.951056516295 + )); +#2956 = ADVANCED_FACE('',(#2957),#2975,.F.); +#2957 = FACE_BOUND('',#2958,.T.); +#2958 = EDGE_LOOP('',(#2959,#2960,#2968,#2974)); +#2959 = ORIENTED_EDGE('',*,*,#1940,.F.); +#2960 = ORIENTED_EDGE('',*,*,#2961,.T.); +#2961 = EDGE_CURVE('',#1931,#2962,#2964,.T.); +#2962 = VERTEX_POINT('',#2963); +#2963 = CARTESIAN_POINT('',(27.193314992156,116.65741536809, + 40.743239970162)); +#2964 = LINE('',#2965,#2966); +#2965 = CARTESIAN_POINT('',(27.193314992156,116.34839837372, + 41.694296486457)); +#2966 = VECTOR('',#2967,1.); +#2967 = DIRECTION('',(-1.035379938103E-29,0.309016994375,-0.951056516295 + )); +#2968 = ORIENTED_EDGE('',*,*,#2969,.F.); +#2969 = EDGE_CURVE('',#2939,#2962,#2970,.T.); +#2970 = LINE('',#2971,#2972); +#2971 = CARTESIAN_POINT('',(27.193314992156,43.195085767013, + 16.873882151616)); +#2972 = VECTOR('',#2973,1.); +#2973 = DIRECTION('',(2.911862994819E-15,0.951056516295,0.309016994375) + ); +#2974 = ORIENTED_EDGE('',*,*,#2938,.F.); +#2975 = PLANE('',#2976); +#2976 = AXIS2_PLACEMENT_3D('',#2977,#2978,#2979); +#2977 = CARTESIAN_POINT('',(27.193314992156,42.886068772638, + 17.824938667911)); +#2978 = DIRECTION('',(1.,-2.769346275781E-15,-8.998151506906E-16)); +#2979 = DIRECTION('',(2.769346275781E-15,1.,-6.547128122109E-34)); +#2980 = ADVANCED_FACE('',(#2981),#3001,.F.); +#2981 = FACE_BOUND('',#2982,.T.); +#2982 = EDGE_LOOP('',(#2983,#2992,#2998,#2999,#3000)); +#2983 = ORIENTED_EDGE('',*,*,#2984,.F.); +#2984 = EDGE_CURVE('',#2985,#2897,#2987,.T.); +#2985 = VERTEX_POINT('',#2986); +#2986 = CARTESIAN_POINT('',(20.,116.65741536809,40.743239970162)); +#2987 = CIRCLE('',#2988,17.3); +#2988 = AXIS2_PLACEMENT_3D('',#2989,#2990,#2991); +#2989 = CARTESIAN_POINT('',(20.,111.31142136541,57.196517702068)); +#2990 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#2991 = DIRECTION('',(-3.944304526105E-31,-0.309016994375,0.951056516295 + )); +#2992 = ORIENTED_EDGE('',*,*,#2993,.T.); +#2993 = EDGE_CURVE('',#2985,#2962,#2994,.T.); +#2994 = LINE('',#2995,#2996); +#2995 = CARTESIAN_POINT('',(6.25,116.65741536809,40.743239970162)); +#2996 = VECTOR('',#2997,1.); +#2997 = DIRECTION('',(1.,-3.363485606343E-15,-1.092862721497E-15)); +#2998 = ORIENTED_EDGE('',*,*,#2961,.F.); +#2999 = ORIENTED_EDGE('',*,*,#1930,.T.); +#3000 = ORIENTED_EDGE('',*,*,#2906,.T.); +#3001 = PLANE('',#3002); +#3002 = AXIS2_PLACEMENT_3D('',#3003,#3004,#3005); +#3003 = CARTESIAN_POINT('',(6.25,106.6050986343,71.681089692218)); +#3004 = DIRECTION('',(3.536578056839E-15,0.951056516295,0.309016994375) + ); +#3005 = DIRECTION('',(1.,-3.344339313565E-15,-1.151788951577E-15)); +#3006 = ADVANCED_FACE('',(#3007),#3034,.T.); +#3007 = FACE_BOUND('',#3008,.T.); +#3008 = EDGE_LOOP('',(#3009,#3019,#3026,#3027)); +#3009 = ORIENTED_EDGE('',*,*,#3010,.F.); +#3010 = EDGE_CURVE('',#3011,#3013,#3015,.T.); +#3011 = VERTEX_POINT('',#3012); +#3012 = CARTESIAN_POINT('',(130.,16.762131695811,8.285294744262)); +#3013 = VERTEX_POINT('',#3014); +#3014 = CARTESIAN_POINT('',(20.,16.762131695811,8.285294744262)); +#3015 = LINE('',#3016,#3017); +#3016 = CARTESIAN_POINT('',(75.,16.762131695811,8.285294744262)); +#3017 = VECTOR('',#3018,1.); +#3018 = DIRECTION('',(-1.,0.,0.)); +#3019 = ORIENTED_EDGE('',*,*,#3020,.F.); +#3020 = EDGE_CURVE('',#2007,#3011,#3021,.T.); +#3021 = CIRCLE('',#3022,17.3); +#3022 = AXIS2_PLACEMENT_3D('',#3023,#3024,#3025); +#3023 = CARTESIAN_POINT('',(130.,11.416137693124,24.738572476168)); +#3024 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3025 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3026 = ORIENTED_EDGE('',*,*,#2006,.F.); +#3027 = ORIENTED_EDGE('',*,*,#3028,.T.); +#3028 = EDGE_CURVE('',#1999,#3013,#3029,.T.); +#3029 = CIRCLE('',#3030,17.3); +#3030 = AXIS2_PLACEMENT_3D('',#3031,#3032,#3033); +#3031 = CARTESIAN_POINT('',(20.,11.416137693124,24.738572476168)); +#3032 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3033 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3034 = PLANE('',#3035); +#3035 = AXIS2_PLACEMENT_3D('',#3036,#3037,#3038); +#3036 = CARTESIAN_POINT('',(130.,14.969833128436,13.801422538774)); +#3037 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3038 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3039 = ADVANCED_FACE('',(#3040),#3069,.T.); +#3040 = FACE_BOUND('',#3041,.T.); +#3041 = EDGE_LOOP('',(#3042,#3043,#3044,#3045,#3051,#3052,#3053,#3054, + #3060,#3061,#3062,#3063)); +#3042 = ORIENTED_EDGE('',*,*,#2045,.F.); +#3043 = ORIENTED_EDGE('',*,*,#2014,.F.); +#3044 = ORIENTED_EDGE('',*,*,#3020,.T.); +#3045 = ORIENTED_EDGE('',*,*,#3046,.F.); +#3046 = EDGE_CURVE('',#2452,#3011,#3047,.T.); +#3047 = LINE('',#3048,#3049); +#3048 = CARTESIAN_POINT('',(130.,70.494892837324,25.744127172118)); +#3049 = VECTOR('',#3050,1.); +#3050 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3051 = ORIENTED_EDGE('',*,*,#2451,.F.); +#3052 = ORIENTED_EDGE('',*,*,#2370,.F.); +#3053 = ORIENTED_EDGE('',*,*,#2403,.F.); +#3054 = ORIENTED_EDGE('',*,*,#3055,.F.); +#3055 = EDGE_CURVE('',#2565,#2394,#3056,.T.); +#3056 = LINE('',#3057,#3058); +#3057 = CARTESIAN_POINT('',(130.,70.494892837324,25.744127172118)); +#3058 = VECTOR('',#3059,1.); +#3059 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3060 = ORIENTED_EDGE('',*,*,#2564,.T.); +#3061 = ORIENTED_EDGE('',*,*,#2476,.T.); +#3062 = ORIENTED_EDGE('',*,*,#2507,.T.); +#3063 = ORIENTED_EDGE('',*,*,#3064,.F.); +#3064 = EDGE_CURVE('',#2046,#2508,#3065,.T.); +#3065 = LINE('',#3066,#3067); +#3066 = CARTESIAN_POINT('',(130.,70.494892837324,25.744127172118)); +#3067 = VECTOR('',#3068,1.); +#3068 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3069 = CYLINDRICAL_SURFACE('',#3070,17.3); +#3070 = AXIS2_PLACEMENT_3D('',#3071,#3072,#3073); +#3071 = CARTESIAN_POINT('',(130.,65.148898834638,42.197404904024)); +#3072 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3073 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3074 = ADVANCED_FACE('',(#3075),#3113,.T.); +#3075 = FACE_BOUND('',#3076,.T.); +#3076 = EDGE_LOOP('',(#3077,#3078,#3084,#3085,#3086,#3087,#3093,#3094, + #3095,#3096,#3102,#3103,#3104,#3105,#3111,#3112)); +#3077 = ORIENTED_EDGE('',*,*,#2062,.F.); +#3078 = ORIENTED_EDGE('',*,*,#3079,.F.); +#3079 = EDGE_CURVE('',#2985,#2055,#3080,.T.); +#3080 = LINE('',#3081,#3082); +#3081 = CARTESIAN_POINT('',(20.,70.494892837324,25.744127172118)); +#3082 = VECTOR('',#3083,1.); +#3083 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3084 = ORIENTED_EDGE('',*,*,#2984,.T.); +#3085 = ORIENTED_EDGE('',*,*,#2896,.T.); +#3086 = ORIENTED_EDGE('',*,*,#2927,.T.); +#3087 = ORIENTED_EDGE('',*,*,#3088,.F.); +#3088 = EDGE_CURVE('',#2775,#2928,#3089,.T.); +#3089 = LINE('',#3090,#3091); +#3090 = CARTESIAN_POINT('',(20.,70.494892837324,25.744127172118)); +#3091 = VECTOR('',#3092,1.); +#3092 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3093 = ORIENTED_EDGE('',*,*,#2774,.T.); +#3094 = ORIENTED_EDGE('',*,*,#2686,.T.); +#3095 = ORIENTED_EDGE('',*,*,#2717,.T.); +#3096 = ORIENTED_EDGE('',*,*,#3097,.F.); +#3097 = EDGE_CURVE('',#1544,#2718,#3098,.T.); +#3098 = LINE('',#3099,#3100); +#3099 = CARTESIAN_POINT('',(20.,70.494892837324,25.744127172118)); +#3100 = VECTOR('',#3101,1.); +#3101 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3102 = ORIENTED_EDGE('',*,*,#1543,.T.); +#3103 = ORIENTED_EDGE('',*,*,#2297,.F.); +#3104 = ORIENTED_EDGE('',*,*,#2329,.T.); +#3105 = ORIENTED_EDGE('',*,*,#3106,.F.); +#3106 = EDGE_CURVE('',#3013,#2322,#3107,.T.); +#3107 = LINE('',#3108,#3109); +#3108 = CARTESIAN_POINT('',(20.,70.494892837324,25.744127172118)); +#3109 = VECTOR('',#3110,1.); +#3110 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3111 = ORIENTED_EDGE('',*,*,#3028,.F.); +#3112 = ORIENTED_EDGE('',*,*,#1998,.T.); +#3113 = CYLINDRICAL_SURFACE('',#3114,17.3); +#3114 = AXIS2_PLACEMENT_3D('',#3115,#3116,#3117); +#3115 = CARTESIAN_POINT('',(20.,61.657797401562,41.063077286871)); +#3116 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3117 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3118 = ADVANCED_FACE('',(#3119,#3145),#3151,.T.); +#3119 = FACE_BOUND('',#3120,.T.); +#3120 = EDGE_LOOP('',(#3121,#3122,#3123,#3124,#3125,#3126,#3127,#3128, + #3129,#3130,#3131,#3132,#3133,#3134,#3135,#3136,#3137,#3138,#3139, + #3140,#3141,#3142,#3143,#3144)); +#3121 = ORIENTED_EDGE('',*,*,#2054,.F.); +#3122 = ORIENTED_EDGE('',*,*,#3064,.T.); +#3123 = ORIENTED_EDGE('',*,*,#2526,.F.); +#3124 = ORIENTED_EDGE('',*,*,#2549,.T.); +#3125 = ORIENTED_EDGE('',*,*,#2573,.T.); +#3126 = ORIENTED_EDGE('',*,*,#3055,.T.); +#3127 = ORIENTED_EDGE('',*,*,#2393,.T.); +#3128 = ORIENTED_EDGE('',*,*,#2435,.T.); +#3129 = ORIENTED_EDGE('',*,*,#2460,.F.); +#3130 = ORIENTED_EDGE('',*,*,#3046,.T.); +#3131 = ORIENTED_EDGE('',*,*,#3010,.T.); +#3132 = ORIENTED_EDGE('',*,*,#3106,.T.); +#3133 = ORIENTED_EDGE('',*,*,#2321,.T.); +#3134 = ORIENTED_EDGE('',*,*,#2345,.F.); +#3135 = ORIENTED_EDGE('',*,*,#1552,.T.); +#3136 = ORIENTED_EDGE('',*,*,#3097,.T.); +#3137 = ORIENTED_EDGE('',*,*,#2736,.F.); +#3138 = ORIENTED_EDGE('',*,*,#2759,.T.); +#3139 = ORIENTED_EDGE('',*,*,#2783,.T.); +#3140 = ORIENTED_EDGE('',*,*,#3088,.T.); +#3141 = ORIENTED_EDGE('',*,*,#2946,.T.); +#3142 = ORIENTED_EDGE('',*,*,#2969,.T.); +#3143 = ORIENTED_EDGE('',*,*,#2993,.F.); +#3144 = ORIENTED_EDGE('',*,*,#3079,.T.); +#3145 = FACE_BOUND('',#3146,.T.); +#3146 = EDGE_LOOP('',(#3147,#3148,#3149,#3150)); +#3147 = ORIENTED_EDGE('',*,*,#1471,.T.); +#3148 = ORIENTED_EDGE('',*,*,#2156,.T.); +#3149 = ORIENTED_EDGE('',*,*,#2188,.F.); +#3150 = ORIENTED_EDGE('',*,*,#2205,.F.); +#3151 = PLANE('',#3152); +#3152 = AXIS2_PLACEMENT_3D('',#3153,#3154,#3155); +#3153 = CARTESIAN_POINT('',(75.,70.494892837324,25.744127172118)); +#3154 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3155 = DIRECTION('',(-1.,0.,0.)); +#3156 = ADVANCED_FACE('',(#3157),#3163,.F.); +#3157 = FACE_BOUND('',#3158,.T.); +#3158 = EDGE_LOOP('',(#3159,#3160,#3161,#3162)); +#3159 = ORIENTED_EDGE('',*,*,#2808,.F.); +#3160 = ORIENTED_EDGE('',*,*,#2839,.F.); +#3161 = ORIENTED_EDGE('',*,*,#2863,.F.); +#3162 = ORIENTED_EDGE('',*,*,#2880,.F.); +#3163 = PLANE('',#3164); +#3164 = AXIS2_PLACEMENT_3D('',#3165,#3166,#3167); +#3165 = CARTESIAN_POINT('',(75.,126.13856343674,59.595785084139)); +#3166 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3167 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3168 = ADVANCED_FACE('',(#3169),#3175,.F.); +#3169 = FACE_BOUND('',#3170,.T.); +#3170 = EDGE_LOOP('',(#3171,#3172,#3173,#3174)); +#3171 = ORIENTED_EDGE('',*,*,#2254,.F.); +#3172 = ORIENTED_EDGE('',*,*,#2272,.F.); +#3173 = ORIENTED_EDGE('',*,*,#1607,.F.); +#3174 = ORIENTED_EDGE('',*,*,#2229,.F.); +#3175 = PLANE('',#3176); +#3176 = AXIS2_PLACEMENT_3D('',#3177,#3178,#3179); +#3177 = CARTESIAN_POINT('',(75.,50.935089245347,39.997421325707)); +#3178 = DIRECTION('',(0.,-0.45399049974,-0.891006524188)); +#3179 = DIRECTION('',(1.,0.,0.)); +#3180 = ADVANCED_FACE('',(#3181),#3187,.F.); +#3181 = FACE_BOUND('',#3182,.T.); +#3182 = EDGE_LOOP('',(#3183,#3184,#3185,#3186)); +#3183 = ORIENTED_EDGE('',*,*,#2670,.F.); +#3184 = ORIENTED_EDGE('',*,*,#2598,.F.); +#3185 = ORIENTED_EDGE('',*,*,#2629,.F.); +#3186 = ORIENTED_EDGE('',*,*,#2653,.T.); +#3187 = PLANE('',#3188); +#3188 = AXIS2_PLACEMENT_3D('',#3189,#3190,#3191); +#3189 = CARTESIAN_POINT('',(75.,126.13856343674,59.595785084139)); +#3190 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3191 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3192 = ADVANCED_FACE('',(#3193),#3282,.F.); +#3193 = FACE_BOUND('',#3194,.T.); +#3194 = EDGE_LOOP('',(#3195,#3203,#3211,#3219,#3227,#3235,#3243,#3251, + #3259,#3267,#3275,#3281)); +#3195 = ORIENTED_EDGE('',*,*,#3196,.F.); +#3196 = EDGE_CURVE('',#3197,#1965,#3199,.T.); +#3197 = VERTEX_POINT('',#3198); +#3198 = CARTESIAN_POINT('',(120.66552506059,115.42510128869, + 45.389855530161)); +#3199 = LINE('',#3200,#3201); +#3200 = CARTESIAN_POINT('',(120.66552506059,115.11608429431, + 46.340912046456)); +#3201 = VECTOR('',#3202,1.); +#3202 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3203 = ORIENTED_EDGE('',*,*,#3204,.T.); +#3204 = EDGE_CURVE('',#3197,#3205,#3207,.T.); +#3205 = VERTEX_POINT('',#3206); +#3206 = CARTESIAN_POINT('',(115.88654716039,115.42510128869, + 45.389855530161)); +#3207 = LINE('',#3208,#3209); +#3208 = CARTESIAN_POINT('',(130.,115.42510128869,45.389855530161)); +#3209 = VECTOR('',#3210,1.); +#3210 = DIRECTION('',(-1.,0.,0.)); +#3211 = ORIENTED_EDGE('',*,*,#3212,.T.); +#3212 = EDGE_CURVE('',#3205,#3213,#3215,.T.); +#3213 = VERTEX_POINT('',#3214); +#3214 = CARTESIAN_POINT('',(115.88654716039,116.7538743645, + 41.300312510092)); +#3215 = LINE('',#3216,#3217); +#3216 = CARTESIAN_POINT('',(115.88654716039,116.13584037575, + 43.202425542682)); +#3217 = VECTOR('',#3218,1.); +#3218 = DIRECTION('',(-1.387778780781E-17,0.309016994375,-0.951056516295 + )); +#3219 = ORIENTED_EDGE('',*,*,#3220,.F.); +#3220 = EDGE_CURVE('',#3221,#3213,#3223,.T.); +#3221 = VERTEX_POINT('',#3222); +#3222 = CARTESIAN_POINT('',(85.113452839607,116.7538743645, + 41.300312510092)); +#3223 = LINE('',#3224,#3225); +#3224 = CARTESIAN_POINT('',(88.,116.7538743645,41.300312510092)); +#3225 = VECTOR('',#3226,1.); +#3226 = DIRECTION('',(1.,0.,0.)); +#3227 = ORIENTED_EDGE('',*,*,#3228,.T.); +#3228 = EDGE_CURVE('',#3221,#3229,#3231,.T.); +#3229 = VERTEX_POINT('',#3230); +#3230 = CARTESIAN_POINT('',(85.113452839607,115.42510128869, + 45.389855530161)); +#3231 = LINE('',#3232,#3233); +#3232 = CARTESIAN_POINT('',(85.113452839607,116.13584037575, + 43.202425542682)); +#3233 = VECTOR('',#3234,1.); +#3234 = DIRECTION('',(-1.387778780781E-17,-0.309016994375,0.951056516295 + )); +#3235 = ORIENTED_EDGE('',*,*,#3236,.T.); +#3236 = EDGE_CURVE('',#3229,#3237,#3239,.T.); +#3237 = VERTEX_POINT('',#3238); +#3238 = CARTESIAN_POINT('',(64.886547160393,115.42510128869, + 45.389855530161)); +#3239 = LINE('',#3240,#3241); +#3240 = CARTESIAN_POINT('',(130.,115.42510128869,45.389855530161)); +#3241 = VECTOR('',#3242,1.); +#3242 = DIRECTION('',(-1.,0.,0.)); +#3243 = ORIENTED_EDGE('',*,*,#3244,.T.); +#3244 = EDGE_CURVE('',#3237,#3245,#3247,.T.); +#3245 = VERTEX_POINT('',#3246); +#3246 = CARTESIAN_POINT('',(64.886547160393,116.7538743645, + 41.300312510092)); +#3247 = LINE('',#3248,#3249); +#3248 = CARTESIAN_POINT('',(64.886547160393,116.13584037575, + 43.202425542682)); +#3249 = VECTOR('',#3250,1.); +#3250 = DIRECTION('',(-1.387778780781E-17,0.309016994375,-0.951056516295 + )); +#3251 = ORIENTED_EDGE('',*,*,#3252,.F.); +#3252 = EDGE_CURVE('',#3253,#3245,#3255,.T.); +#3253 = VERTEX_POINT('',#3254); +#3254 = CARTESIAN_POINT('',(34.113452839607,116.7538743645, + 41.300312510092)); +#3255 = LINE('',#3256,#3257); +#3256 = CARTESIAN_POINT('',(62.,116.7538743645,41.300312510092)); +#3257 = VECTOR('',#3258,1.); +#3258 = DIRECTION('',(1.,0.,0.)); +#3259 = ORIENTED_EDGE('',*,*,#3260,.T.); +#3260 = EDGE_CURVE('',#3253,#3261,#3263,.T.); +#3261 = VERTEX_POINT('',#3262); +#3262 = CARTESIAN_POINT('',(34.113452839607,115.42510128869, + 45.389855530161)); +#3263 = LINE('',#3264,#3265); +#3264 = CARTESIAN_POINT('',(34.113452839607,116.13584037575, + 43.202425542682)); +#3265 = VECTOR('',#3266,1.); +#3266 = DIRECTION('',(-1.387778780781E-17,-0.309016994375,0.951056516295 + )); +#3267 = ORIENTED_EDGE('',*,*,#3268,.T.); +#3268 = EDGE_CURVE('',#3261,#3269,#3271,.T.); +#3269 = VERTEX_POINT('',#3270); +#3270 = CARTESIAN_POINT('',(29.334474939404,115.42510128869, + 45.389855530161)); +#3271 = LINE('',#3272,#3273); +#3272 = CARTESIAN_POINT('',(130.,115.42510128869,45.389855530161)); +#3273 = VECTOR('',#3274,1.); +#3274 = DIRECTION('',(-1.,0.,0.)); +#3275 = ORIENTED_EDGE('',*,*,#3276,.T.); +#3276 = EDGE_CURVE('',#3269,#1975,#3277,.T.); +#3277 = LINE('',#3278,#3279); +#3278 = CARTESIAN_POINT('',(29.334474939404,115.36329788981, + 45.58006683342)); +#3279 = VECTOR('',#3280,1.); +#3280 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3281 = ORIENTED_EDGE('',*,*,#1974,.F.); +#3282 = PLANE('',#3283); +#3283 = AXIS2_PLACEMENT_3D('',#3284,#3285,#3286); +#3284 = CARTESIAN_POINT('',(130.,115.11608429431,46.340912046456)); +#3285 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3286 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3287 = ADVANCED_FACE('',(#3288),#3299,.T.); +#3288 = FACE_BOUND('',#3289,.T.); +#3289 = EDGE_LOOP('',(#3290,#3291,#3292,#3298)); +#3290 = ORIENTED_EDGE('',*,*,#1964,.T.); +#3291 = ORIENTED_EDGE('',*,*,#2036,.T.); +#3292 = ORIENTED_EDGE('',*,*,#3293,.F.); +#3293 = EDGE_CURVE('',#3197,#2037,#3294,.T.); +#3294 = LINE('',#3295,#3296); +#3295 = CARTESIAN_POINT('',(120.66552506059,69.011611264324, + 30.309198450335)); +#3296 = VECTOR('',#3297,1.); +#3297 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#3298 = ORIENTED_EDGE('',*,*,#3196,.T.); +#3299 = PLANE('',#3300); +#3300 = AXIS2_PLACEMENT_3D('',#3301,#3302,#3303); +#3301 = CARTESIAN_POINT('',(120.66552506059,68.949807865449, + 30.499409753594)); +#3302 = DIRECTION('',(-1.,0.,0.)); +#3303 = DIRECTION('',(0.,0.,1.)); +#3304 = ADVANCED_FACE('',(#3305),#3316,.T.); +#3305 = FACE_BOUND('',#3306,.T.); +#3306 = EDGE_LOOP('',(#3307,#3308,#3309,#3315)); +#3307 = ORIENTED_EDGE('',*,*,#1982,.T.); +#3308 = ORIENTED_EDGE('',*,*,#3276,.F.); +#3309 = ORIENTED_EDGE('',*,*,#3310,.F.); +#3310 = EDGE_CURVE('',#2071,#3269,#3311,.T.); +#3311 = LINE('',#3312,#3313); +#3312 = CARTESIAN_POINT('',(29.334474939404,65.520509831248, + 29.174870833181)); +#3313 = VECTOR('',#3314,1.); +#3314 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3315 = ORIENTED_EDGE('',*,*,#2070,.F.); +#3316 = PLANE('',#3317); +#3317 = AXIS2_PLACEMENT_3D('',#3318,#3319,#3320); +#3318 = CARTESIAN_POINT('',(29.334474939404,65.458706432373, + 29.36508213644)); +#3319 = DIRECTION('',(1.,0.,0.)); +#3320 = DIRECTION('',(0.,0.,-1.)); +#3321 = ADVANCED_FACE('',(#3322),#3338,.T.); +#3322 = FACE_BOUND('',#3323,.T.); +#3323 = EDGE_LOOP('',(#3324,#3325,#3331,#3332)); +#3324 = ORIENTED_EDGE('',*,*,#3236,.F.); +#3325 = ORIENTED_EDGE('',*,*,#3326,.T.); +#3326 = EDGE_CURVE('',#3229,#2111,#3327,.T.); +#3327 = LINE('',#3328,#3329); +#3328 = CARTESIAN_POINT('',(87.806814834742,124.98489675952, + 48.496021370591)); +#3329 = VECTOR('',#3330,1.); +#3330 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#3331 = ORIENTED_EDGE('',*,*,#2110,.T.); +#3332 = ORIENTED_EDGE('',*,*,#3333,.T.); +#3333 = EDGE_CURVE('',#2103,#3237,#3334,.T.); +#3334 = LINE('',#3335,#3336); +#3335 = CARTESIAN_POINT('',(62.193185165258,124.98489675952, + 48.496021370591)); +#3336 = VECTOR('',#3337,1.); +#3337 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#3338 = PLANE('',#3339); +#3339 = AXIS2_PLACEMENT_3D('',#3340,#3341,#3342); +#3340 = CARTESIAN_POINT('',(75.,125.17814554892,48.558811708543)); +#3341 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3342 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3343 = ADVANCED_FACE('',(#3344),#3355,.T.); +#3344 = FACE_BOUND('',#3345,.T.); +#3345 = EDGE_LOOP('',(#3346,#3347,#3348,#3349)); +#3346 = ORIENTED_EDGE('',*,*,#3204,.F.); +#3347 = ORIENTED_EDGE('',*,*,#3293,.T.); +#3348 = ORIENTED_EDGE('',*,*,#2142,.T.); +#3349 = ORIENTED_EDGE('',*,*,#3350,.T.); +#3350 = EDGE_CURVE('',#2135,#3205,#3351,.T.); +#3351 = LINE('',#3352,#3353); +#3352 = CARTESIAN_POINT('',(113.19318516525,124.98489675952, + 48.496021370591)); +#3353 = VECTOR('',#3354,1.); +#3354 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#3355 = PLANE('',#3356); +#3356 = AXIS2_PLACEMENT_3D('',#3357,#3358,#3359); +#3357 = CARTESIAN_POINT('',(75.,125.17814554892,48.558811708543)); +#3358 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3359 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3360 = ADVANCED_FACE('',(#3361),#3372,.T.); +#3361 = FACE_BOUND('',#3362,.T.); +#3362 = EDGE_LOOP('',(#3363,#3364,#3365,#3366)); +#3363 = ORIENTED_EDGE('',*,*,#2078,.T.); +#3364 = ORIENTED_EDGE('',*,*,#3310,.T.); +#3365 = ORIENTED_EDGE('',*,*,#3268,.F.); +#3366 = ORIENTED_EDGE('',*,*,#3367,.T.); +#3367 = EDGE_CURVE('',#3261,#2079,#3368,.T.); +#3368 = LINE('',#3369,#3370); +#3369 = CARTESIAN_POINT('',(36.806814834742,124.98489675952, + 48.496021370591)); +#3370 = VECTOR('',#3371,1.); +#3371 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#3372 = PLANE('',#3373); +#3373 = AXIS2_PLACEMENT_3D('',#3374,#3375,#3376); +#3374 = CARTESIAN_POINT('',(75.,125.17814554892,48.558811708543)); +#3375 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#3376 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#3377 = ADVANCED_FACE('',(#3378),#3394,.F.); +#3378 = FACE_BOUND('',#3379,.T.); +#3379 = EDGE_LOOP('',(#3380,#3381,#3387,#3388)); +#3380 = ORIENTED_EDGE('',*,*,#2126,.F.); +#3381 = ORIENTED_EDGE('',*,*,#3382,.T.); +#3382 = EDGE_CURVE('',#2119,#3221,#3383,.T.); +#3383 = LINE('',#3384,#3385); +#3384 = CARTESIAN_POINT('',(87.806814834742,126.31366983533, + 44.406478350522)); +#3385 = VECTOR('',#3386,1.); +#3386 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#3387 = ORIENTED_EDGE('',*,*,#3220,.T.); +#3388 = ORIENTED_EDGE('',*,*,#3389,.T.); +#3389 = EDGE_CURVE('',#3213,#2127,#3390,.T.); +#3390 = LINE('',#3391,#3392); +#3391 = CARTESIAN_POINT('',(113.19318516525,126.31366983533, + 44.406478350522)); +#3392 = VECTOR('',#3393,1.); +#3393 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#3394 = PLANE('',#3395); +#3395 = AXIS2_PLACEMENT_3D('',#3396,#3397,#3398); +#3396 = CARTESIAN_POINT('',(88.,70.340384340137,26.219655430266)); +#3397 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3398 = DIRECTION('',(-1.,0.,0.)); +#3399 = ADVANCED_FACE('',(#3400),#3406,.F.); +#3400 = FACE_BOUND('',#3401,.T.); +#3401 = EDGE_LOOP('',(#3402,#3403,#3404,#3405)); +#3402 = ORIENTED_EDGE('',*,*,#3228,.F.); +#3403 = ORIENTED_EDGE('',*,*,#3382,.F.); +#3404 = ORIENTED_EDGE('',*,*,#2118,.F.); +#3405 = ORIENTED_EDGE('',*,*,#3326,.F.); +#3406 = PLANE('',#3407); +#3407 = AXIS2_PLACEMENT_3D('',#3408,#3409,#3410); +#3408 = CARTESIAN_POINT('',(87.806814834742,125.69563584658, + 46.308591383112)); +#3409 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340457E-02) + ); +#3410 = DIRECTION('',(-0.246942617606,-0.969030104594,6.938893903907E-17 + )); +#3411 = ADVANCED_FACE('',(#3412),#3418,.F.); +#3412 = FACE_BOUND('',#3413,.T.); +#3413 = EDGE_LOOP('',(#3414,#3415,#3416,#3417)); +#3414 = ORIENTED_EDGE('',*,*,#3212,.F.); +#3415 = ORIENTED_EDGE('',*,*,#3350,.F.); +#3416 = ORIENTED_EDGE('',*,*,#2134,.F.); +#3417 = ORIENTED_EDGE('',*,*,#3389,.F.); +#3418 = PLANE('',#3419); +#3419 = AXIS2_PLACEMENT_3D('',#3420,#3421,#3422); +#3420 = CARTESIAN_POINT('',(113.19318516525,125.69563584658, + 46.308591383112)); +#3421 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#3422 = DIRECTION('',(-0.246942617606,0.969030104594,-6.938893903907E-17 + )); +#3423 = ADVANCED_FACE('',(#3424),#3440,.F.); +#3424 = FACE_BOUND('',#3425,.T.); +#3425 = EDGE_LOOP('',(#3426,#3427,#3433,#3434)); +#3426 = ORIENTED_EDGE('',*,*,#2094,.F.); +#3427 = ORIENTED_EDGE('',*,*,#3428,.T.); +#3428 = EDGE_CURVE('',#2087,#3253,#3429,.T.); +#3429 = LINE('',#3430,#3431); +#3430 = CARTESIAN_POINT('',(36.806814834742,126.31366983533, + 44.406478350522)); +#3431 = VECTOR('',#3432,1.); +#3432 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#3433 = ORIENTED_EDGE('',*,*,#3252,.T.); +#3434 = ORIENTED_EDGE('',*,*,#3435,.T.); +#3435 = EDGE_CURVE('',#3245,#2095,#3436,.T.); +#3436 = LINE('',#3437,#3438); +#3437 = CARTESIAN_POINT('',(62.193185165258,126.31366983533, + 44.406478350522)); +#3438 = VECTOR('',#3439,1.); +#3439 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#3440 = PLANE('',#3441); +#3441 = AXIS2_PLACEMENT_3D('',#3442,#3443,#3444); +#3442 = CARTESIAN_POINT('',(62.,70.340384340137,26.219655430266)); +#3443 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#3444 = DIRECTION('',(1.,0.,0.)); +#3445 = ADVANCED_FACE('',(#3446),#3452,.F.); +#3446 = FACE_BOUND('',#3447,.T.); +#3447 = EDGE_LOOP('',(#3448,#3449,#3450,#3451)); +#3448 = ORIENTED_EDGE('',*,*,#3244,.F.); +#3449 = ORIENTED_EDGE('',*,*,#3333,.F.); +#3450 = ORIENTED_EDGE('',*,*,#2102,.F.); +#3451 = ORIENTED_EDGE('',*,*,#3435,.F.); +#3452 = PLANE('',#3453); +#3453 = AXIS2_PLACEMENT_3D('',#3454,#3455,#3456); +#3454 = CARTESIAN_POINT('',(62.193185165258,125.69563584658, + 46.308591383112)); +#3455 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#3456 = DIRECTION('',(0.246942617606,-0.969030104594,6.938893903907E-17) + ); +#3457 = ADVANCED_FACE('',(#3458),#3464,.F.); +#3458 = FACE_BOUND('',#3459,.T.); +#3459 = EDGE_LOOP('',(#3460,#3461,#3462,#3463)); +#3460 = ORIENTED_EDGE('',*,*,#3260,.F.); +#3461 = ORIENTED_EDGE('',*,*,#3428,.F.); +#3462 = ORIENTED_EDGE('',*,*,#2086,.F.); +#3463 = ORIENTED_EDGE('',*,*,#3367,.F.); +#3464 = PLANE('',#3465); +#3465 = AXIS2_PLACEMENT_3D('',#3466,#3467,#3468); +#3466 = CARTESIAN_POINT('',(36.806814834742,125.69563584658, + 46.308591383112)); +#3467 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340457E-02) + ); +#3468 = DIRECTION('',(0.246942617606,0.969030104594,-6.938893903907E-17) + ); +#3469 = ADVANCED_FACE('',(#3470),#3476,.T.); +#3470 = FACE_BOUND('',#3471,.T.); +#3471 = EDGE_LOOP('',(#3472,#3473,#3474,#3475)); +#3472 = ORIENTED_EDGE('',*,*,#1661,.T.); +#3473 = ORIENTED_EDGE('',*,*,#1622,.T.); +#3474 = ORIENTED_EDGE('',*,*,#1576,.F.); +#3475 = ORIENTED_EDGE('',*,*,#1676,.F.); +#3476 = PLANE('',#3477); +#3477 = AXIS2_PLACEMENT_3D('',#3478,#3479,#3480); +#3478 = CARTESIAN_POINT('',(24.773846118291,49.564802421002, + 25.252301897349)); +#3479 = DIRECTION('',(-0.969030104594,0.234856385625,7.630946547576E-02) + ); +#3480 = DIRECTION('',(-0.23554318675,-0.971863883049,-1.040834085586E-17 + )); +#3481 = ADVANCED_FACE('',(#3482),#3488,.F.); +#3482 = FACE_BOUND('',#3483,.T.); +#3483 = EDGE_LOOP('',(#3484,#3485,#3486,#3487)); +#3484 = ORIENTED_EDGE('',*,*,#1654,.F.); +#3485 = ORIENTED_EDGE('',*,*,#1752,.F.); +#3486 = ORIENTED_EDGE('',*,*,#1447,.T.); +#3487 = ORIENTED_EDGE('',*,*,#1590,.T.); +#3488 = PLANE('',#3489); +#3489 = AXIS2_PLACEMENT_3D('',#3490,#3491,#3492); +#3490 = CARTESIAN_POINT('',(100.2261538817,49.564802421002, + 25.252301897349)); +#3491 = DIRECTION('',(-0.969030104594,-0.234856385625, + -7.630946547576E-02)); +#3492 = DIRECTION('',(0.23554318675,-0.971863883049,-1.387778780781E-17) + ); +#3493 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#3497)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#3494,#3495,#3496)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#3494 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#3495 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#3496 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#3497 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#3494, + 'distance_accuracy_value','confusion accuracy'); +#3498 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#3499,#3501); +#3499 = ( REPRESENTATION_RELATIONSHIP('','',#1430,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#3500) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#3500 = ITEM_DEFINED_TRANSFORMATION('','',#11,#19); +#3501 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #3502); +#3502 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','chassis','',#5,#1425,$); +#3503 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#1427)); +#3504 = SHAPE_DEFINITION_REPRESENTATION(#3505,#3511); +#3505 = PRODUCT_DEFINITION_SHAPE('','',#3506); +#3506 = PRODUCT_DEFINITION('design','',#3507,#3510); +#3507 = PRODUCT_DEFINITION_FORMATION('','',#3508); +#3508 = PRODUCT('ferro_mount','ferro_mount','',(#3509)); +#3509 = PRODUCT_CONTEXT('',#2,'mechanical'); +#3510 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#3511 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#3512),#6095); +#3512 = MANIFOLD_SOLID_BREP('',#3513); +#3513 = CLOSED_SHELL('',(#3514,#3845,#3898,#3951,#4035,#4065,#4105,#4138 + ,#4197,#4230,#4267,#4298,#4330,#4408,#4454,#4500,#4540,#4557,#4576, + #4588,#4615,#4753,#4783,#4814,#4845,#4861,#4885,#4897,#4911,#4942, + #4973,#4997,#5009,#5025,#5039,#5202,#5212,#5298,#5461,#5471,#5557, + #5720,#5730,#5886,#5898,#5910,#5922,#5934,#5946,#5958,#5982,#5991, + #6015,#6024,#6048,#6057)); +#3514 = ADVANCED_FACE('',(#3515,#3535,#3651,#3662,#3682),#3840,.T.); +#3515 = FACE_BOUND('',#3516,.T.); +#3516 = EDGE_LOOP('',(#3517,#3528)); +#3517 = ORIENTED_EDGE('',*,*,#3518,.T.); +#3518 = EDGE_CURVE('',#3519,#3521,#3523,.T.); +#3519 = VERTEX_POINT('',#3520); +#3520 = CARTESIAN_POINT('',(41.996848565403,39.7,66.4125)); +#3521 = VERTEX_POINT('',#3522); +#3522 = CARTESIAN_POINT('',(43.993521558647,39.7,60.598168321365)); +#3523 = CIRCLE('',#3524,3.25); +#3524 = AXIS2_PLACEMENT_3D('',#3525,#3526,#3527); +#3525 = CARTESIAN_POINT('',(41.996848565403,39.7,63.1625)); +#3526 = DIRECTION('',(0.,-1.,0.)); +#3527 = DIRECTION('',(0.,0.,1.)); +#3528 = ORIENTED_EDGE('',*,*,#3529,.T.); +#3529 = EDGE_CURVE('',#3521,#3519,#3530,.T.); +#3530 = CIRCLE('',#3531,3.25); +#3531 = AXIS2_PLACEMENT_3D('',#3532,#3533,#3534); +#3532 = CARTESIAN_POINT('',(41.996848565403,39.7,63.1625)); +#3533 = DIRECTION('',(0.,-1.,0.)); +#3534 = DIRECTION('',(0.,0.,1.)); +#3535 = FACE_BOUND('',#3536,.T.); +#3536 = EDGE_LOOP('',(#3537,#3547,#3555,#3563,#3571,#3579,#3587,#3595, + #3603,#3611,#3619,#3628,#3636,#3645)); +#3537 = ORIENTED_EDGE('',*,*,#3538,.F.); +#3538 = EDGE_CURVE('',#3539,#3541,#3543,.T.); +#3539 = VERTEX_POINT('',#3540); +#3540 = CARTESIAN_POINT('',(102.97294734195,39.7,55.289435108205)); +#3541 = VERTEX_POINT('',#3542); +#3542 = CARTESIAN_POINT('',(109.75,39.7,55.289435108205)); +#3543 = LINE('',#3544,#3545); +#3544 = CARTESIAN_POINT('',(62.5,39.7,55.289435108205)); +#3545 = VECTOR('',#3546,1.); +#3546 = DIRECTION('',(1.,0.,0.)); +#3547 = ORIENTED_EDGE('',*,*,#3548,.F.); +#3548 = EDGE_CURVE('',#3549,#3539,#3551,.T.); +#3549 = VERTEX_POINT('',#3550); +#3550 = CARTESIAN_POINT('',(102.97294734195,39.7,22.152179513743)); +#3551 = LINE('',#3552,#3553); +#3552 = CARTESIAN_POINT('',(102.97294734195,39.7,72.03307646015)); +#3553 = VECTOR('',#3554,1.); +#3554 = DIRECTION('',(0.,0.,1.)); +#3555 = ORIENTED_EDGE('',*,*,#3556,.F.); +#3556 = EDGE_CURVE('',#3557,#3549,#3559,.T.); +#3557 = VERTEX_POINT('',#3558); +#3558 = CARTESIAN_POINT('',(103.75,39.7,22.152179513743)); +#3559 = LINE('',#3560,#3561); +#3560 = CARTESIAN_POINT('',(62.5,39.7,22.152179513743)); +#3561 = VECTOR('',#3562,1.); +#3562 = DIRECTION('',(-1.,0.,0.)); +#3563 = ORIENTED_EDGE('',*,*,#3564,.F.); +#3564 = EDGE_CURVE('',#3565,#3557,#3567,.T.); +#3565 = VERTEX_POINT('',#3566); +#3566 = CARTESIAN_POINT('',(103.75,39.7,22.047033291319)); +#3567 = LINE('',#3568,#3569); +#3568 = CARTESIAN_POINT('',(103.75,39.7,46.663351384726)); +#3569 = VECTOR('',#3570,1.); +#3570 = DIRECTION('',(0.,0.,1.)); +#3571 = ORIENTED_EDGE('',*,*,#3572,.T.); +#3572 = EDGE_CURVE('',#3565,#3573,#3575,.T.); +#3573 = VERTEX_POINT('',#3574); +#3574 = CARTESIAN_POINT('',(21.25,39.7,22.047033291319)); +#3575 = LINE('',#3576,#3577); +#3576 = CARTESIAN_POINT('',(62.5,39.7,22.047033291319)); +#3577 = VECTOR('',#3578,1.); +#3578 = DIRECTION('',(-1.,0.,0.)); +#3579 = ORIENTED_EDGE('',*,*,#3580,.F.); +#3580 = EDGE_CURVE('',#3581,#3573,#3583,.T.); +#3581 = VERTEX_POINT('',#3582); +#3582 = CARTESIAN_POINT('',(21.25,39.7,22.152179513743)); +#3583 = LINE('',#3584,#3585); +#3584 = CARTESIAN_POINT('',(21.25,39.7,46.663351384726)); +#3585 = VECTOR('',#3586,1.); +#3586 = DIRECTION('',(0.,0.,-1.)); +#3587 = ORIENTED_EDGE('',*,*,#3588,.F.); +#3588 = EDGE_CURVE('',#3589,#3581,#3591,.T.); +#3589 = VERTEX_POINT('',#3590); +#3590 = CARTESIAN_POINT('',(22.02705265805,39.7,22.152179513743)); +#3591 = LINE('',#3592,#3593); +#3592 = CARTESIAN_POINT('',(62.5,39.7,22.152179513743)); +#3593 = VECTOR('',#3594,1.); +#3594 = DIRECTION('',(-1.,0.,0.)); +#3595 = ORIENTED_EDGE('',*,*,#3596,.F.); +#3596 = EDGE_CURVE('',#3597,#3589,#3599,.T.); +#3597 = VERTEX_POINT('',#3598); +#3598 = CARTESIAN_POINT('',(22.02705265805,39.7,55.289435108205)); +#3599 = LINE('',#3600,#3601); +#3600 = CARTESIAN_POINT('',(22.02705265805,39.7,72.03307646015)); +#3601 = VECTOR('',#3602,1.); +#3602 = DIRECTION('',(0.,0.,-1.)); +#3603 = ORIENTED_EDGE('',*,*,#3604,.T.); +#3604 = EDGE_CURVE('',#3597,#3605,#3607,.T.); +#3605 = VERTEX_POINT('',#3606); +#3606 = CARTESIAN_POINT('',(15.25,39.7,55.289435108205)); +#3607 = LINE('',#3608,#3609); +#3608 = CARTESIAN_POINT('',(62.5,39.7,55.289435108205)); +#3609 = VECTOR('',#3610,1.); +#3610 = DIRECTION('',(-1.,0.,0.)); +#3611 = ORIENTED_EDGE('',*,*,#3612,.T.); +#3612 = EDGE_CURVE('',#3605,#3613,#3615,.T.); +#3613 = VERTEX_POINT('',#3614); +#3614 = CARTESIAN_POINT('',(15.25,39.7,75.)); +#3615 = LINE('',#3616,#3617); +#3616 = CARTESIAN_POINT('',(15.25,39.7,71.677383086122)); +#3617 = VECTOR('',#3618,1.); +#3618 = DIRECTION('',(0.,0.,1.)); +#3619 = ORIENTED_EDGE('',*,*,#3620,.T.); +#3620 = EDGE_CURVE('',#3613,#3621,#3623,.T.); +#3621 = VERTEX_POINT('',#3622); +#3622 = CARTESIAN_POINT('',(22.338872323117,39.7,99.89269619228)); +#3623 = CIRCLE('',#3624,47.25); +#3624 = AXIS2_PLACEMENT_3D('',#3625,#3626,#3627); +#3625 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3626 = DIRECTION('',(0.,1.,0.)); +#3627 = DIRECTION('',(0.,-0.,1.)); +#3628 = ORIENTED_EDGE('',*,*,#3629,.T.); +#3629 = EDGE_CURVE('',#3621,#3630,#3632,.T.); +#3630 = VERTEX_POINT('',#3631); +#3631 = CARTESIAN_POINT('',(37.60730380772,39.7,115.16112767688)); +#3632 = LINE('',#3633,#3634); +#3633 = CARTESIAN_POINT('',(29.973088065419,39.7,107.52691193458)); +#3634 = VECTOR('',#3635,1.); +#3635 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#3636 = ORIENTED_EDGE('',*,*,#3637,.T.); +#3637 = EDGE_CURVE('',#3630,#3638,#3640,.T.); +#3638 = VERTEX_POINT('',#3639); +#3639 = CARTESIAN_POINT('',(109.75,39.7,75.)); +#3640 = CIRCLE('',#3641,47.25); +#3641 = AXIS2_PLACEMENT_3D('',#3642,#3643,#3644); +#3642 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3643 = DIRECTION('',(0.,1.,0.)); +#3644 = DIRECTION('',(0.,-0.,1.)); +#3645 = ORIENTED_EDGE('',*,*,#3646,.T.); +#3646 = EDGE_CURVE('',#3638,#3541,#3647,.T.); +#3647 = LINE('',#3648,#3649); +#3648 = CARTESIAN_POINT('',(109.75,39.7,71.677383086122)); +#3649 = VECTOR('',#3650,1.); +#3650 = DIRECTION('',(0.,0.,-1.)); +#3651 = FACE_BOUND('',#3652,.T.); +#3652 = EDGE_LOOP('',(#3653)); +#3653 = ORIENTED_EDGE('',*,*,#3654,.T.); +#3654 = EDGE_CURVE('',#3655,#3655,#3657,.T.); +#3655 = VERTEX_POINT('',#3656); +#3656 = CARTESIAN_POINT('',(62.5,39.7,101.925)); +#3657 = CIRCLE('',#3658,3.25); +#3658 = AXIS2_PLACEMENT_3D('',#3659,#3660,#3661); +#3659 = CARTESIAN_POINT('',(62.5,39.7,98.675)); +#3660 = DIRECTION('',(0.,-1.,0.)); +#3661 = DIRECTION('',(0.,0.,1.)); +#3662 = FACE_BOUND('',#3663,.T.); +#3663 = EDGE_LOOP('',(#3664,#3675)); +#3664 = ORIENTED_EDGE('',*,*,#3665,.T.); +#3665 = EDGE_CURVE('',#3666,#3668,#3670,.T.); +#3666 = VERTEX_POINT('',#3667); +#3667 = CARTESIAN_POINT('',(83.003151434597,39.7,66.4125)); +#3668 = VERTEX_POINT('',#3669); +#3669 = CARTESIAN_POINT('',(81.006478441353,39.7,60.598168321365)); +#3670 = CIRCLE('',#3671,3.25); +#3671 = AXIS2_PLACEMENT_3D('',#3672,#3673,#3674); +#3672 = CARTESIAN_POINT('',(83.003151434597,39.7,63.1625)); +#3673 = DIRECTION('',(0.,-1.,0.)); +#3674 = DIRECTION('',(0.,0.,1.)); +#3675 = ORIENTED_EDGE('',*,*,#3676,.T.); +#3676 = EDGE_CURVE('',#3668,#3666,#3677,.T.); +#3677 = CIRCLE('',#3678,3.25); +#3678 = AXIS2_PLACEMENT_3D('',#3679,#3680,#3681); +#3679 = CARTESIAN_POINT('',(83.003151434597,39.7,63.1625)); +#3680 = DIRECTION('',(0.,-1.,0.)); +#3681 = DIRECTION('',(0.,0.,1.)); +#3682 = FACE_BOUND('',#3683,.T.); +#3683 = EDGE_LOOP('',(#3684,#3695,#3704,#3713,#3721,#3730,#3738,#3747, + #3756,#3765,#3773,#3782,#3790,#3799,#3808,#3817,#3825,#3834)); +#3684 = ORIENTED_EDGE('',*,*,#3685,.F.); +#3685 = EDGE_CURVE('',#3686,#3688,#3690,.T.); +#3686 = VERTEX_POINT('',#3687); +#3687 = CARTESIAN_POINT('',(86.064878377861,39.7,85.747395360579)); +#3688 = VERTEX_POINT('',#3689); +#3689 = CARTESIAN_POINT('',(87.921767387346,39.7,79.954164198296)); +#3690 = CIRCLE('',#3691,25.9); +#3691 = AXIS2_PLACEMENT_3D('',#3692,#3693,#3694); +#3692 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3693 = DIRECTION('',(0.,1.,0.)); +#3694 = DIRECTION('',(0.,-0.,1.)); +#3695 = ORIENTED_EDGE('',*,*,#3696,.T.); +#3696 = EDGE_CURVE('',#3686,#3697,#3699,.T.); +#3697 = VERTEX_POINT('',#3698); +#3698 = CARTESIAN_POINT('',(83.589956595707,39.7,90.034085632029)); +#3699 = CIRCLE('',#3700,3.25); +#3700 = AXIS2_PLACEMENT_3D('',#3701,#3702,#3703); +#3701 = CARTESIAN_POINT('',(83.003151434597,39.7,86.8375)); +#3702 = DIRECTION('',(0.,-1.,0.)); +#3703 = DIRECTION('',(0.,0.,1.)); +#3704 = ORIENTED_EDGE('',*,*,#3705,.F.); +#3705 = EDGE_CURVE('',#3706,#3697,#3708,.T.); +#3706 = VERTEX_POINT('',#3707); +#3707 = CARTESIAN_POINT('',(79.501315743916,39.7,94.538814267393)); +#3708 = CIRCLE('',#3709,25.9); +#3709 = AXIS2_PLACEMENT_3D('',#3710,#3711,#3712); +#3710 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3711 = DIRECTION('',(0.,1.,0.)); +#3712 = DIRECTION('',(0.,-0.,1.)); +#3713 = ORIENTED_EDGE('',*,*,#3714,.F.); +#3714 = EDGE_CURVE('',#3715,#3706,#3717,.T.); +#3715 = VERTEX_POINT('',#3716); +#3716 = CARTESIAN_POINT('',(75.75971343734,39.7,90.23876633982)); +#3717 = LINE('',#3718,#3719); +#3718 = CARTESIAN_POINT('',(79.501315743916,39.7,94.538814267393)); +#3719 = VECTOR('',#3720,1.); +#3720 = DIRECTION('',(0.656421457294,0.,0.754394373258)); +#3721 = ORIENTED_EDGE('',*,*,#3722,.T.); +#3722 = EDGE_CURVE('',#3715,#3723,#3725,.T.); +#3723 = VERTEX_POINT('',#3724); +#3724 = CARTESIAN_POINT('',(49.24028656266,39.7,90.23876633982)); +#3725 = CIRCLE('',#3726,20.2); +#3726 = AXIS2_PLACEMENT_3D('',#3727,#3728,#3729); +#3727 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3728 = DIRECTION('',(0.,-1.,0.)); +#3729 = DIRECTION('',(0.,0.,1.)); +#3730 = ORIENTED_EDGE('',*,*,#3731,.T.); +#3731 = EDGE_CURVE('',#3723,#3732,#3734,.T.); +#3732 = VERTEX_POINT('',#3733); +#3733 = CARTESIAN_POINT('',(45.498684256084,39.7,94.538814267393)); +#3734 = LINE('',#3735,#3736); +#3735 = CARTESIAN_POINT('',(45.498684256084,39.7,94.538814267393)); +#3736 = VECTOR('',#3737,1.); +#3737 = DIRECTION('',(-0.656421457294,0.,0.754394373258)); +#3738 = ORIENTED_EDGE('',*,*,#3739,.F.); +#3739 = EDGE_CURVE('',#3740,#3732,#3742,.T.); +#3740 = VERTEX_POINT('',#3741); +#3741 = CARTESIAN_POINT('',(41.410043404293,39.7,90.034085632029)); +#3742 = CIRCLE('',#3743,25.9); +#3743 = AXIS2_PLACEMENT_3D('',#3744,#3745,#3746); +#3744 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3745 = DIRECTION('',(0.,1.,0.)); +#3746 = DIRECTION('',(0.,-0.,1.)); +#3747 = ORIENTED_EDGE('',*,*,#3748,.T.); +#3748 = EDGE_CURVE('',#3740,#3749,#3751,.T.); +#3749 = VERTEX_POINT('',#3750); +#3750 = CARTESIAN_POINT('',(38.935121622139,39.7,85.747395360579)); +#3751 = CIRCLE('',#3752,3.25); +#3752 = AXIS2_PLACEMENT_3D('',#3753,#3754,#3755); +#3753 = CARTESIAN_POINT('',(41.996848565403,39.7,86.8375)); +#3754 = DIRECTION('',(0.,-1.,0.)); +#3755 = DIRECTION('',(0.,0.,1.)); +#3756 = ORIENTED_EDGE('',*,*,#3757,.F.); +#3757 = EDGE_CURVE('',#3758,#3749,#3760,.T.); +#3758 = VERTEX_POINT('',#3759); +#3759 = CARTESIAN_POINT('',(37.078232612654,39.7,79.954164198295)); +#3760 = CIRCLE('',#3761,25.9); +#3761 = AXIS2_PLACEMENT_3D('',#3762,#3763,#3764); +#3762 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3763 = DIRECTION('',(0.,1.,0.)); +#3764 = DIRECTION('',(0.,-0.,1.)); +#3765 = ORIENTED_EDGE('',*,*,#3766,.F.); +#3766 = EDGE_CURVE('',#3767,#3758,#3769,.T.); +#3767 = VERTEX_POINT('',#3768); +#3768 = CARTESIAN_POINT('',(42.672984508711,39.7,78.863865513728)); +#3769 = LINE('',#3770,#3771); +#3770 = CARTESIAN_POINT('',(37.078232612654,39.7,79.954164198295)); +#3771 = VECTOR('',#3772,1.); +#3772 = DIRECTION('',(-0.981535420361,0.,0.191280470977)); +#3773 = ORIENTED_EDGE('',*,*,#3774,.T.); +#3774 = EDGE_CURVE('',#3767,#3775,#3777,.T.); +#3775 = VERTEX_POINT('',#3776); +#3776 = CARTESIAN_POINT('',(55.932697946051,39.7,55.897368146452)); +#3777 = CIRCLE('',#3778,20.2); +#3778 = AXIS2_PLACEMENT_3D('',#3779,#3780,#3781); +#3779 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3780 = DIRECTION('',(0.,-1.,0.)); +#3781 = DIRECTION('',(0.,0.,1.)); +#3782 = ORIENTED_EDGE('',*,*,#3783,.T.); +#3783 = EDGE_CURVE('',#3775,#3784,#3786,.T.); +#3784 = VERTEX_POINT('',#3785); +#3785 = CARTESIAN_POINT('',(54.07954835657,39.7,50.507021534312)); +#3786 = LINE('',#3787,#3788); +#3787 = CARTESIAN_POINT('',(54.07954835657,39.7,50.507021534312)); +#3788 = VECTOR('',#3789,1.); +#3789 = DIRECTION('',(-0.325113963067,0.,-0.945674844235)); +#3790 = ORIENTED_EDGE('',*,*,#3791,.F.); +#3791 = EDGE_CURVE('',#3792,#3784,#3794,.T.); +#3792 = VERTEX_POINT('',#3793); +#3793 = CARTESIAN_POINT('',(60.025078217846,39.7,49.218519007392)); +#3794 = CIRCLE('',#3795,25.9); +#3795 = AXIS2_PLACEMENT_3D('',#3796,#3797,#3798); +#3796 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3797 = DIRECTION('',(0.,1.,0.)); +#3798 = DIRECTION('',(0.,-0.,1.)); +#3799 = ORIENTED_EDGE('',*,*,#3800,.T.); +#3800 = EDGE_CURVE('',#3792,#3801,#3803,.T.); +#3801 = VERTEX_POINT('',#3802); +#3802 = CARTESIAN_POINT('',(64.974921782154,39.7,49.218519007392)); +#3803 = CIRCLE('',#3804,3.25); +#3804 = AXIS2_PLACEMENT_3D('',#3805,#3806,#3807); +#3805 = CARTESIAN_POINT('',(62.5,39.7,51.325)); +#3806 = DIRECTION('',(0.,-1.,0.)); +#3807 = DIRECTION('',(0.,0.,1.)); +#3808 = ORIENTED_EDGE('',*,*,#3809,.F.); +#3809 = EDGE_CURVE('',#3810,#3801,#3812,.T.); +#3810 = VERTEX_POINT('',#3811); +#3811 = CARTESIAN_POINT('',(70.92045164343,39.7,50.507021534312)); +#3812 = CIRCLE('',#3813,25.9); +#3813 = AXIS2_PLACEMENT_3D('',#3814,#3815,#3816); +#3814 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3815 = DIRECTION('',(0.,1.,0.)); +#3816 = DIRECTION('',(0.,-0.,1.)); +#3817 = ORIENTED_EDGE('',*,*,#3818,.F.); +#3818 = EDGE_CURVE('',#3819,#3810,#3821,.T.); +#3819 = VERTEX_POINT('',#3820); +#3820 = CARTESIAN_POINT('',(69.067302053949,39.7,55.897368146452)); +#3821 = LINE('',#3822,#3823); +#3822 = CARTESIAN_POINT('',(70.92045164343,39.7,50.507021534312)); +#3823 = VECTOR('',#3824,1.); +#3824 = DIRECTION('',(0.325113963067,0.,-0.945674844235)); +#3825 = ORIENTED_EDGE('',*,*,#3826,.T.); +#3826 = EDGE_CURVE('',#3819,#3827,#3829,.T.); +#3827 = VERTEX_POINT('',#3828); +#3828 = CARTESIAN_POINT('',(82.327015491289,39.7,78.863865513729)); +#3829 = CIRCLE('',#3830,20.2); +#3830 = AXIS2_PLACEMENT_3D('',#3831,#3832,#3833); +#3831 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#3832 = DIRECTION('',(0.,-1.,0.)); +#3833 = DIRECTION('',(0.,0.,1.)); +#3834 = ORIENTED_EDGE('',*,*,#3835,.T.); +#3835 = EDGE_CURVE('',#3827,#3688,#3836,.T.); +#3836 = LINE('',#3837,#3838); +#3837 = CARTESIAN_POINT('',(87.921767387346,39.7,79.954164198296)); +#3838 = VECTOR('',#3839,1.); +#3839 = DIRECTION('',(0.981535420361,0.,0.191280470977)); +#3840 = PLANE('',#3841); +#3841 = AXIS2_PLACEMENT_3D('',#3842,#3843,#3844); +#3842 = CARTESIAN_POINT('',(62.5,39.7,71.677383086122)); +#3843 = DIRECTION('',(0.,1.,0.)); +#3844 = DIRECTION('',(0.,-0.,1.)); +#3845 = ADVANCED_FACE('',(#3846,#3857),#3893,.F.); +#3846 = FACE_BOUND('',#3847,.T.); +#3847 = EDGE_LOOP('',(#3848)); +#3848 = ORIENTED_EDGE('',*,*,#3849,.T.); +#3849 = EDGE_CURVE('',#3850,#3850,#3852,.T.); +#3850 = VERTEX_POINT('',#3851); +#3851 = CARTESIAN_POINT('',(82.461885557231,56.1,85.625)); +#3852 = CIRCLE('',#3853,0.9); +#3853 = AXIS2_PLACEMENT_3D('',#3854,#3855,#3856); +#3854 = CARTESIAN_POINT('',(82.461885557231,56.1,86.525)); +#3855 = DIRECTION('',(0.,-1.,0.)); +#3856 = DIRECTION('',(0.,0.,-1.)); +#3857 = FACE_BOUND('',#3858,.T.); +#3858 = EDGE_LOOP('',(#3859,#3870,#3878,#3887)); +#3859 = ORIENTED_EDGE('',*,*,#3860,.F.); +#3860 = EDGE_CURVE('',#3861,#3863,#3865,.T.); +#3861 = VERTEX_POINT('',#3862); +#3862 = CARTESIAN_POINT('',(75.75971343734,56.1,90.23876633982)); +#3863 = VERTEX_POINT('',#3864); +#3864 = CARTESIAN_POINT('',(82.327015491289,56.1,78.863865513729)); +#3865 = CIRCLE('',#3866,20.2); +#3866 = AXIS2_PLACEMENT_3D('',#3867,#3868,#3869); +#3867 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#3868 = DIRECTION('',(0.,1.,0.)); +#3869 = DIRECTION('',(0.,-0.,1.)); +#3870 = ORIENTED_EDGE('',*,*,#3871,.T.); +#3871 = EDGE_CURVE('',#3861,#3872,#3874,.T.); +#3872 = VERTEX_POINT('',#3873); +#3873 = CARTESIAN_POINT('',(79.501315743916,56.1,94.538814267393)); +#3874 = LINE('',#3875,#3876); +#3875 = CARTESIAN_POINT('',(79.501315743916,56.1,94.538814267393)); +#3876 = VECTOR('',#3877,1.); +#3877 = DIRECTION('',(0.656421457294,0.,0.754394373258)); +#3878 = ORIENTED_EDGE('',*,*,#3879,.T.); +#3879 = EDGE_CURVE('',#3872,#3880,#3882,.T.); +#3880 = VERTEX_POINT('',#3881); +#3881 = CARTESIAN_POINT('',(87.921767387346,56.1,79.954164198296)); +#3882 = CIRCLE('',#3883,25.9); +#3883 = AXIS2_PLACEMENT_3D('',#3884,#3885,#3886); +#3884 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#3885 = DIRECTION('',(0.,1.,0.)); +#3886 = DIRECTION('',(0.,0.,-1.)); +#3887 = ORIENTED_EDGE('',*,*,#3888,.F.); +#3888 = EDGE_CURVE('',#3863,#3880,#3889,.T.); +#3889 = LINE('',#3890,#3891); +#3890 = CARTESIAN_POINT('',(87.921767387346,56.1,79.954164198296)); +#3891 = VECTOR('',#3892,1.); +#3892 = DIRECTION('',(0.981535420361,0.,0.191280470977)); +#3893 = PLANE('',#3894); +#3894 = AXIS2_PLACEMENT_3D('',#3895,#3896,#3897); +#3895 = CARTESIAN_POINT('',(62.5,56.1,77.85)); +#3896 = DIRECTION('',(0.,-1.,0.)); +#3897 = DIRECTION('',(0.,0.,-1.)); +#3898 = ADVANCED_FACE('',(#3899,#3910),#3946,.F.); +#3899 = FACE_BOUND('',#3900,.T.); +#3900 = EDGE_LOOP('',(#3901)); +#3901 = ORIENTED_EDGE('',*,*,#3902,.T.); +#3902 = EDGE_CURVE('',#3903,#3903,#3905,.T.); +#3903 = VERTEX_POINT('',#3904); +#3904 = CARTESIAN_POINT('',(62.5,56.1,51.05)); +#3905 = CIRCLE('',#3906,0.9); +#3906 = AXIS2_PLACEMENT_3D('',#3907,#3908,#3909); +#3907 = CARTESIAN_POINT('',(62.5,56.1,51.95)); +#3908 = DIRECTION('',(0.,-1.,0.)); +#3909 = DIRECTION('',(0.,0.,-1.)); +#3910 = FACE_BOUND('',#3911,.T.); +#3911 = EDGE_LOOP('',(#3912,#3922,#3931,#3939)); +#3912 = ORIENTED_EDGE('',*,*,#3913,.F.); +#3913 = EDGE_CURVE('',#3914,#3916,#3918,.T.); +#3914 = VERTEX_POINT('',#3915); +#3915 = CARTESIAN_POINT('',(55.932697946051,56.1,55.897368146452)); +#3916 = VERTEX_POINT('',#3917); +#3917 = CARTESIAN_POINT('',(54.07954835657,56.1,50.507021534312)); +#3918 = LINE('',#3919,#3920); +#3919 = CARTESIAN_POINT('',(54.07954835657,56.1,50.507021534312)); +#3920 = VECTOR('',#3921,1.); +#3921 = DIRECTION('',(-0.325113963067,0.,-0.945674844235)); +#3922 = ORIENTED_EDGE('',*,*,#3923,.F.); +#3923 = EDGE_CURVE('',#3924,#3914,#3926,.T.); +#3924 = VERTEX_POINT('',#3925); +#3925 = CARTESIAN_POINT('',(69.067302053949,56.1,55.897368146452)); +#3926 = CIRCLE('',#3927,20.2); +#3927 = AXIS2_PLACEMENT_3D('',#3928,#3929,#3930); +#3928 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#3929 = DIRECTION('',(0.,1.,0.)); +#3930 = DIRECTION('',(0.,0.,-1.)); +#3931 = ORIENTED_EDGE('',*,*,#3932,.T.); +#3932 = EDGE_CURVE('',#3924,#3933,#3935,.T.); +#3933 = VERTEX_POINT('',#3934); +#3934 = CARTESIAN_POINT('',(70.92045164343,56.1,50.507021534312)); +#3935 = LINE('',#3936,#3937); +#3936 = CARTESIAN_POINT('',(70.92045164343,56.1,50.507021534312)); +#3937 = VECTOR('',#3938,1.); +#3938 = DIRECTION('',(0.325113963067,0.,-0.945674844235)); +#3939 = ORIENTED_EDGE('',*,*,#3940,.T.); +#3940 = EDGE_CURVE('',#3933,#3916,#3941,.T.); +#3941 = CIRCLE('',#3942,25.9); +#3942 = AXIS2_PLACEMENT_3D('',#3943,#3944,#3945); +#3943 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#3944 = DIRECTION('',(0.,1.,0.)); +#3945 = DIRECTION('',(0.,0.,-1.)); +#3946 = PLANE('',#3947); +#3947 = AXIS2_PLACEMENT_3D('',#3948,#3949,#3950); +#3948 = CARTESIAN_POINT('',(62.5,56.1,77.85)); +#3949 = DIRECTION('',(0.,-1.,0.)); +#3950 = DIRECTION('',(0.,0.,-1.)); +#3951 = ADVANCED_FACE('',(#3952),#4030,.F.); +#3952 = FACE_BOUND('',#3953,.F.); +#3953 = EDGE_LOOP('',(#3954,#3965,#3970,#3976,#3977,#3983,#3984,#3992, + #4001,#4007,#4008,#4014,#4015,#4021,#4022,#4023)); +#3954 = ORIENTED_EDGE('',*,*,#3955,.T.); +#3955 = EDGE_CURVE('',#3956,#3958,#3960,.T.); +#3956 = VERTEX_POINT('',#3957); +#3957 = CARTESIAN_POINT('',(62.5,36.,54.8)); +#3958 = VERTEX_POINT('',#3959); +#3959 = CARTESIAN_POINT('',(82.327015491289,36.,78.863865513729)); +#3960 = CIRCLE('',#3961,20.2); +#3961 = AXIS2_PLACEMENT_3D('',#3962,#3963,#3964); +#3962 = CARTESIAN_POINT('',(62.5,36.,75.)); +#3963 = DIRECTION('',(0.,1.,0.)); +#3964 = DIRECTION('',(0.,0.,-1.)); +#3965 = ORIENTED_EDGE('',*,*,#3966,.F.); +#3966 = EDGE_CURVE('',#3827,#3958,#3967,.T.); +#3967 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#3968,#3969),.UNSPECIFIED.,.F., + .F.,(2,2),(17.15,20.85),.PIECEWISE_BEZIER_KNOTS.); +#3968 = CARTESIAN_POINT('',(82.327015491289,39.7,78.863865513729)); +#3969 = CARTESIAN_POINT('',(82.327015491289,36.,78.863865513729)); +#3970 = ORIENTED_EDGE('',*,*,#3971,.F.); +#3971 = EDGE_CURVE('',#3863,#3827,#3972,.T.); +#3972 = LINE('',#3973,#3974); +#3973 = CARTESIAN_POINT('',(82.327015491289,47.9,78.863865513729)); +#3974 = VECTOR('',#3975,1.); +#3975 = DIRECTION('',(0.,-1.,0.)); +#3976 = ORIENTED_EDGE('',*,*,#3860,.F.); +#3977 = ORIENTED_EDGE('',*,*,#3978,.T.); +#3978 = EDGE_CURVE('',#3861,#3715,#3979,.T.); +#3979 = LINE('',#3980,#3981); +#3980 = CARTESIAN_POINT('',(75.75971343734,47.9,90.23876633982)); +#3981 = VECTOR('',#3982,1.); +#3982 = DIRECTION('',(0.,-1.,0.)); +#3983 = ORIENTED_EDGE('',*,*,#3722,.T.); +#3984 = ORIENTED_EDGE('',*,*,#3985,.T.); +#3985 = EDGE_CURVE('',#3723,#3986,#3988,.T.); +#3986 = VERTEX_POINT('',#3987); +#3987 = CARTESIAN_POINT('',(49.24028656266,56.1,90.23876633982)); +#3988 = LINE('',#3989,#3990); +#3989 = CARTESIAN_POINT('',(49.24028656266,47.9,90.23876633982)); +#3990 = VECTOR('',#3991,1.); +#3991 = DIRECTION('',(0.,1.,0.)); +#3992 = ORIENTED_EDGE('',*,*,#3993,.F.); +#3993 = EDGE_CURVE('',#3994,#3986,#3996,.T.); +#3994 = VERTEX_POINT('',#3995); +#3995 = CARTESIAN_POINT('',(42.672984508711,56.1,78.863865513728)); +#3996 = CIRCLE('',#3997,20.2); +#3997 = AXIS2_PLACEMENT_3D('',#3998,#3999,#4000); +#3998 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#3999 = DIRECTION('',(0.,1.,0.)); +#4000 = DIRECTION('',(0.,0.,-1.)); +#4001 = ORIENTED_EDGE('',*,*,#4002,.T.); +#4002 = EDGE_CURVE('',#3994,#3767,#4003,.T.); +#4003 = LINE('',#4004,#4005); +#4004 = CARTESIAN_POINT('',(42.672984508711,47.9,78.863865513728)); +#4005 = VECTOR('',#4006,1.); +#4006 = DIRECTION('',(0.,-1.,0.)); +#4007 = ORIENTED_EDGE('',*,*,#3774,.T.); +#4008 = ORIENTED_EDGE('',*,*,#4009,.F.); +#4009 = EDGE_CURVE('',#3914,#3775,#4010,.T.); +#4010 = LINE('',#4011,#4012); +#4011 = CARTESIAN_POINT('',(55.932697946051,47.9,55.897368146452)); +#4012 = VECTOR('',#4013,1.); +#4013 = DIRECTION('',(0.,-1.,0.)); +#4014 = ORIENTED_EDGE('',*,*,#3923,.F.); +#4015 = ORIENTED_EDGE('',*,*,#4016,.T.); +#4016 = EDGE_CURVE('',#3924,#3819,#4017,.T.); +#4017 = LINE('',#4018,#4019); +#4018 = CARTESIAN_POINT('',(69.067302053949,47.9,55.897368146452)); +#4019 = VECTOR('',#4020,1.); +#4020 = DIRECTION('',(0.,-1.,0.)); +#4021 = ORIENTED_EDGE('',*,*,#3826,.T.); +#4022 = ORIENTED_EDGE('',*,*,#3966,.T.); +#4023 = ORIENTED_EDGE('',*,*,#4024,.T.); +#4024 = EDGE_CURVE('',#3958,#3956,#4025,.T.); +#4025 = CIRCLE('',#4026,20.2); +#4026 = AXIS2_PLACEMENT_3D('',#4027,#4028,#4029); +#4027 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4028 = DIRECTION('',(0.,1.,0.)); +#4029 = DIRECTION('',(0.,0.,-1.)); +#4030 = CYLINDRICAL_SURFACE('',#4031,20.2); +#4031 = AXIS2_PLACEMENT_3D('',#4032,#4033,#4034); +#4032 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#4033 = DIRECTION('',(0.,-1.,0.)); +#4034 = DIRECTION('',(1.,0.,0.)); +#4035 = ADVANCED_FACE('',(#4036),#4060,.T.); +#4036 = FACE_BOUND('',#4037,.T.); +#4037 = EDGE_LOOP('',(#4038,#4039,#4045,#4046,#4053,#4054)); +#4038 = ORIENTED_EDGE('',*,*,#3940,.F.); +#4039 = ORIENTED_EDGE('',*,*,#4040,.T.); +#4040 = EDGE_CURVE('',#3933,#3810,#4041,.T.); +#4041 = LINE('',#4042,#4043); +#4042 = CARTESIAN_POINT('',(70.92045164343,56.85,50.507021534312)); +#4043 = VECTOR('',#4044,1.); +#4044 = DIRECTION('',(0.,-1.,0.)); +#4045 = ORIENTED_EDGE('',*,*,#3809,.T.); +#4046 = ORIENTED_EDGE('',*,*,#4047,.T.); +#4047 = EDGE_CURVE('',#3801,#3792,#4048,.T.); +#4048 = CIRCLE('',#4049,25.9); +#4049 = AXIS2_PLACEMENT_3D('',#4050,#4051,#4052); +#4050 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#4051 = DIRECTION('',(0.,1.,0.)); +#4052 = DIRECTION('',(0.,-0.,1.)); +#4053 = ORIENTED_EDGE('',*,*,#3791,.T.); +#4054 = ORIENTED_EDGE('',*,*,#4055,.F.); +#4055 = EDGE_CURVE('',#3916,#3784,#4056,.T.); +#4056 = LINE('',#4057,#4058); +#4057 = CARTESIAN_POINT('',(54.07954835657,56.1,50.507021534312)); +#4058 = VECTOR('',#4059,1.); +#4059 = DIRECTION('',(0.,-1.,0.)); +#4060 = CYLINDRICAL_SURFACE('',#4061,25.9); +#4061 = AXIS2_PLACEMENT_3D('',#4062,#4063,#4064); +#4062 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#4063 = DIRECTION('',(0.,-1.,0.)); +#4064 = DIRECTION('',(1.,0.,0.)); +#4065 = ADVANCED_FACE('',(#4066),#4100,.T.); +#4066 = FACE_BOUND('',#4067,.T.); +#4067 = EDGE_LOOP('',(#4068,#4079,#4085,#4086,#4093,#4094)); +#4068 = ORIENTED_EDGE('',*,*,#4069,.F.); +#4069 = EDGE_CURVE('',#4070,#4072,#4074,.T.); +#4070 = VERTEX_POINT('',#4071); +#4071 = CARTESIAN_POINT('',(37.078232612654,56.1,79.954164198295)); +#4072 = VERTEX_POINT('',#4073); +#4073 = CARTESIAN_POINT('',(45.498684256084,56.1,94.538814267393)); +#4074 = CIRCLE('',#4075,25.9); +#4075 = AXIS2_PLACEMENT_3D('',#4076,#4077,#4078); +#4076 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#4077 = DIRECTION('',(0.,1.,0.)); +#4078 = DIRECTION('',(0.,0.,-1.)); +#4079 = ORIENTED_EDGE('',*,*,#4080,.T.); +#4080 = EDGE_CURVE('',#4070,#3758,#4081,.T.); +#4081 = LINE('',#4082,#4083); +#4082 = CARTESIAN_POINT('',(37.078232612654,56.85,79.954164198295)); +#4083 = VECTOR('',#4084,1.); +#4084 = DIRECTION('',(0.,-1.,0.)); +#4085 = ORIENTED_EDGE('',*,*,#3757,.T.); +#4086 = ORIENTED_EDGE('',*,*,#4087,.T.); +#4087 = EDGE_CURVE('',#3749,#3740,#4088,.T.); +#4088 = CIRCLE('',#4089,25.9); +#4089 = AXIS2_PLACEMENT_3D('',#4090,#4091,#4092); +#4090 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#4091 = DIRECTION('',(0.,1.,0.)); +#4092 = DIRECTION('',(0.,-0.,1.)); +#4093 = ORIENTED_EDGE('',*,*,#3739,.T.); +#4094 = ORIENTED_EDGE('',*,*,#4095,.T.); +#4095 = EDGE_CURVE('',#3732,#4072,#4096,.T.); +#4096 = LINE('',#4097,#4098); +#4097 = CARTESIAN_POINT('',(45.498684256084,56.85,94.538814267393)); +#4098 = VECTOR('',#4099,1.); +#4099 = DIRECTION('',(0.,1.,0.)); +#4100 = CYLINDRICAL_SURFACE('',#4101,25.9); +#4101 = AXIS2_PLACEMENT_3D('',#4102,#4103,#4104); +#4102 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#4103 = DIRECTION('',(0.,-1.,0.)); +#4104 = DIRECTION('',(1.,0.,0.)); +#4105 = ADVANCED_FACE('',(#4106,#4117),#4133,.F.); +#4106 = FACE_BOUND('',#4107,.T.); +#4107 = EDGE_LOOP('',(#4108)); +#4108 = ORIENTED_EDGE('',*,*,#4109,.T.); +#4109 = EDGE_CURVE('',#4110,#4110,#4112,.T.); +#4110 = VERTEX_POINT('',#4111); +#4111 = CARTESIAN_POINT('',(42.538114442769,56.1,85.625)); +#4112 = CIRCLE('',#4113,0.9); +#4113 = AXIS2_PLACEMENT_3D('',#4114,#4115,#4116); +#4114 = CARTESIAN_POINT('',(42.538114442769,56.1,86.525)); +#4115 = DIRECTION('',(0.,-1.,0.)); +#4116 = DIRECTION('',(0.,0.,-1.)); +#4117 = FACE_BOUND('',#4118,.T.); +#4118 = EDGE_LOOP('',(#4119,#4120,#4126,#4127)); +#4119 = ORIENTED_EDGE('',*,*,#3993,.F.); +#4120 = ORIENTED_EDGE('',*,*,#4121,.T.); +#4121 = EDGE_CURVE('',#3994,#4070,#4122,.T.); +#4122 = LINE('',#4123,#4124); +#4123 = CARTESIAN_POINT('',(37.078232612654,56.1,79.954164198295)); +#4124 = VECTOR('',#4125,1.); +#4125 = DIRECTION('',(-0.981535420361,0.,0.191280470977)); +#4126 = ORIENTED_EDGE('',*,*,#4069,.T.); +#4127 = ORIENTED_EDGE('',*,*,#4128,.F.); +#4128 = EDGE_CURVE('',#3986,#4072,#4129,.T.); +#4129 = LINE('',#4130,#4131); +#4130 = CARTESIAN_POINT('',(45.498684256084,56.1,94.538814267393)); +#4131 = VECTOR('',#4132,1.); +#4132 = DIRECTION('',(-0.656421457294,0.,0.754394373258)); +#4133 = PLANE('',#4134); +#4134 = AXIS2_PLACEMENT_3D('',#4135,#4136,#4137); +#4135 = CARTESIAN_POINT('',(62.5,56.1,77.85)); +#4136 = DIRECTION('',(0.,-1.,0.)); +#4137 = DIRECTION('',(0.,0.,-1.)); +#4138 = ADVANCED_FACE('',(#4139),#4192,.F.); +#4139 = FACE_BOUND('',#4140,.T.); +#4140 = EDGE_LOOP('',(#4141,#4151,#4161,#4169,#4177,#4186)); +#4141 = ORIENTED_EDGE('',*,*,#4142,.T.); +#4142 = EDGE_CURVE('',#4143,#4145,#4147,.T.); +#4143 = VERTEX_POINT('',#4144); +#4144 = CARTESIAN_POINT('',(25.343588520597,28.25,97.523400852741)); +#4145 = VERTEX_POINT('',#4146); +#4146 = CARTESIAN_POINT('',(25.343588520597,35.,97.523400852741)); +#4147 = LINE('',#4148,#4149); +#4148 = CARTESIAN_POINT('',(25.343588520597,24.5,97.523400852741)); +#4149 = VECTOR('',#4150,1.); +#4150 = DIRECTION('',(0.,1.,0.)); +#4151 = ORIENTED_EDGE('',*,*,#4152,.T.); +#4152 = EDGE_CURVE('',#4145,#4153,#4155,.T.); +#4153 = VERTEX_POINT('',#4154); +#4154 = CARTESIAN_POINT('',(39.976599147259,35.,112.1564114794)); +#4155 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4156,#4157,#4158,#4159,#4160), + .UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.),.QUASI_UNIFORM_KNOTS.); +#4156 = CARTESIAN_POINT('',(25.343588520597,35.,97.523400852741)); +#4157 = CARTESIAN_POINT('',(27.78242362504,35.041067318757, + 99.962235957185)); +#4158 = CARTESIAN_POINT('',(32.660093833928,35.083932681243, + 104.83990616607)); +#4159 = CARTESIAN_POINT('',(37.537764042815,35.041067318757, + 109.71757637496)); +#4160 = CARTESIAN_POINT('',(39.976599147259,35.,112.1564114794)); +#4161 = ORIENTED_EDGE('',*,*,#4162,.T.); +#4162 = EDGE_CURVE('',#4153,#4163,#4165,.T.); +#4163 = VERTEX_POINT('',#4164); +#4164 = CARTESIAN_POINT('',(39.976599147259,28.25,112.1564114794)); +#4165 = LINE('',#4166,#4167); +#4166 = CARTESIAN_POINT('',(39.976599147259,24.5,112.1564114794)); +#4167 = VECTOR('',#4168,1.); +#4168 = DIRECTION('',(0.,-1.,0.)); +#4169 = ORIENTED_EDGE('',*,*,#4170,.F.); +#4170 = EDGE_CURVE('',#4171,#4163,#4173,.T.); +#4171 = VERTEX_POINT('',#4172); +#4172 = CARTESIAN_POINT('',(36.366338564109,28.25,108.54615089625)); +#4173 = LINE('',#4174,#4175); +#4174 = CARTESIAN_POINT('',(32.660093833928,28.25,104.83990616607)); +#4175 = VECTOR('',#4176,1.); +#4176 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4177 = ORIENTED_EDGE('',*,*,#4178,.F.); +#4178 = EDGE_CURVE('',#4179,#4171,#4181,.T.); +#4179 = VERTEX_POINT('',#4180); +#4180 = CARTESIAN_POINT('',(28.953849103746,28.25,101.13366143589)); +#4181 = CIRCLE('',#4182,9.15); +#4182 = AXIS2_PLACEMENT_3D('',#4183,#4184,#4185); +#4183 = CARTESIAN_POINT('',(32.660093833928,20.75,104.83990616607)); +#4184 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#4185 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4186 = ORIENTED_EDGE('',*,*,#4187,.F.); +#4187 = EDGE_CURVE('',#4143,#4179,#4188,.T.); +#4188 = LINE('',#4189,#4190); +#4189 = CARTESIAN_POINT('',(32.660093833928,28.25,104.83990616607)); +#4190 = VECTOR('',#4191,1.); +#4191 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4192 = PLANE('',#4193); +#4193 = AXIS2_PLACEMENT_3D('',#4194,#4195,#4196); +#4194 = CARTESIAN_POINT('',(32.660093833928,35.5,104.83990616607)); +#4195 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#4196 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4197 = ADVANCED_FACE('',(#4198),#4225,.F.); +#4198 = FACE_BOUND('',#4199,.F.); +#4199 = EDGE_LOOP('',(#4200,#4209,#4217,#4224)); +#4200 = ORIENTED_EDGE('',*,*,#4201,.T.); +#4201 = EDGE_CURVE('',#4163,#4202,#4204,.T.); +#4202 = VERTEX_POINT('',#4203); +#4203 = CARTESIAN_POINT('',(102.58464838884,28.25,58.233263181447)); +#4204 = CIRCLE('',#4205,43.45); +#4205 = AXIS2_PLACEMENT_3D('',#4206,#4207,#4208); +#4206 = CARTESIAN_POINT('',(62.5,28.25,75.)); +#4207 = DIRECTION('',(0.,1.,0.)); +#4208 = DIRECTION('',(0.,-0.,1.)); +#4209 = ORIENTED_EDGE('',*,*,#4210,.T.); +#4210 = EDGE_CURVE('',#4202,#4211,#4213,.T.); +#4211 = VERTEX_POINT('',#4212); +#4212 = CARTESIAN_POINT('',(102.58464838884,35.,58.233263181447)); +#4213 = LINE('',#4214,#4215); +#4214 = CARTESIAN_POINT('',(102.58464838884,24.5,58.233263181447)); +#4215 = VECTOR('',#4216,1.); +#4216 = DIRECTION('',(0.,1.,0.)); +#4217 = ORIENTED_EDGE('',*,*,#4218,.F.); +#4218 = EDGE_CURVE('',#4153,#4211,#4219,.T.); +#4219 = CIRCLE('',#4220,43.45); +#4220 = AXIS2_PLACEMENT_3D('',#4221,#4222,#4223); +#4221 = CARTESIAN_POINT('',(62.5,35.,75.)); +#4222 = DIRECTION('',(0.,1.,0.)); +#4223 = DIRECTION('',(0.,0.,-1.)); +#4224 = ORIENTED_EDGE('',*,*,#4162,.T.); +#4225 = CYLINDRICAL_SURFACE('',#4226,43.45); +#4226 = AXIS2_PLACEMENT_3D('',#4227,#4228,#4229); +#4227 = CARTESIAN_POINT('',(62.5,24.5,75.)); +#4228 = DIRECTION('',(0.,1.,0.)); +#4229 = DIRECTION('',(0.707106781187,-0.,0.707106781187)); +#4230 = ADVANCED_FACE('',(#4231),#4262,.F.); +#4231 = FACE_BOUND('',#4232,.T.); +#4232 = EDGE_LOOP('',(#4233,#4234,#4248,#4256)); +#4233 = ORIENTED_EDGE('',*,*,#4210,.T.); +#4234 = ORIENTED_EDGE('',*,*,#4235,.T.); +#4235 = EDGE_CURVE('',#4211,#4236,#4238,.T.); +#4236 = VERTEX_POINT('',#4237); +#4237 = CARTESIAN_POINT('',(79.236490555174,34.9991875,34.885105347775) + ); +#4238 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#4239,#4240,#4241,#4242,#4243, + #4244,#4245,#4246,#4247),.UNSPECIFIED.,.F.,.F.,(4,2,1,2,4),(0.,0.25, + 0.5,0.75,1.),.UNSPECIFIED.); +#4239 = CARTESIAN_POINT('',(102.58464838884,35.,58.233263181447)); +#4240 = CARTESIAN_POINT('',(100.63875705706,35.052214179516, + 56.287371849668)); +#4241 = CARTESIAN_POINT('',(98.692911239814,35.093178018858, + 54.341526032415)); +#4242 = CARTESIAN_POINT('',(94.801327699605,35.148386808615, + 50.449942492206)); +#4243 = CARTESIAN_POINT('',(90.909852705401,35.176765055179, + 46.558467498002)); +#4244 = CARTESIAN_POINT('',(87.018608560971,35.148081553704, + 42.667223353572)); +#4245 = CARTESIAN_POINT('',(83.127472851196,35.092595032541, + 38.776087643798)); +#4246 = CARTESIAN_POINT('',(81.181958987365,35.051506192279, + 36.830573779966)); +#4247 = CARTESIAN_POINT('',(79.236490555174,34.9991875,34.885105347775) + ); +#4248 = ORIENTED_EDGE('',*,*,#4249,.F.); +#4249 = EDGE_CURVE('',#4250,#4236,#4252,.T.); +#4250 = VERTEX_POINT('',#4251); +#4251 = CARTESIAN_POINT('',(79.236490555174,28.25,34.885105347775)); +#4252 = LINE('',#4253,#4254); +#4253 = CARTESIAN_POINT('',(79.236490555174,30.375,34.885105347775)); +#4254 = VECTOR('',#4255,1.); +#4255 = DIRECTION('',(0.,1.,0.)); +#4256 = ORIENTED_EDGE('',*,*,#4257,.F.); +#4257 = EDGE_CURVE('',#4202,#4250,#4258,.T.); +#4258 = LINE('',#4259,#4260); +#4259 = CARTESIAN_POINT('',(90.925692603699,28.25,46.574307396301)); +#4260 = VECTOR('',#4261,1.); +#4261 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#4262 = PLANE('',#4263); +#4263 = AXIS2_PLACEMENT_3D('',#4264,#4265,#4266); +#4264 = CARTESIAN_POINT('',(90.925692603699,30.375,46.574307396301)); +#4265 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#4266 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#4267 = ADVANCED_FACE('',(#4268),#4293,.F.); +#4268 = FACE_BOUND('',#4269,.T.); +#4269 = EDGE_LOOP('',(#4270,#4271,#4279,#4287)); +#4270 = ORIENTED_EDGE('',*,*,#4249,.T.); +#4271 = ORIENTED_EDGE('',*,*,#4272,.T.); +#4272 = EDGE_CURVE('',#4236,#4273,#4275,.T.); +#4273 = VERTEX_POINT('',#4274); +#4274 = CARTESIAN_POINT('',(79.230233563335,35.,34.900102432596)); +#4275 = LINE('',#4276,#4277); +#4276 = CARTESIAN_POINT('',(62.5,37.1725,75.)); +#4277 = VECTOR('',#4278,1.); +#4278 = DIRECTION('',(-0.38456524514,4.993761694389E-02,0.921746064078) + ); +#4279 = ORIENTED_EDGE('',*,*,#4280,.T.); +#4280 = EDGE_CURVE('',#4273,#4281,#4283,.T.); +#4281 = VERTEX_POINT('',#4282); +#4282 = CARTESIAN_POINT('',(79.230233563335,28.25,34.900102432596)); +#4283 = LINE('',#4284,#4285); +#4284 = CARTESIAN_POINT('',(79.230233563335,24.5,34.900102432596)); +#4285 = VECTOR('',#4286,1.); +#4286 = DIRECTION('',(0.,-1.,0.)); +#4287 = ORIENTED_EDGE('',*,*,#4288,.F.); +#4288 = EDGE_CURVE('',#4250,#4281,#4289,.T.); +#4289 = LINE('',#4290,#4291); +#4290 = CARTESIAN_POINT('',(79.153224433009,28.25,35.084681938085)); +#4291 = VECTOR('',#4292,1.); +#4292 = DIRECTION('',(-0.38504565163,0.,0.922897527443)); +#4293 = PLANE('',#4294); +#4294 = AXIS2_PLACEMENT_3D('',#4295,#4296,#4297); +#4295 = CARTESIAN_POINT('',(79.153224433009,30.375,35.084681938085)); +#4296 = DIRECTION('',(-0.922897527443,0.,-0.38504565163)); +#4297 = DIRECTION('',(0.,1.,0.)); +#4298 = ADVANCED_FACE('',(#4299),#4325,.F.); +#4299 = FACE_BOUND('',#4300,.F.); +#4300 = EDGE_LOOP('',(#4301,#4312,#4318,#4319)); +#4301 = ORIENTED_EDGE('',*,*,#4302,.T.); +#4302 = EDGE_CURVE('',#4303,#4305,#4307,.T.); +#4303 = VERTEX_POINT('',#4304); +#4304 = CARTESIAN_POINT('',(26.266843335237,28.25,103.82066720439)); +#4305 = VERTEX_POINT('',#4306); +#4306 = CARTESIAN_POINT('',(33.679332795601,28.25,111.23315666476)); +#4307 = CIRCLE('',#4308,9.15); +#4308 = AXIS2_PLACEMENT_3D('',#4309,#4310,#4311); +#4309 = CARTESIAN_POINT('',(29.973088065419,20.75,107.52691193458)); +#4310 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#4311 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4312 = ORIENTED_EDGE('',*,*,#4313,.F.); +#4313 = EDGE_CURVE('',#4171,#4305,#4314,.T.); +#4314 = LINE('',#4315,#4316); +#4315 = CARTESIAN_POINT('',(36.507759920347,28.25,108.40472954001)); +#4316 = VECTOR('',#4317,1.); +#4317 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#4318 = ORIENTED_EDGE('',*,*,#4178,.F.); +#4319 = ORIENTED_EDGE('',*,*,#4320,.F.); +#4320 = EDGE_CURVE('',#4303,#4179,#4321,.T.); +#4321 = LINE('',#4322,#4323); +#4322 = CARTESIAN_POINT('',(29.095270459983,28.25,100.99224007965)); +#4323 = VECTOR('',#4324,1.); +#4324 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#4325 = CYLINDRICAL_SURFACE('',#4326,9.15); +#4326 = AXIS2_PLACEMENT_3D('',#4327,#4328,#4329); +#4327 = CARTESIAN_POINT('',(32.801515190165,20.75,104.69848480983)); +#4328 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#4329 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4330 = ADVANCED_FACE('',(#4331),#4403,.F.); +#4331 = FACE_BOUND('',#4332,.T.); +#4332 = EDGE_LOOP('',(#4333,#4343,#4351,#4359,#4368,#4374,#4375,#4376, + #4377,#4378,#4379,#4386,#4387,#4388,#4396)); +#4333 = ORIENTED_EDGE('',*,*,#4334,.F.); +#4334 = EDGE_CURVE('',#4335,#4337,#4339,.T.); +#4335 = VERTEX_POINT('',#4336); +#4336 = CARTESIAN_POINT('',(15.25,28.25,18.326702769452)); +#4337 = VERTEX_POINT('',#4338); +#4338 = CARTESIAN_POINT('',(15.25,28.25,75.)); +#4339 = LINE('',#4340,#4341); +#4340 = CARTESIAN_POINT('',(15.25,28.25,20.192662228334)); +#4341 = VECTOR('',#4342,1.); +#4342 = DIRECTION('',(0.,0.,1.)); +#4343 = ORIENTED_EDGE('',*,*,#4344,.F.); +#4344 = EDGE_CURVE('',#4345,#4335,#4347,.T.); +#4345 = VERTEX_POINT('',#4346); +#4346 = CARTESIAN_POINT('',(109.75,28.25,18.326702769452)); +#4347 = LINE('',#4348,#4349); +#4348 = CARTESIAN_POINT('',(69.90038168495,28.25,18.326702769452)); +#4349 = VECTOR('',#4350,1.); +#4350 = DIRECTION('',(-1.,0.,0.)); +#4351 = ORIENTED_EDGE('',*,*,#4352,.F.); +#4352 = EDGE_CURVE('',#4353,#4345,#4355,.T.); +#4353 = VERTEX_POINT('',#4354); +#4354 = CARTESIAN_POINT('',(109.75,28.25,75.)); +#4355 = LINE('',#4356,#4357); +#4356 = CARTESIAN_POINT('',(109.75,28.25,20.192662228334)); +#4357 = VECTOR('',#4358,1.); +#4358 = DIRECTION('',(0.,0.,-1.)); +#4359 = ORIENTED_EDGE('',*,*,#4360,.T.); +#4360 = EDGE_CURVE('',#4353,#4361,#4363,.T.); +#4361 = VERTEX_POINT('',#4362); +#4362 = CARTESIAN_POINT('',(37.60730380772,28.25,115.16112767688)); +#4363 = CIRCLE('',#4364,47.25); +#4364 = AXIS2_PLACEMENT_3D('',#4365,#4366,#4367); +#4365 = CARTESIAN_POINT('',(62.5,28.25,75.)); +#4366 = DIRECTION('',(0.,-1.,0.)); +#4367 = DIRECTION('',(0.,0.,1.)); +#4368 = ORIENTED_EDGE('',*,*,#4369,.T.); +#4369 = EDGE_CURVE('',#4361,#4305,#4370,.T.); +#4370 = LINE('',#4371,#4372); +#4371 = CARTESIAN_POINT('',(29.973088065419,28.25,107.52691193458)); +#4372 = VECTOR('',#4373,1.); +#4373 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#4374 = ORIENTED_EDGE('',*,*,#4313,.F.); +#4375 = ORIENTED_EDGE('',*,*,#4170,.T.); +#4376 = ORIENTED_EDGE('',*,*,#4201,.T.); +#4377 = ORIENTED_EDGE('',*,*,#4257,.T.); +#4378 = ORIENTED_EDGE('',*,*,#4288,.T.); +#4379 = ORIENTED_EDGE('',*,*,#4380,.T.); +#4380 = EDGE_CURVE('',#4281,#4143,#4381,.T.); +#4381 = CIRCLE('',#4382,43.45); +#4382 = AXIS2_PLACEMENT_3D('',#4383,#4384,#4385); +#4383 = CARTESIAN_POINT('',(62.5,28.25,75.)); +#4384 = DIRECTION('',(0.,1.,0.)); +#4385 = DIRECTION('',(0.,-0.,1.)); +#4386 = ORIENTED_EDGE('',*,*,#4187,.T.); +#4387 = ORIENTED_EDGE('',*,*,#4320,.F.); +#4388 = ORIENTED_EDGE('',*,*,#4389,.T.); +#4389 = EDGE_CURVE('',#4303,#4390,#4392,.T.); +#4390 = VERTEX_POINT('',#4391); +#4391 = CARTESIAN_POINT('',(22.338872323117,28.25,99.89269619228)); +#4392 = LINE('',#4393,#4394); +#4393 = CARTESIAN_POINT('',(29.973088065419,28.25,107.52691193458)); +#4394 = VECTOR('',#4395,1.); +#4395 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#4396 = ORIENTED_EDGE('',*,*,#4397,.T.); +#4397 = EDGE_CURVE('',#4390,#4337,#4398,.T.); +#4398 = CIRCLE('',#4399,47.25); +#4399 = AXIS2_PLACEMENT_3D('',#4400,#4401,#4402); +#4400 = CARTESIAN_POINT('',(62.5,28.25,75.)); +#4401 = DIRECTION('',(0.,-1.,0.)); +#4402 = DIRECTION('',(0.,0.,1.)); +#4403 = PLANE('',#4404); +#4404 = AXIS2_PLACEMENT_3D('',#4405,#4406,#4407); +#4405 = CARTESIAN_POINT('',(62.5,28.25,75.)); +#4406 = DIRECTION('',(0.,1.,0.)); +#4407 = DIRECTION('',(0.,-0.,1.)); +#4408 = ADVANCED_FACE('',(#4409),#4449,.T.); +#4409 = FACE_BOUND('',#4410,.T.); +#4410 = EDGE_LOOP('',(#4411,#4417,#4418,#4426,#4434,#4442,#4448)); +#4411 = ORIENTED_EDGE('',*,*,#4412,.T.); +#4412 = EDGE_CURVE('',#4337,#3613,#4413,.T.); +#4413 = LINE('',#4414,#4415); +#4414 = CARTESIAN_POINT('',(15.25,32.525,75.)); +#4415 = VECTOR('',#4416,1.); +#4416 = DIRECTION('',(0.,1.,0.)); +#4417 = ORIENTED_EDGE('',*,*,#3612,.F.); +#4418 = ORIENTED_EDGE('',*,*,#4419,.F.); +#4419 = EDGE_CURVE('',#4420,#3605,#4422,.T.); +#4420 = VERTEX_POINT('',#4421); +#4421 = CARTESIAN_POINT('',(15.25,51.014781741248,20.466117616436)); +#4422 = LINE('',#4423,#4424); +#4423 = CARTESIAN_POINT('',(15.25,50.396747752498,22.368230649026)); +#4424 = VECTOR('',#4425,1.); +#4425 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4426 = ORIENTED_EDGE('',*,*,#4427,.F.); +#4427 = EDGE_CURVE('',#4428,#4420,#4430,.T.); +#4428 = VERTEX_POINT('',#4429); +#4429 = CARTESIAN_POINT('',(15.25,38.345084971875,16.349483590768)); +#4430 = LINE('',#4431,#4432); +#4431 = CARTESIAN_POINT('',(15.25,70.185875842949,26.695183688413)); +#4432 = VECTOR('',#4433,1.); +#4433 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4434 = ORIENTED_EDGE('',*,*,#4435,.F.); +#4435 = EDGE_CURVE('',#4436,#4428,#4438,.T.); +#4436 = VERTEX_POINT('',#4437); +#4437 = CARTESIAN_POINT('',(15.25,36.8,21.104766172244)); +#4438 = LINE('',#4439,#4440); +#4439 = CARTESIAN_POINT('',(15.25,37.727050983125,18.251596623358)); +#4440 = VECTOR('',#4441,1.); +#4441 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4442 = ORIENTED_EDGE('',*,*,#4443,.F.); +#4443 = EDGE_CURVE('',#4335,#4436,#4444,.T.); +#4444 = LINE('',#4445,#4446); +#4445 = CARTESIAN_POINT('',(15.25,42.773985657009,23.045831777219)); +#4446 = VECTOR('',#4447,1.); +#4447 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4448 = ORIENTED_EDGE('',*,*,#4334,.T.); +#4449 = PLANE('',#4450); +#4450 = AXIS2_PLACEMENT_3D('',#4451,#4452,#4453); +#4451 = CARTESIAN_POINT('',(15.25,43.701036640134,20.192662228334)); +#4452 = DIRECTION('',(-1.,0.,0.)); +#4453 = DIRECTION('',(0.,0.,1.)); +#4454 = ADVANCED_FACE('',(#4455),#4495,.T.); +#4455 = FACE_BOUND('',#4456,.T.); +#4456 = EDGE_LOOP('',(#4457,#4465,#4473,#4481,#4487,#4488,#4494)); +#4457 = ORIENTED_EDGE('',*,*,#4458,.F.); +#4458 = EDGE_CURVE('',#4459,#4345,#4461,.T.); +#4459 = VERTEX_POINT('',#4460); +#4460 = CARTESIAN_POINT('',(109.75,38.226584774443,21.568291663806)); +#4461 = LINE('',#4462,#4463); +#4462 = CARTESIAN_POINT('',(109.75,42.773985657009,23.045831777219)); +#4463 = VECTOR('',#4464,1.); +#4464 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4465 = ORIENTED_EDGE('',*,*,#4466,.F.); +#4466 = EDGE_CURVE('',#4467,#4459,#4469,.T.); +#4467 = VERTEX_POINT('',#4468); +#4468 = CARTESIAN_POINT('',(109.75,39.771669746317,16.81300908233)); +#4469 = LINE('',#4470,#4471); +#4470 = CARTESIAN_POINT('',(109.75,38.226584774443,21.568291663806)); +#4471 = VECTOR('',#4472,1.); +#4472 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4473 = ORIENTED_EDGE('',*,*,#4474,.F.); +#4474 = EDGE_CURVE('',#4475,#4467,#4477,.T.); +#4475 = VERTEX_POINT('',#4476); +#4476 = CARTESIAN_POINT('',(109.75,51.014781741248,20.466117616436)); +#4477 = LINE('',#4478,#4479); +#4478 = CARTESIAN_POINT('',(109.75,44.319070628884,18.290549195743)); +#4479 = VECTOR('',#4480,1.); +#4480 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4481 = ORIENTED_EDGE('',*,*,#4482,.T.); +#4482 = EDGE_CURVE('',#4475,#3541,#4483,.T.); +#4483 = LINE('',#4484,#4485); +#4484 = CARTESIAN_POINT('',(109.75,36.8,64.214717366013)); +#4485 = VECTOR('',#4486,1.); +#4486 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4487 = ORIENTED_EDGE('',*,*,#3646,.F.); +#4488 = ORIENTED_EDGE('',*,*,#4489,.T.); +#4489 = EDGE_CURVE('',#3638,#4353,#4490,.T.); +#4490 = LINE('',#4491,#4492); +#4491 = CARTESIAN_POINT('',(109.75,24.5,75.)); +#4492 = VECTOR('',#4493,1.); +#4493 = DIRECTION('',(0.,-1.,0.)); +#4494 = ORIENTED_EDGE('',*,*,#4352,.T.); +#4495 = PLANE('',#4496); +#4496 = AXIS2_PLACEMENT_3D('',#4497,#4498,#4499); +#4497 = CARTESIAN_POINT('',(109.75,43.701036640134,20.192662228334)); +#4498 = DIRECTION('',(1.,0.,0.)); +#4499 = DIRECTION('',(0.,0.,1.)); +#4500 = ADVANCED_FACE('',(#4501),#4535,.T.); +#4501 = FACE_BOUND('',#4502,.T.); +#4502 = EDGE_LOOP('',(#4503,#4504,#4512,#4518,#4519,#4527,#4533,#4534)); +#4503 = ORIENTED_EDGE('',*,*,#4443,.T.); +#4504 = ORIENTED_EDGE('',*,*,#4505,.F.); +#4505 = EDGE_CURVE('',#4506,#4436,#4508,.T.); +#4506 = VERTEX_POINT('',#4507); +#4507 = CARTESIAN_POINT('',(21.25,36.8,21.104766172244)); +#4508 = LINE('',#4509,#4510); +#4509 = CARTESIAN_POINT('',(69.90038168495,36.8,21.104766172244)); +#4510 = VECTOR('',#4511,1.); +#4511 = DIRECTION('',(-1.,0.,0.)); +#4512 = ORIENTED_EDGE('',*,*,#4513,.T.); +#4513 = EDGE_CURVE('',#4506,#3573,#4514,.T.); +#4514 = LINE('',#4515,#4516); +#4515 = CARTESIAN_POINT('',(21.25,42.773985657009,23.045831777219)); +#4516 = VECTOR('',#4517,1.); +#4517 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4518 = ORIENTED_EDGE('',*,*,#3572,.F.); +#4519 = ORIENTED_EDGE('',*,*,#4520,.T.); +#4520 = EDGE_CURVE('',#3565,#4521,#4523,.T.); +#4521 = VERTEX_POINT('',#4522); +#4522 = CARTESIAN_POINT('',(103.75,38.226584774443,21.568291663806)); +#4523 = LINE('',#4524,#4525); +#4524 = CARTESIAN_POINT('',(103.75,42.773985657009,23.045831777219)); +#4525 = VECTOR('',#4526,1.); +#4526 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4527 = ORIENTED_EDGE('',*,*,#4528,.F.); +#4528 = EDGE_CURVE('',#4459,#4521,#4529,.T.); +#4529 = LINE('',#4530,#4531); +#4530 = CARTESIAN_POINT('',(69.90038168495,38.226584774443, + 21.568291663806)); +#4531 = VECTOR('',#4532,1.); +#4532 = DIRECTION('',(-1.,0.,0.)); +#4533 = ORIENTED_EDGE('',*,*,#4458,.T.); +#4534 = ORIENTED_EDGE('',*,*,#4344,.T.); +#4535 = PLANE('',#4536); +#4536 = AXIS2_PLACEMENT_3D('',#4537,#4538,#4539); +#4537 = CARTESIAN_POINT('',(69.90038168495,42.773985657009, + 23.045831777219)); +#4538 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4539 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4540 = ADVANCED_FACE('',(#4541),#4552,.T.); +#4541 = FACE_BOUND('',#4542,.T.); +#4542 = EDGE_LOOP('',(#4543,#4549,#4550,#4551)); +#4543 = ORIENTED_EDGE('',*,*,#4544,.T.); +#4544 = EDGE_CURVE('',#4390,#3621,#4545,.T.); +#4545 = LINE('',#4546,#4547); +#4546 = CARTESIAN_POINT('',(22.338872323117,24.5,99.89269619228)); +#4547 = VECTOR('',#4548,1.); +#4548 = DIRECTION('',(0.,1.,0.)); +#4549 = ORIENTED_EDGE('',*,*,#3620,.F.); +#4550 = ORIENTED_EDGE('',*,*,#4412,.F.); +#4551 = ORIENTED_EDGE('',*,*,#4397,.F.); +#4552 = CYLINDRICAL_SURFACE('',#4553,47.25); +#4553 = AXIS2_PLACEMENT_3D('',#4554,#4555,#4556); +#4554 = CARTESIAN_POINT('',(62.5,24.5,75.)); +#4555 = DIRECTION('',(0.,1.,0.)); +#4556 = DIRECTION('',(0.707106781187,-0.,0.707106781187)); +#4557 = ADVANCED_FACE('',(#4558),#4571,.T.); +#4558 = FACE_BOUND('',#4559,.T.); +#4559 = EDGE_LOOP('',(#4560,#4566,#4567,#4568,#4569,#4570)); +#4560 = ORIENTED_EDGE('',*,*,#4561,.F.); +#4561 = EDGE_CURVE('',#3630,#4361,#4562,.T.); +#4562 = LINE('',#4563,#4564); +#4563 = CARTESIAN_POINT('',(37.60730380772,24.5,115.16112767688)); +#4564 = VECTOR('',#4565,1.); +#4565 = DIRECTION('',(0.,-1.,0.)); +#4566 = ORIENTED_EDGE('',*,*,#3629,.F.); +#4567 = ORIENTED_EDGE('',*,*,#4544,.F.); +#4568 = ORIENTED_EDGE('',*,*,#4389,.F.); +#4569 = ORIENTED_EDGE('',*,*,#4302,.T.); +#4570 = ORIENTED_EDGE('',*,*,#4369,.F.); +#4571 = PLANE('',#4572); +#4572 = AXIS2_PLACEMENT_3D('',#4573,#4574,#4575); +#4573 = CARTESIAN_POINT('',(29.973088065419,35.5,107.52691193458)); +#4574 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#4575 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#4576 = ADVANCED_FACE('',(#4577),#4583,.T.); +#4577 = FACE_BOUND('',#4578,.T.); +#4578 = EDGE_LOOP('',(#4579,#4580,#4581,#4582)); +#4579 = ORIENTED_EDGE('',*,*,#4489,.F.); +#4580 = ORIENTED_EDGE('',*,*,#3637,.F.); +#4581 = ORIENTED_EDGE('',*,*,#4561,.T.); +#4582 = ORIENTED_EDGE('',*,*,#4360,.F.); +#4583 = CYLINDRICAL_SURFACE('',#4584,47.25); +#4584 = AXIS2_PLACEMENT_3D('',#4585,#4586,#4587); +#4585 = CARTESIAN_POINT('',(62.5,24.5,75.)); +#4586 = DIRECTION('',(0.,1.,0.)); +#4587 = DIRECTION('',(0.707106781187,-0.,0.707106781187)); +#4588 = ADVANCED_FACE('',(#4589),#4610,.F.); +#4589 = FACE_BOUND('',#4590,.F.); +#4590 = EDGE_LOOP('',(#4591,#4592,#4593,#4602,#4609)); +#4591 = ORIENTED_EDGE('',*,*,#4380,.T.); +#4592 = ORIENTED_EDGE('',*,*,#4142,.T.); +#4593 = ORIENTED_EDGE('',*,*,#4594,.F.); +#4594 = EDGE_CURVE('',#4595,#4145,#4597,.T.); +#4595 = VERTEX_POINT('',#4596); +#4596 = CARTESIAN_POINT('',(58.348055506961,34.999999965244, + 31.74882826124)); +#4597 = CIRCLE('',#4598,43.45); +#4598 = AXIS2_PLACEMENT_3D('',#4599,#4600,#4601); +#4599 = CARTESIAN_POINT('',(62.5,35.,75.)); +#4600 = DIRECTION('',(0.,1.,0.)); +#4601 = DIRECTION('',(0.,0.,-1.)); +#4602 = ORIENTED_EDGE('',*,*,#4603,.F.); +#4603 = EDGE_CURVE('',#4273,#4595,#4604,.T.); +#4604 = CIRCLE('',#4605,43.45); +#4605 = AXIS2_PLACEMENT_3D('',#4606,#4607,#4608); +#4606 = CARTESIAN_POINT('',(62.5,35.,75.)); +#4607 = DIRECTION('',(0.,1.,0.)); +#4608 = DIRECTION('',(0.,0.,-1.)); +#4609 = ORIENTED_EDGE('',*,*,#4280,.T.); +#4610 = CYLINDRICAL_SURFACE('',#4611,43.45); +#4611 = AXIS2_PLACEMENT_3D('',#4612,#4613,#4614); +#4612 = CARTESIAN_POINT('',(62.5,24.5,75.)); +#4613 = DIRECTION('',(0.,1.,0.)); +#4614 = DIRECTION('',(0.707106781187,-0.,0.707106781187)); +#4615 = ADVANCED_FACE('',(#4616,#4744),#4748,.T.); +#4616 = FACE_BOUND('',#4617,.T.); +#4617 = EDGE_LOOP('',(#4618,#4629,#4638,#4647,#4656,#4665,#4674,#4683, + #4692,#4701,#4710,#4719,#4728,#4737)); +#4618 = ORIENTED_EDGE('',*,*,#4619,.F.); +#4619 = EDGE_CURVE('',#4620,#4622,#4624,.T.); +#4620 = VERTEX_POINT('',#4621); +#4621 = CARTESIAN_POINT('',(65.719112874049,36.,51.772003695882)); +#4622 = VERTEX_POINT('',#4623); +#4623 = CARTESIAN_POINT('',(59.280887125951,36.,51.772003695882)); +#4624 = CIRCLE('',#4625,3.25); +#4625 = AXIS2_PLACEMENT_3D('',#4626,#4627,#4628); +#4626 = CARTESIAN_POINT('',(62.5,36.,51.325)); +#4627 = DIRECTION('',(0.,-1.,0.)); +#4628 = DIRECTION('',(0.,0.,-1.)); +#4629 = ORIENTED_EDGE('',*,*,#4630,.T.); +#4630 = EDGE_CURVE('',#4620,#4631,#4633,.T.); +#4631 = VERTEX_POINT('',#4632); +#4632 = CARTESIAN_POINT('',(81.006478441353,36.,60.598168321365)); +#4633 = CIRCLE('',#4634,23.45); +#4634 = AXIS2_PLACEMENT_3D('',#4635,#4636,#4637); +#4635 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4636 = DIRECTION('',(0.,-1.,0.)); +#4637 = DIRECTION('',(0.,0.,-1.)); +#4638 = ORIENTED_EDGE('',*,*,#4639,.F.); +#4639 = EDGE_CURVE('',#4640,#4631,#4642,.T.); +#4640 = VERTEX_POINT('',#4641); +#4641 = CARTESIAN_POINT('',(84.225591315402,36.,66.173835374517)); +#4642 = CIRCLE('',#4643,3.25); +#4643 = AXIS2_PLACEMENT_3D('',#4644,#4645,#4646); +#4644 = CARTESIAN_POINT('',(83.003151434597,36.,63.1625)); +#4645 = DIRECTION('',(0.,-1.,0.)); +#4646 = DIRECTION('',(0.,0.,-1.)); +#4647 = ORIENTED_EDGE('',*,*,#4648,.T.); +#4648 = EDGE_CURVE('',#4640,#4649,#4651,.T.); +#4649 = VERTEX_POINT('',#4650); +#4650 = CARTESIAN_POINT('',(85.205626203146,36.,69.13851224321)); +#4651 = CIRCLE('',#4652,23.45); +#4652 = AXIS2_PLACEMENT_3D('',#4653,#4654,#4655); +#4653 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4654 = DIRECTION('',(0.,-1.,0.)); +#4655 = DIRECTION('',(0.,0.,-1.)); +#4656 = ORIENTED_EDGE('',*,*,#4657,.T.); +#4657 = EDGE_CURVE('',#4649,#4658,#4660,.T.); +#4658 = VERTEX_POINT('',#4659); +#4659 = CARTESIAN_POINT('',(84.225591315402,36.,83.826164625483)); +#4660 = CIRCLE('',#4661,23.45); +#4661 = AXIS2_PLACEMENT_3D('',#4662,#4663,#4664); +#4662 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4663 = DIRECTION('',(0.,-1.,0.)); +#4664 = DIRECTION('',(0.,0.,-1.)); +#4665 = ORIENTED_EDGE('',*,*,#4666,.F.); +#4666 = EDGE_CURVE('',#4667,#4658,#4669,.T.); +#4667 = VERTEX_POINT('',#4668); +#4668 = CARTESIAN_POINT('',(81.006478441351,36.,89.401831678634)); +#4669 = CIRCLE('',#4670,3.25); +#4670 = AXIS2_PLACEMENT_3D('',#4671,#4672,#4673); +#4671 = CARTESIAN_POINT('',(83.003151434597,36.,86.8375)); +#4672 = DIRECTION('',(0.,-1.,0.)); +#4673 = DIRECTION('',(0.,0.,-1.)); +#4674 = ORIENTED_EDGE('',*,*,#4675,.T.); +#4675 = EDGE_CURVE('',#4667,#4676,#4678,.T.); +#4676 = VERTEX_POINT('',#4677); +#4677 = CARTESIAN_POINT('',(65.719112874049,36.,98.227996304118)); +#4678 = CIRCLE('',#4679,23.45); +#4679 = AXIS2_PLACEMENT_3D('',#4680,#4681,#4682); +#4680 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4681 = DIRECTION('',(0.,-1.,0.)); +#4682 = DIRECTION('',(0.,0.,-1.)); +#4683 = ORIENTED_EDGE('',*,*,#4684,.F.); +#4684 = EDGE_CURVE('',#4685,#4676,#4687,.T.); +#4685 = VERTEX_POINT('',#4686); +#4686 = CARTESIAN_POINT('',(59.280887125951,36.,98.227996304118)); +#4687 = CIRCLE('',#4688,3.25); +#4688 = AXIS2_PLACEMENT_3D('',#4689,#4690,#4691); +#4689 = CARTESIAN_POINT('',(62.5,36.,98.675)); +#4690 = DIRECTION('',(0.,-1.,0.)); +#4691 = DIRECTION('',(0.,0.,-1.)); +#4692 = ORIENTED_EDGE('',*,*,#4693,.T.); +#4693 = EDGE_CURVE('',#4685,#4694,#4696,.T.); +#4694 = VERTEX_POINT('',#4695); +#4695 = CARTESIAN_POINT('',(52.143694612465,36.,96.039235697147)); +#4696 = CIRCLE('',#4697,23.45); +#4697 = AXIS2_PLACEMENT_3D('',#4698,#4699,#4700); +#4698 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4699 = DIRECTION('',(0.,-1.,0.)); +#4700 = DIRECTION('',(0.,0.,-1.)); +#4701 = ORIENTED_EDGE('',*,*,#4702,.T.); +#4702 = EDGE_CURVE('',#4694,#4703,#4705,.T.); +#4703 = VERTEX_POINT('',#4704); +#4704 = CARTESIAN_POINT('',(43.993521558647,36.,89.401831678635)); +#4705 = CIRCLE('',#4706,23.45); +#4706 = AXIS2_PLACEMENT_3D('',#4707,#4708,#4709); +#4707 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4708 = DIRECTION('',(0.,-1.,0.)); +#4709 = DIRECTION('',(0.,0.,-1.)); +#4710 = ORIENTED_EDGE('',*,*,#4711,.F.); +#4711 = EDGE_CURVE('',#4712,#4703,#4714,.T.); +#4712 = VERTEX_POINT('',#4713); +#4713 = CARTESIAN_POINT('',(40.774408684598,36.,83.826164625483)); +#4714 = CIRCLE('',#4715,3.25); +#4715 = AXIS2_PLACEMENT_3D('',#4716,#4717,#4718); +#4716 = CARTESIAN_POINT('',(41.996848565403,36.,86.8375)); +#4717 = DIRECTION('',(0.,-1.,0.)); +#4718 = DIRECTION('',(0.,0.,-1.)); +#4719 = ORIENTED_EDGE('',*,*,#4720,.T.); +#4720 = EDGE_CURVE('',#4712,#4721,#4723,.T.); +#4721 = VERTEX_POINT('',#4722); +#4722 = CARTESIAN_POINT('',(40.774408684598,36.,66.173835374517)); +#4723 = CIRCLE('',#4724,23.45); +#4724 = AXIS2_PLACEMENT_3D('',#4725,#4726,#4727); +#4725 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4726 = DIRECTION('',(0.,-1.,0.)); +#4727 = DIRECTION('',(0.,0.,-1.)); +#4728 = ORIENTED_EDGE('',*,*,#4729,.F.); +#4729 = EDGE_CURVE('',#4730,#4721,#4732,.T.); +#4730 = VERTEX_POINT('',#4731); +#4731 = CARTESIAN_POINT('',(43.993521558647,36.,60.598168321365)); +#4732 = CIRCLE('',#4733,3.25); +#4733 = AXIS2_PLACEMENT_3D('',#4734,#4735,#4736); +#4734 = CARTESIAN_POINT('',(41.996848565403,36.,63.1625)); +#4735 = DIRECTION('',(0.,-1.,0.)); +#4736 = DIRECTION('',(0.,0.,-1.)); +#4737 = ORIENTED_EDGE('',*,*,#4738,.T.); +#4738 = EDGE_CURVE('',#4730,#4622,#4739,.T.); +#4739 = CIRCLE('',#4740,23.45); +#4740 = AXIS2_PLACEMENT_3D('',#4741,#4742,#4743); +#4741 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4742 = DIRECTION('',(0.,-1.,0.)); +#4743 = DIRECTION('',(0.,0.,-1.)); +#4744 = FACE_BOUND('',#4745,.T.); +#4745 = EDGE_LOOP('',(#4746,#4747)); +#4746 = ORIENTED_EDGE('',*,*,#3955,.T.); +#4747 = ORIENTED_EDGE('',*,*,#4024,.T.); +#4748 = PLANE('',#4749); +#4749 = AXIS2_PLACEMENT_3D('',#4750,#4751,#4752); +#4750 = CARTESIAN_POINT('',(62.5,36.,75.)); +#4751 = DIRECTION('',(0.,-1.,0.)); +#4752 = DIRECTION('',(1.,0.,0.)); +#4753 = ADVANCED_FACE('',(#4754),#4778,.T.); +#4754 = FACE_BOUND('',#4755,.T.); +#4755 = EDGE_LOOP('',(#4756,#4762,#4763,#4769,#4770,#4777)); +#4756 = ORIENTED_EDGE('',*,*,#4757,.F.); +#4757 = EDGE_CURVE('',#3880,#3688,#4758,.T.); +#4758 = LINE('',#4759,#4760); +#4759 = CARTESIAN_POINT('',(87.921767387346,56.1,79.954164198296)); +#4760 = VECTOR('',#4761,1.); +#4761 = DIRECTION('',(0.,-1.,0.)); +#4762 = ORIENTED_EDGE('',*,*,#3879,.F.); +#4763 = ORIENTED_EDGE('',*,*,#4764,.T.); +#4764 = EDGE_CURVE('',#3872,#3706,#4765,.T.); +#4765 = LINE('',#4766,#4767); +#4766 = CARTESIAN_POINT('',(79.501315743916,56.85,94.538814267393)); +#4767 = VECTOR('',#4768,1.); +#4768 = DIRECTION('',(0.,-1.,0.)); +#4769 = ORIENTED_EDGE('',*,*,#3705,.T.); +#4770 = ORIENTED_EDGE('',*,*,#4771,.T.); +#4771 = EDGE_CURVE('',#3697,#3686,#4772,.T.); +#4772 = CIRCLE('',#4773,25.9); +#4773 = AXIS2_PLACEMENT_3D('',#4774,#4775,#4776); +#4774 = CARTESIAN_POINT('',(62.5,39.7,75.)); +#4775 = DIRECTION('',(0.,1.,0.)); +#4776 = DIRECTION('',(0.,-0.,1.)); +#4777 = ORIENTED_EDGE('',*,*,#3685,.T.); +#4778 = CYLINDRICAL_SURFACE('',#4779,25.9); +#4779 = AXIS2_PLACEMENT_3D('',#4780,#4781,#4782); +#4780 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#4781 = DIRECTION('',(0.,-1.,0.)); +#4782 = DIRECTION('',(1.,0.,0.)); +#4783 = ADVANCED_FACE('',(#4784),#4809,.T.); +#4784 = FACE_BOUND('',#4785,.T.); +#4785 = EDGE_LOOP('',(#4786,#4794,#4795,#4803)); +#4786 = ORIENTED_EDGE('',*,*,#4787,.F.); +#4787 = EDGE_CURVE('',#4428,#4788,#4790,.T.); +#4788 = VERTEX_POINT('',#4789); +#4789 = CARTESIAN_POINT('',(21.25,38.345084971875,16.349483590768)); +#4790 = LINE('',#4791,#4792); +#4791 = CARTESIAN_POINT('',(75.,38.345084971875,16.349483590768)); +#4792 = VECTOR('',#4793,1.); +#4793 = DIRECTION('',(1.,0.,0.)); +#4794 = ORIENTED_EDGE('',*,*,#4427,.T.); +#4795 = ORIENTED_EDGE('',*,*,#4796,.F.); +#4796 = EDGE_CURVE('',#4797,#4420,#4799,.T.); +#4797 = VERTEX_POINT('',#4798); +#4798 = CARTESIAN_POINT('',(21.25,51.014781741248,20.466117616436)); +#4799 = LINE('',#4800,#4801); +#4800 = CARTESIAN_POINT('',(75.,51.014781741248,20.466117616436)); +#4801 = VECTOR('',#4802,1.); +#4802 = DIRECTION('',(-1.,0.,0.)); +#4803 = ORIENTED_EDGE('',*,*,#4804,.T.); +#4804 = EDGE_CURVE('',#4797,#4788,#4805,.T.); +#4805 = LINE('',#4806,#4807); +#4806 = CARTESIAN_POINT('',(21.25,41.989790875077,17.533720325695)); +#4807 = VECTOR('',#4808,1.); +#4808 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4809 = PLANE('',#4810); +#4810 = AXIS2_PLACEMENT_3D('',#4811,#4812,#4813); +#4811 = CARTESIAN_POINT('',(75.,70.185875842949,26.695183688413)); +#4812 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4813 = DIRECTION('',(-1.,0.,0.)); +#4814 = ADVANCED_FACE('',(#4815),#4840,.T.); +#4815 = FACE_BOUND('',#4816,.T.); +#4816 = EDGE_LOOP('',(#4817,#4825,#4826,#4834)); +#4817 = ORIENTED_EDGE('',*,*,#4818,.T.); +#4818 = EDGE_CURVE('',#4819,#3589,#4821,.T.); +#4819 = VERTEX_POINT('',#4820); +#4820 = CARTESIAN_POINT('',(24.636554932292,49.438795069935, + 25.316505849541)); +#4821 = LINE('',#4822,#4823); +#4822 = CARTESIAN_POINT('',(25.008178294932,50.825712340589, + 25.767142587822)); +#4823 = VECTOR('',#4824,1.); +#4824 = DIRECTION('',(-0.246942617606,-0.92160239546,-0.299446770381)); +#4825 = ORIENTED_EDGE('',*,*,#3588,.T.); +#4826 = ORIENTED_EDGE('',*,*,#4827,.T.); +#4827 = EDGE_CURVE('',#3581,#4828,#4830,.T.); +#4828 = VERTEX_POINT('',#4829); +#4829 = CARTESIAN_POINT('',(21.25,49.438795069935,25.316505849541)); +#4830 = LINE('',#4831,#4832); +#4831 = CARTESIAN_POINT('',(21.25,40.413804203765,22.3841085588)); +#4832 = VECTOR('',#4833,1.); +#4833 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4834 = ORIENTED_EDGE('',*,*,#4835,.T.); +#4835 = EDGE_CURVE('',#4828,#4819,#4836,.T.); +#4836 = LINE('',#4837,#4838); +#4837 = CARTESIAN_POINT('',(62.5,49.438795069935,25.316505849541)); +#4838 = VECTOR('',#4839,1.); +#4839 = DIRECTION('',(1.,0.,0.)); +#4840 = PLANE('',#4841); +#4841 = AXIS2_PLACEMENT_3D('',#4842,#4843,#4844); +#4842 = CARTESIAN_POINT('',(62.5,32.494098300562,19.810840122478)); +#4843 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4844 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4845 = ADVANCED_FACE('',(#4846),#4856,.T.); +#4846 = FACE_BOUND('',#4847,.T.); +#4847 = EDGE_LOOP('',(#4848,#4849,#4855)); +#4848 = ORIENTED_EDGE('',*,*,#4818,.F.); +#4849 = ORIENTED_EDGE('',*,*,#4850,.T.); +#4850 = EDGE_CURVE('',#4819,#3597,#4851,.T.); +#4851 = LINE('',#4852,#4853); +#4852 = CARTESIAN_POINT('',(20.638509940861,34.517888030969, + 71.23833580309)); +#4853 = VECTOR('',#4854,1.); +#4854 = DIRECTION('',(-8.251846474622E-02,-0.307963102995,0.947812972147 + )); +#4855 = ORIENTED_EDGE('',*,*,#3596,.T.); +#4856 = PLANE('',#4857); +#4857 = AXIS2_PLACEMENT_3D('',#4858,#4859,#4860); +#4858 = CARTESIAN_POINT('',(21.25,36.8,72.03307646015)); +#4859 = DIRECTION('',(0.965925826289,-0.258819045103,0.)); +#4860 = DIRECTION('',(0.258819045103,0.965925826289,0.)); +#4861 = ADVANCED_FACE('',(#4862),#4880,.F.); +#4862 = FACE_BOUND('',#4863,.T.); +#4863 = EDGE_LOOP('',(#4864,#4870,#4871,#4872,#4873,#4879)); +#4864 = ORIENTED_EDGE('',*,*,#4865,.T.); +#4865 = EDGE_CURVE('',#4797,#4828,#4866,.T.); +#4866 = LINE('',#4867,#4868); +#4867 = CARTESIAN_POINT('',(21.25,41.549990866171,49.595748675467)); +#4868 = VECTOR('',#4869,1.); +#4869 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4870 = ORIENTED_EDGE('',*,*,#4827,.F.); +#4871 = ORIENTED_EDGE('',*,*,#3580,.T.); +#4872 = ORIENTED_EDGE('',*,*,#4513,.F.); +#4873 = ORIENTED_EDGE('',*,*,#4874,.F.); +#4874 = EDGE_CURVE('',#4788,#4506,#4875,.T.); +#4875 = LINE('',#4876,#4877); +#4876 = CARTESIAN_POINT('',(21.25,36.8,21.104766172244)); +#4877 = VECTOR('',#4878,1.); +#4878 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4879 = ORIENTED_EDGE('',*,*,#4804,.F.); +#4880 = PLANE('',#4881); +#4881 = AXIS2_PLACEMENT_3D('',#4882,#4883,#4884); +#4882 = CARTESIAN_POINT('',(21.25,32.525,46.663351384726)); +#4883 = DIRECTION('',(-1.,0.,0.)); +#4884 = DIRECTION('',(0.,0.,1.)); +#4885 = ADVANCED_FACE('',(#4886),#4892,.T.); +#4886 = FACE_BOUND('',#4887,.T.); +#4887 = EDGE_LOOP('',(#4888,#4889,#4890,#4891)); +#4888 = ORIENTED_EDGE('',*,*,#4874,.T.); +#4889 = ORIENTED_EDGE('',*,*,#4505,.T.); +#4890 = ORIENTED_EDGE('',*,*,#4435,.T.); +#4891 = ORIENTED_EDGE('',*,*,#4787,.T.); +#4892 = PLANE('',#4893); +#4893 = AXIS2_PLACEMENT_3D('',#4894,#4895,#4896); +#4894 = CARTESIAN_POINT('',(69.90038168495,36.8,21.104766172244)); +#4895 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4896 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4897 = ADVANCED_FACE('',(#4898),#4906,.F.); +#4898 = FACE_BOUND('',#4899,.T.); +#4899 = EDGE_LOOP('',(#4900,#4901,#4902,#4903,#4904,#4905)); +#4900 = ORIENTED_EDGE('',*,*,#4835,.F.); +#4901 = ORIENTED_EDGE('',*,*,#4865,.F.); +#4902 = ORIENTED_EDGE('',*,*,#4796,.T.); +#4903 = ORIENTED_EDGE('',*,*,#4419,.T.); +#4904 = ORIENTED_EDGE('',*,*,#3604,.F.); +#4905 = ORIENTED_EDGE('',*,*,#4850,.F.); +#4906 = PLANE('',#4907); +#4907 = AXIS2_PLACEMENT_3D('',#4908,#4909,#4910); +#4908 = CARTESIAN_POINT('',(62.5,36.8,64.214717366013)); +#4909 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4910 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4911 = ADVANCED_FACE('',(#4912),#4937,.T.); +#4912 = FACE_BOUND('',#4913,.T.); +#4913 = EDGE_LOOP('',(#4914,#4922,#4923,#4931)); +#4914 = ORIENTED_EDGE('',*,*,#4915,.F.); +#4915 = EDGE_CURVE('',#4475,#4916,#4918,.T.); +#4916 = VERTEX_POINT('',#4917); +#4917 = CARTESIAN_POINT('',(103.75,51.014781741248,20.466117616436)); +#4918 = LINE('',#4919,#4920); +#4919 = CARTESIAN_POINT('',(62.5,51.014781741248,20.466117616436)); +#4920 = VECTOR('',#4921,1.); +#4921 = DIRECTION('',(-1.,0.,0.)); +#4922 = ORIENTED_EDGE('',*,*,#4474,.T.); +#4923 = ORIENTED_EDGE('',*,*,#4924,.T.); +#4924 = EDGE_CURVE('',#4467,#4925,#4927,.T.); +#4925 = VERTEX_POINT('',#4926); +#4926 = CARTESIAN_POINT('',(103.75,39.771669746317,16.81300908233)); +#4927 = LINE('',#4928,#4929); +#4928 = CARTESIAN_POINT('',(69.90038168495,39.771669746317, + 16.81300908233)); +#4929 = VECTOR('',#4930,1.); +#4930 = DIRECTION('',(-1.,0.,0.)); +#4931 = ORIENTED_EDGE('',*,*,#4932,.F.); +#4932 = EDGE_CURVE('',#4916,#4925,#4933,.T.); +#4933 = LINE('',#4934,#4935); +#4934 = CARTESIAN_POINT('',(103.75,41.989790875077,17.533720325695)); +#4935 = VECTOR('',#4936,1.); +#4936 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4937 = PLANE('',#4938); +#4938 = AXIS2_PLACEMENT_3D('',#4939,#4940,#4941); +#4939 = CARTESIAN_POINT('',(75.,70.185875842949,26.695183688413)); +#4940 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4941 = DIRECTION('',(-1.,0.,0.)); +#4942 = ADVANCED_FACE('',(#4943),#4968,.T.); +#4943 = FACE_BOUND('',#4944,.T.); +#4944 = EDGE_LOOP('',(#4945,#4955,#4961,#4962)); +#4945 = ORIENTED_EDGE('',*,*,#4946,.T.); +#4946 = EDGE_CURVE('',#4947,#4949,#4951,.T.); +#4947 = VERTEX_POINT('',#4948); +#4948 = CARTESIAN_POINT('',(100.3634450677,49.438795069935, + 25.316505849541)); +#4949 = VERTEX_POINT('',#4950); +#4950 = CARTESIAN_POINT('',(103.75,49.438795069935,25.316505849541)); +#4951 = LINE('',#4952,#4953); +#4952 = CARTESIAN_POINT('',(62.5,49.438795069935,25.316505849541)); +#4953 = VECTOR('',#4954,1.); +#4954 = DIRECTION('',(1.,0.,0.)); +#4955 = ORIENTED_EDGE('',*,*,#4956,.T.); +#4956 = EDGE_CURVE('',#4949,#3557,#4957,.T.); +#4957 = LINE('',#4958,#4959); +#4958 = CARTESIAN_POINT('',(103.75,40.413804203765,22.3841085588)); +#4959 = VECTOR('',#4960,1.); +#4960 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#4961 = ORIENTED_EDGE('',*,*,#3556,.T.); +#4962 = ORIENTED_EDGE('',*,*,#4963,.T.); +#4963 = EDGE_CURVE('',#3549,#4947,#4964,.T.); +#4964 = LINE('',#4965,#4966); +#4965 = CARTESIAN_POINT('',(99.991821705068,50.825712340589, + 25.767142587822)); +#4966 = VECTOR('',#4967,1.); +#4967 = DIRECTION('',(-0.246942617606,0.92160239546,0.299446770381)); +#4968 = PLANE('',#4969); +#4969 = AXIS2_PLACEMENT_3D('',#4970,#4971,#4972); +#4970 = CARTESIAN_POINT('',(62.5,32.494098300562,19.810840122478)); +#4971 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#4972 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#4973 = ADVANCED_FACE('',(#4974),#4992,.F.); +#4974 = FACE_BOUND('',#4975,.T.); +#4975 = EDGE_LOOP('',(#4976,#4977,#4978,#4984,#4985,#4991)); +#4976 = ORIENTED_EDGE('',*,*,#3564,.T.); +#4977 = ORIENTED_EDGE('',*,*,#4956,.F.); +#4978 = ORIENTED_EDGE('',*,*,#4979,.F.); +#4979 = EDGE_CURVE('',#4916,#4949,#4980,.T.); +#4980 = LINE('',#4981,#4982); +#4981 = CARTESIAN_POINT('',(103.75,36.8,64.214717366013)); +#4982 = VECTOR('',#4983,1.); +#4983 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4984 = ORIENTED_EDGE('',*,*,#4932,.T.); +#4985 = ORIENTED_EDGE('',*,*,#4986,.T.); +#4986 = EDGE_CURVE('',#4925,#4521,#4987,.T.); +#4987 = LINE('',#4988,#4989); +#4988 = CARTESIAN_POINT('',(103.75,38.226584774443,21.568291663806)); +#4989 = VECTOR('',#4990,1.); +#4990 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#4991 = ORIENTED_EDGE('',*,*,#4520,.F.); +#4992 = PLANE('',#4993); +#4993 = AXIS2_PLACEMENT_3D('',#4994,#4995,#4996); +#4994 = CARTESIAN_POINT('',(103.75,32.525,46.663351384726)); +#4995 = DIRECTION('',(1.,0.,0.)); +#4996 = DIRECTION('',(0.,0.,-1.)); +#4997 = ADVANCED_FACE('',(#4998),#5004,.T.); +#4998 = FACE_BOUND('',#4999,.T.); +#4999 = EDGE_LOOP('',(#5000,#5001,#5002,#5003)); +#5000 = ORIENTED_EDGE('',*,*,#4528,.T.); +#5001 = ORIENTED_EDGE('',*,*,#4986,.F.); +#5002 = ORIENTED_EDGE('',*,*,#4924,.F.); +#5003 = ORIENTED_EDGE('',*,*,#4466,.T.); +#5004 = PLANE('',#5005); +#5005 = AXIS2_PLACEMENT_3D('',#5006,#5007,#5008); +#5006 = CARTESIAN_POINT('',(69.90038168495,38.226584774443, + 21.568291663806)); +#5007 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#5008 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#5009 = ADVANCED_FACE('',(#5010),#5020,.T.); +#5010 = FACE_BOUND('',#5011,.T.); +#5011 = EDGE_LOOP('',(#5012,#5013,#5014)); +#5012 = ORIENTED_EDGE('',*,*,#4963,.F.); +#5013 = ORIENTED_EDGE('',*,*,#3548,.T.); +#5014 = ORIENTED_EDGE('',*,*,#5015,.F.); +#5015 = EDGE_CURVE('',#4947,#3539,#5016,.T.); +#5016 = LINE('',#5017,#5018); +#5017 = CARTESIAN_POINT('',(103.46911649775,37.848271501379, + 60.988469423729)); +#5018 = VECTOR('',#5019,1.); +#5019 = DIRECTION('',(8.251846474622E-02,-0.307963102995,0.947812972147) + ); +#5020 = PLANE('',#5021); +#5021 = AXIS2_PLACEMENT_3D('',#5022,#5023,#5024); +#5022 = CARTESIAN_POINT('',(103.75,36.8,72.03307646015)); +#5023 = DIRECTION('',(-0.965925826289,-0.258819045103,0.)); +#5024 = DIRECTION('',(0.258819045103,-0.965925826289,0.)); +#5025 = ADVANCED_FACE('',(#5026),#5034,.F.); +#5026 = FACE_BOUND('',#5027,.T.); +#5027 = EDGE_LOOP('',(#5028,#5029,#5030,#5031,#5032,#5033)); +#5028 = ORIENTED_EDGE('',*,*,#4946,.F.); +#5029 = ORIENTED_EDGE('',*,*,#5015,.T.); +#5030 = ORIENTED_EDGE('',*,*,#3538,.T.); +#5031 = ORIENTED_EDGE('',*,*,#4482,.F.); +#5032 = ORIENTED_EDGE('',*,*,#4915,.T.); +#5033 = ORIENTED_EDGE('',*,*,#4979,.T.); +#5034 = PLANE('',#5035); +#5035 = AXIS2_PLACEMENT_3D('',#5036,#5037,#5038); +#5036 = CARTESIAN_POINT('',(62.5,36.8,64.214717366013)); +#5037 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#5038 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#5039 = ADVANCED_FACE('',(#5040),#5197,.F.); +#5040 = FACE_BOUND('',#5041,.F.); +#5041 = EDGE_LOOP('',(#5042,#5113,#5118,#5119,#5126,#5127,#5196)); +#5042 = ORIENTED_EDGE('',*,*,#5043,.F.); +#5043 = EDGE_CURVE('',#5044,#4712,#5046,.T.); +#5044 = VERTEX_POINT('',#5045); +#5045 = CARTESIAN_POINT('',(41.410043404293,35.877499979886, + 90.034085632029)); +#5046 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5047,#5048,#5049,#5050,#5051, + #5052,#5053,#5054,#5055,#5056,#5057,#5058,#5059,#5060,#5061,#5062, + #5063,#5064,#5065,#5066,#5067,#5068,#5069,#5070,#5071,#5072,#5073, + #5074,#5075,#5076,#5077,#5078,#5079,#5080,#5081,#5082,#5083,#5084, + #5085,#5086,#5087,#5088,#5089,#5090,#5091,#5092,#5093,#5094,#5095, + #5096,#5097,#5098,#5099,#5100,#5101,#5102,#5103,#5104,#5105,#5106, + #5107,#5108,#5109,#5110,#5111,#5112),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.25E-02,9.375E-02,0.109375,0.125,0.1875,0.203125,0.21875,0.25, + 0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875,0.484375,0.5, + 0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75,0.78125,0.796875, + 0.8125,0.875,0.890625,0.90625,0.9375,0.96875,0.984375,1.), + .UNSPECIFIED.); +#5047 = CARTESIAN_POINT('',(43.993521558647,36.,89.401831678635)); +#5048 = CARTESIAN_POINT('',(43.809328124535,35.988327784495, + 89.545250745087)); +#5049 = CARTESIAN_POINT('',(43.613196288433,35.976868393202, + 89.666455813674)); +#5050 = CARTESIAN_POINT('',(43.30178960995,35.959969900701, + 89.816240775835)); +#5051 = CARTESIAN_POINT('',(43.195094413244,35.954385628555, + 89.860785780319)); +#5052 = CARTESIAN_POINT('',(43.030573151534,35.946079545981, + 89.919269132392)); +#5053 = CARTESIAN_POINT('',(42.974985270426,35.943323007823, + 89.937357836305)); +#5054 = CARTESIAN_POINT('',(42.863656614161,35.937899043987, + 89.970312446608)); +#5055 = CARTESIAN_POINT('',(42.807748716498,35.935223085488, + 89.98524096515)); +#5056 = CARTESIAN_POINT('',(42.527011918286,35.922017698398, + 90.052269453453)); +#5057 = CARTESIAN_POINT('',(42.298631628151,35.912006458978, + 90.081785169546)); +#5058 = CARTESIAN_POINT('',(42.00833390722,35.900144942568, + 90.087998506663)); +#5059 = CARTESIAN_POINT('',(41.949852153443,35.897798638115, + 90.087681608756)); +#5060 = CARTESIAN_POINT('',(41.833480287726,35.89321485547, + 90.083913399197)); +#5061 = CARTESIAN_POINT('',(41.775579841301,35.890976614149, + 90.08047470028)); +#5062 = CARTESIAN_POINT('',(41.60271826092,35.88441756872, + 90.065586170284)); +#5063 = CARTESIAN_POINT('',(41.374470888401,35.876086426533, + 90.033566816811)); +#5064 = CARTESIAN_POINT('',(41.150633179026,35.868550355614, + 89.977541422032)); +#5065 = CARTESIAN_POINT('',(40.929046288526,35.861408965919, + 89.909264787498)); +#5066 = CARTESIAN_POINT('',(40.81891955957,35.858023731485, + 89.868740879825)); +#5067 = CARTESIAN_POINT('',(40.499462847859,35.848682940493, + 89.73130166392)); +#5068 = CARTESIAN_POINT('',(40.298747618432,35.843456723333, + 89.618246452913)); +#5069 = CARTESIAN_POINT('',(40.063108360676,35.83812642416, + 89.45025691071)); +#5070 = CARTESIAN_POINT('',(40.016751369282,35.837121188194, + 89.415311274511)); +#5071 = CARTESIAN_POINT('',(39.925611002169,35.835233994434, + 89.342668822601)); +#5072 = CARTESIAN_POINT('',(39.880862767657,35.834353113257, + 89.304984473593)); +#5073 = CARTESIAN_POINT('',(39.750601653686,35.831926086469, + 89.189175340335)); +#5074 = CARTESIAN_POINT('',(39.586397758999,35.829239807643, + 89.026561889257)); +#5075 = CARTESIAN_POINT('',(39.440685968301,35.827616782789, + 88.847946710631)); +#5076 = CARTESIAN_POINT('',(39.338401867383,35.826799796878, + 88.707928280785)); +#5077 = CARTESIAN_POINT('',(39.305476227941,35.82659433604, + 88.660243854079)); +#5078 = CARTESIAN_POINT('',(39.2420045742,35.826319335585, + 88.562815855307)); +#5079 = CARTESIAN_POINT('',(39.211374685326,35.826249980723, + 88.512918593481)); +#5080 = CARTESIAN_POINT('',(39.065770094604,35.826250077128, + 88.260719658958)); +#5081 = CARTESIAN_POINT('',(38.972579688487,35.827337605585, + 88.049777943837)); +#5082 = CARTESIAN_POINT('',(38.866815711848,35.830568786143, + 87.719953595899)); +#5083 = CARTESIAN_POINT('',(38.83724850579,35.83191711791, + 87.607607115363)); +#5084 = CARTESIAN_POINT('',(38.790124899604,35.835169124854, + 87.378850937053)); +#5085 = CARTESIAN_POINT('',(38.772920249908,35.837046725686, + 87.264231552011)); +#5086 = CARTESIAN_POINT('',(38.739702327362,35.843417265204, + 86.919675347568)); +#5087 = CARTESIAN_POINT('',(38.741877891957,35.848638668452, + 86.689048320743)); +#5088 = CARTESIAN_POINT('',(38.775960451833,35.856466230992, + 86.399575338682)); +#5089 = CARTESIAN_POINT('',(38.784357761208,35.85809460243, + 86.341745030695)); +#5090 = CARTESIAN_POINT('',(38.804112288187,35.861445246629, + 86.227331809432)); +#5091 = CARTESIAN_POINT('',(38.815487042754,35.863171826457, + 86.170587359875)); +#5092 = CARTESIAN_POINT('',(38.854030882596,35.868504814426, + 86.001718065495)); +#5093 = CARTESIAN_POINT('',(38.917183661538,35.876023239352, + 85.780188907927)); +#5094 = CARTESIAN_POINT('',(39.003694367855,35.884373270233, + 85.565869678601)); +#5095 = CARTESIAN_POINT('',(39.077576920021,35.890964774783, + 85.407908452873)); +#5096 = CARTESIAN_POINT('',(39.103785926235,35.893223162599, + 85.355585126139)); +#5097 = CARTESIAN_POINT('',(39.158664743883,35.89780303301, + 85.253014050935)); +#5098 = CARTESIAN_POINT('',(39.18737232662,35.900128314399, + 85.202665571358)); +#5099 = CARTESIAN_POINT('',(39.337131135436,35.911931584373, + 84.955520000506)); +#5100 = CARTESIAN_POINT('',(39.476635190884,35.921934573152, + 84.772358340959)); +#5101 = CARTESIAN_POINT('',(39.675870503734,35.935196592727, + 84.561775404939)); +#5102 = CARTESIAN_POINT('',(39.717058674321,35.937892738142, + 84.520506951666)); +#5103 = CARTESIAN_POINT('',(39.80162328371,35.943339829175, + 84.440233912114)); +#5104 = CARTESIAN_POINT('',(39.84479916959,35.946078047149, + 84.401410306926)); +#5105 = CARTESIAN_POINT('',(39.97694958829,35.954337236849, + 84.288793170812)); +#5106 = CARTESIAN_POINT('',(40.160129544625,35.965468140979, + 84.148891981541)); +#5107 = CARTESIAN_POINT('',(40.357024519407,35.976844690086, + 84.029143673615)); +#5108 = CARTESIAN_POINT('',(40.509924045407,35.985473796174, + 83.947015177124)); +#5109 = CARTESIAN_POINT('',(40.561763758998,35.988366295933, + 83.920922143764)); +#5110 = CARTESIAN_POINT('',(40.667227093478,35.994184521815, + 83.871357465587)); +#5111 = CARTESIAN_POINT('',(40.720681217057,35.997100717097, + 83.847975081925)); +#5112 = CARTESIAN_POINT('',(40.774408684598,36.,83.826164625483)); +#5113 = ORIENTED_EDGE('',*,*,#5114,.T.); +#5114 = EDGE_CURVE('',#5044,#3740,#5115,.T.); +#5115 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5116,#5117),.UNSPECIFIED.,.F., + .F.,(2,2),(3.389999979886,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5116 = CARTESIAN_POINT('',(41.410043404293,35.877499979886, + 90.034085632029)); +#5117 = CARTESIAN_POINT('',(41.410043404293,39.7,90.034085632029)); +#5118 = ORIENTED_EDGE('',*,*,#3748,.T.); +#5119 = ORIENTED_EDGE('',*,*,#5120,.T.); +#5120 = EDGE_CURVE('',#3749,#3740,#5121,.T.); +#5121 = CIRCLE('',#5122,3.25); +#5122 = AXIS2_PLACEMENT_3D('',#5123,#5124,#5125); +#5123 = CARTESIAN_POINT('',(41.996848565403,39.7,86.8375)); +#5124 = DIRECTION('',(0.,-1.,0.)); +#5125 = DIRECTION('',(0.,0.,1.)); +#5126 = ORIENTED_EDGE('',*,*,#5114,.F.); +#5127 = ORIENTED_EDGE('',*,*,#5128,.F.); +#5128 = EDGE_CURVE('',#4703,#5044,#5129,.T.); +#5129 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5130,#5131,#5132,#5133,#5134, + #5135,#5136,#5137,#5138,#5139,#5140,#5141,#5142,#5143,#5144,#5145, + #5146,#5147,#5148,#5149,#5150,#5151,#5152,#5153,#5154,#5155,#5156, + #5157,#5158,#5159,#5160,#5161,#5162,#5163,#5164,#5165,#5166,#5167, + #5168,#5169,#5170,#5171,#5172,#5173,#5174,#5175,#5176,#5177,#5178, + #5179,#5180,#5181,#5182,#5183,#5184,#5185,#5186,#5187,#5188,#5189, + #5190,#5191,#5192,#5193,#5194,#5195),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.25E-02,9.375E-02,0.109375,0.125,0.1875,0.203125,0.21875,0.25, + 0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875,0.484375,0.5, + 0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75,0.78125,0.796875, + 0.8125,0.875,0.890625,0.90625,0.9375,0.96875,0.984375,1.), + .UNSPECIFIED.); +#5130 = CARTESIAN_POINT('',(43.993521558647,36.,89.401831678635)); +#5131 = CARTESIAN_POINT('',(43.809328124535,35.988327784495, + 89.545250745087)); +#5132 = CARTESIAN_POINT('',(43.613196288433,35.976868393202, + 89.666455813674)); +#5133 = CARTESIAN_POINT('',(43.30178960995,35.959969900701, + 89.816240775835)); +#5134 = CARTESIAN_POINT('',(43.195094413244,35.954385628555, + 89.860785780319)); +#5135 = CARTESIAN_POINT('',(43.030573151534,35.946079545981, + 89.919269132392)); +#5136 = CARTESIAN_POINT('',(42.974985270426,35.943323007823, + 89.937357836305)); +#5137 = CARTESIAN_POINT('',(42.863656614161,35.937899043987, + 89.970312446608)); +#5138 = CARTESIAN_POINT('',(42.807748716498,35.935223085488, + 89.98524096515)); +#5139 = CARTESIAN_POINT('',(42.527011918286,35.922017698398, + 90.052269453453)); +#5140 = CARTESIAN_POINT('',(42.298631628151,35.912006458978, + 90.081785169546)); +#5141 = CARTESIAN_POINT('',(42.00833390722,35.900144942568, + 90.087998506663)); +#5142 = CARTESIAN_POINT('',(41.949852153443,35.897798638115, + 90.087681608756)); +#5143 = CARTESIAN_POINT('',(41.833480287726,35.89321485547, + 90.083913399197)); +#5144 = CARTESIAN_POINT('',(41.775579841301,35.890976614149, + 90.08047470028)); +#5145 = CARTESIAN_POINT('',(41.60271826092,35.88441756872, + 90.065586170284)); +#5146 = CARTESIAN_POINT('',(41.374470888401,35.876086426533, + 90.033566816811)); +#5147 = CARTESIAN_POINT('',(41.150633179026,35.868550355614, + 89.977541422032)); +#5148 = CARTESIAN_POINT('',(40.929046288526,35.861408965919, + 89.909264787498)); +#5149 = CARTESIAN_POINT('',(40.81891955957,35.858023731485, + 89.868740879825)); +#5150 = CARTESIAN_POINT('',(40.499462847859,35.848682940493, + 89.73130166392)); +#5151 = CARTESIAN_POINT('',(40.298747618432,35.843456723333, + 89.618246452913)); +#5152 = CARTESIAN_POINT('',(40.063108360676,35.83812642416, + 89.45025691071)); +#5153 = CARTESIAN_POINT('',(40.016751369282,35.837121188194, + 89.415311274511)); +#5154 = CARTESIAN_POINT('',(39.925611002169,35.835233994434, + 89.342668822601)); +#5155 = CARTESIAN_POINT('',(39.880862767657,35.834353113257, + 89.304984473593)); +#5156 = CARTESIAN_POINT('',(39.750601653686,35.831926086469, + 89.189175340335)); +#5157 = CARTESIAN_POINT('',(39.586397758999,35.829239807643, + 89.026561889257)); +#5158 = CARTESIAN_POINT('',(39.440685968301,35.827616782789, + 88.847946710631)); +#5159 = CARTESIAN_POINT('',(39.338401867383,35.826799796878, + 88.707928280785)); +#5160 = CARTESIAN_POINT('',(39.305476227941,35.82659433604, + 88.660243854079)); +#5161 = CARTESIAN_POINT('',(39.2420045742,35.826319335585, + 88.562815855307)); +#5162 = CARTESIAN_POINT('',(39.211374685326,35.826249980723, + 88.512918593481)); +#5163 = CARTESIAN_POINT('',(39.065770094604,35.826250077128, + 88.260719658958)); +#5164 = CARTESIAN_POINT('',(38.972579688487,35.827337605585, + 88.049777943837)); +#5165 = CARTESIAN_POINT('',(38.866815711848,35.830568786143, + 87.719953595899)); +#5166 = CARTESIAN_POINT('',(38.83724850579,35.83191711791, + 87.607607115363)); +#5167 = CARTESIAN_POINT('',(38.790124899604,35.835169124854, + 87.378850937053)); +#5168 = CARTESIAN_POINT('',(38.772920249908,35.837046725686, + 87.264231552011)); +#5169 = CARTESIAN_POINT('',(38.739702327362,35.843417265204, + 86.919675347568)); +#5170 = CARTESIAN_POINT('',(38.741877891957,35.848638668452, + 86.689048320743)); +#5171 = CARTESIAN_POINT('',(38.775960451833,35.856466230992, + 86.399575338682)); +#5172 = CARTESIAN_POINT('',(38.784357761208,35.85809460243, + 86.341745030695)); +#5173 = CARTESIAN_POINT('',(38.804112288187,35.861445246629, + 86.227331809432)); +#5174 = CARTESIAN_POINT('',(38.815487042754,35.863171826457, + 86.170587359875)); +#5175 = CARTESIAN_POINT('',(38.854030882596,35.868504814426, + 86.001718065495)); +#5176 = CARTESIAN_POINT('',(38.917183661538,35.876023239352, + 85.780188907927)); +#5177 = CARTESIAN_POINT('',(39.003694367855,35.884373270233, + 85.565869678601)); +#5178 = CARTESIAN_POINT('',(39.077576920021,35.890964774783, + 85.407908452873)); +#5179 = CARTESIAN_POINT('',(39.103785926235,35.893223162599, + 85.355585126139)); +#5180 = CARTESIAN_POINT('',(39.158664743883,35.89780303301, + 85.253014050935)); +#5181 = CARTESIAN_POINT('',(39.18737232662,35.900128314399, + 85.202665571358)); +#5182 = CARTESIAN_POINT('',(39.337131135436,35.911931584373, + 84.955520000506)); +#5183 = CARTESIAN_POINT('',(39.476635190884,35.921934573152, + 84.772358340959)); +#5184 = CARTESIAN_POINT('',(39.675870503734,35.935196592727, + 84.561775404939)); +#5185 = CARTESIAN_POINT('',(39.717058674321,35.937892738142, + 84.520506951666)); +#5186 = CARTESIAN_POINT('',(39.80162328371,35.943339829175, + 84.440233912114)); +#5187 = CARTESIAN_POINT('',(39.84479916959,35.946078047149, + 84.401410306926)); +#5188 = CARTESIAN_POINT('',(39.97694958829,35.954337236849, + 84.288793170812)); +#5189 = CARTESIAN_POINT('',(40.160129544625,35.965468140979, + 84.148891981541)); +#5190 = CARTESIAN_POINT('',(40.357024519407,35.976844690086, + 84.029143673615)); +#5191 = CARTESIAN_POINT('',(40.509924045407,35.985473796174, + 83.947015177124)); +#5192 = CARTESIAN_POINT('',(40.561763758998,35.988366295933, + 83.920922143764)); +#5193 = CARTESIAN_POINT('',(40.667227093478,35.994184521815, + 83.871357465587)); +#5194 = CARTESIAN_POINT('',(40.720681217057,35.997100717097, + 83.847975081925)); +#5195 = CARTESIAN_POINT('',(40.774408684598,36.,83.826164625483)); +#5196 = ORIENTED_EDGE('',*,*,#4711,.F.); +#5197 = CYLINDRICAL_SURFACE('',#5198,3.25); +#5198 = AXIS2_PLACEMENT_3D('',#5199,#5200,#5201); +#5199 = CARTESIAN_POINT('',(41.996848565403,32.4875,86.8375)); +#5200 = DIRECTION('',(0.,1.,0.)); +#5201 = DIRECTION('',(-0.866025403784,0.,0.5)); +#5202 = ADVANCED_FACE('',(#5203),#5207,.F.); +#5203 = FACE_BOUND('',#5204,.T.); +#5204 = EDGE_LOOP('',(#5205,#5206)); +#5205 = ORIENTED_EDGE('',*,*,#5120,.T.); +#5206 = ORIENTED_EDGE('',*,*,#4087,.F.); +#5207 = PLANE('',#5208); +#5208 = AXIS2_PLACEMENT_3D('',#5209,#5210,#5211); +#5209 = CARTESIAN_POINT('',(62.5,39.7,71.677383086122)); +#5210 = DIRECTION('',(0.,1.,0.)); +#5211 = DIRECTION('',(0.,-0.,1.)); +#5212 = ADVANCED_FACE('',(#5213),#5293,.F.); +#5213 = FACE_BOUND('',#5214,.F.); +#5214 = EDGE_LOOP('',(#5215,#5284,#5285,#5290,#5291,#5292)); +#5215 = ORIENTED_EDGE('',*,*,#5216,.F.); +#5216 = EDGE_CURVE('',#4721,#4730,#5217,.T.); +#5217 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5218,#5219,#5220,#5221,#5222, + #5223,#5224,#5225,#5226,#5227,#5228,#5229,#5230,#5231,#5232,#5233, + #5234,#5235,#5236,#5237,#5238,#5239,#5240,#5241,#5242,#5243,#5244, + #5245,#5246,#5247,#5248,#5249,#5250,#5251,#5252,#5253,#5254,#5255, + #5256,#5257,#5258,#5259,#5260,#5261,#5262,#5263,#5264,#5265,#5266, + #5267,#5268,#5269,#5270,#5271,#5272,#5273,#5274,#5275,#5276,#5277, + #5278,#5279,#5280,#5281,#5282,#5283),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999999E-02,9.374999999998E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5218 = CARTESIAN_POINT('',(40.774408684598,36.,66.173835374517)); +#5219 = CARTESIAN_POINT('',(40.558107412608,35.988327784495, + 66.086028714592)); +#5220 = CARTESIAN_POINT('',(40.355074826093,35.976868393202, + 65.97677609633)); +#5221 = CARTESIAN_POINT('',(40.069653904515,35.959969900701, + 65.781982482936)); +#5222 = CARTESIAN_POINT('',(39.977729200667,35.954385628555, + 65.711854234368)); +#5223 = CARTESIAN_POINT('',(39.844820501218,35.946079545981, + 65.598616318302)); +#5224 = CARTESIAN_POINT('',(39.801361283554,35.943323007823, + 65.559520153076)); +#5225 = CARTESIAN_POINT('',(39.717157425728,35.937899043987, + 65.479584013733)); +#5226 = CARTESIAN_POINT('',(39.676275000598,35.935223085488, + 65.438630613355)); +#5227 = CARTESIAN_POINT('',(39.477858227844,35.922017698398, + 65.229019658478)); +#5228 = CARTESIAN_POINT('',(39.338106722829,35.912006458978, + 65.045994383544)); +#5229 = CARTESIAN_POINT('',(39.187576954578,35.900144942568, + 64.797695851116)); +#5230 = CARTESIAN_POINT('',(39.158610519327,35.897798638115, + 64.746890717734)); +#5231 = CARTESIAN_POINT('',(39.103687951674,35.89321485547, + 64.644225620957)); +#5232 = CARTESIAN_POINT('',(39.07771572908,35.890976614149, + 64.592363014005)); +#5233 = CARTESIAN_POINT('',(39.004178784091,35.88441756872, + 64.435216229058)); +#5234 = CARTESIAN_POINT('',(38.917784671352,35.876086426533, + 64.221538529373)); +#5235 = CARTESIAN_POINT('',(38.8543852318,35.868550355614,63.99967668934 + )); +#5236 = CARTESIAN_POINT('',(38.802721086541,35.861408965919, + 63.773638495755)); +#5237 = CARTESIAN_POINT('',(38.782752455569,35.858023731485, + 63.658003997006)); +#5238 = CARTESIAN_POINT('',(38.742049952163,35.848682940493, + 63.312626761303)); +#5239 = CARTESIAN_POINT('',(38.739601022211,35.843456723333, + 63.082274668188)); +#5240 = CARTESIAN_POINT('',(38.767264604451,35.83812642416, + 62.794210313742)); +#5241 = CARTESIAN_POINT('',(38.774349917454,35.837121188193, + 62.736591163453)); +#5242 = CARTESIAN_POINT('',(38.791689942645,35.835233994434, + 62.621340064267)); +#5243 = CARTESIAN_POINT('',(38.801951428955,35.834353113257, + 62.563744781901)); +#5244 = CARTESIAN_POINT('',(38.837114523361,35.831926086469, + 62.393030781448)); +#5245 = CARTESIAN_POINT('',(38.895839955648,35.829239807643, + 62.16951931171)); +#5246 = CARTESIAN_POINT('',(38.977669342491,35.827616782789, + 61.954021610021)); +#5247 = CARTESIAN_POINT('',(39.047786809276,35.826799796878, + 61.7954317653)); +#5248 = CARTESIAN_POINT('',(39.072619914447,35.82659433604, + 61.743075111754)); +#5249 = CARTESIAN_POINT('',(39.125259209554,35.826319335585, + 61.639393047808)); +#5250 = CARTESIAN_POINT('',(39.153156561437,35.826249980723, + 61.587918155015)); +#5251 = CARTESIAN_POINT('',(39.298764950181,35.826250077128, + 61.335721413281)); +#5252 = CARTESIAN_POINT('',(39.434850631135,35.827337605585, + 61.149545296634)); +#5253 = CARTESIAN_POINT('',(39.667604906917,35.830568786143, + 60.893038832091)); +#5254 = CARTESIAN_POINT('',(39.750116210057,35.83191711791, + 60.811259640257)); +#5255 = CARTESIAN_POINT('',(39.924663068654,35.835169124854, + 60.656071311028)); +#5256 = CARTESIAN_POINT('',(40.015324043018,35.837046725686, + 60.583861954807)); +#5257 = CARTESIAN_POINT('',(40.297109507825,35.843417265204, + 60.382816287799)); +#5258 = CARTESIAN_POINT('',(40.497926154152,35.848638668452, + 60.269386868594)); +#5259 = CARTESIAN_POINT('',(40.765658390263,35.856466230992, + 60.154166740242)); +#5260 = CARTESIAN_POINT('',(40.819939560776,35.85809460243, + 60.13252386949)); +#5261 = CARTESIAN_POINT('',(40.928901580408,35.861445246629, + 60.092425181063)); +#5262 = CARTESIAN_POINT('',(40.983731092532,35.863171826457, + 60.073903782701)); +#5263 = CARTESIAN_POINT('',(41.149248111306,35.868504814426, + 60.022849079973)); +#5264 = CARTESIAN_POINT('',(41.372674535607,35.876023289134, + 59.966777103082)); +#5265 = CARTESIAN_POINT('',(41.601535629183,35.884373270233, + 59.93453726678)); +#5266 = CARTESIAN_POINT('',(41.775275339559,35.890964774783, + 59.919540820988)); +#5267 = CARTESIAN_POINT('',(41.833693172828,35.893223162599, + 59.91607682281)); +#5268 = CARTESIAN_POINT('',(41.949961738473,35.89780303301, + 59.912317735421)); +#5269 = CARTESIAN_POINT('',(42.007918592198,35.900128314399, + 59.912004991564)); +#5270 = CARTESIAN_POINT('',(42.296832339395,35.911931584373, + 59.918127139013)); +#5271 = CARTESIAN_POINT('',(42.525207017287,35.921934573152, + 59.947360365189)); +#5272 = CARTESIAN_POINT('',(42.807194845908,35.935196592727, + 60.014611739438)); +#5273 = CARTESIAN_POINT('',(42.863528460112,35.937892738142, + 60.029647514865)); +#5274 = CARTESIAN_POINT('',(42.975329256297,35.943339829175, + 60.062746095081)); +#5275 = CARTESIAN_POINT('',(43.030539427596,35.946078047149, + 60.08072570649)); +#5276 = CARTESIAN_POINT('',(43.194143937722,35.954337236849, + 60.138862758148)); +#5277 = CARTESIAN_POINT('',(43.406891899818,35.965468140979, + 60.227550659162)); +#5278 = CARTESIAN_POINT('',(43.609044463933,35.976844690086, + 60.338192555238)); +#5279 = CARTESIAN_POINT('',(43.756619591269,35.985473796174, + 60.429543180735)); +#5280 = CARTESIAN_POINT('',(43.805136677816,35.988366295933, + 60.46139117295)); +#5281 = CARTESIAN_POINT('',(43.900792615488,35.994184521815, + 60.527942760689)); +#5282 = CARTESIAN_POINT('',(43.94776941553,35.997100717097, + 60.562544197814)); +#5283 = CARTESIAN_POINT('',(43.993521558647,36.,60.598168321365)); +#5284 = ORIENTED_EDGE('',*,*,#4729,.F.); +#5285 = ORIENTED_EDGE('',*,*,#5286,.T.); +#5286 = EDGE_CURVE('',#4730,#3521,#5287,.T.); +#5287 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5288,#5289),.UNSPECIFIED.,.F., + .F.,(2,2),(3.5125,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5288 = CARTESIAN_POINT('',(43.993521558647,36.,60.598168321365)); +#5289 = CARTESIAN_POINT('',(43.993521558647,39.7,60.598168321365)); +#5290 = ORIENTED_EDGE('',*,*,#3529,.T.); +#5291 = ORIENTED_EDGE('',*,*,#3518,.T.); +#5292 = ORIENTED_EDGE('',*,*,#5286,.F.); +#5293 = CYLINDRICAL_SURFACE('',#5294,3.25); +#5294 = AXIS2_PLACEMENT_3D('',#5295,#5296,#5297); +#5295 = CARTESIAN_POINT('',(41.996848565403,32.4875,63.1625)); +#5296 = DIRECTION('',(0.,1.,0.)); +#5297 = DIRECTION('',(-0.866025403784,0.,-0.5)); +#5298 = ADVANCED_FACE('',(#5299),#5456,.F.); +#5299 = FACE_BOUND('',#5300,.F.); +#5300 = EDGE_LOOP('',(#5301,#5372,#5377,#5378,#5385,#5386,#5455)); +#5301 = ORIENTED_EDGE('',*,*,#5302,.F.); +#5302 = EDGE_CURVE('',#5303,#4620,#5305,.T.); +#5303 = VERTEX_POINT('',#5304); +#5304 = CARTESIAN_POINT('',(60.025078217846,35.877499979886, + 49.218519007392)); +#5305 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5306,#5307,#5308,#5309,#5310, + #5311,#5312,#5313,#5314,#5315,#5316,#5317,#5318,#5319,#5320,#5321, + #5322,#5323,#5324,#5325,#5326,#5327,#5328,#5329,#5330,#5331,#5332, + #5333,#5334,#5335,#5336,#5337,#5338,#5339,#5340,#5341,#5342,#5343, + #5344,#5345,#5346,#5347,#5348,#5349,#5350,#5351,#5352,#5353,#5354, + #5355,#5356,#5357,#5358,#5359,#5360,#5361,#5362,#5363,#5364,#5365, + #5366,#5367,#5368,#5369,#5370,#5371),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999999E-02,9.374999999998E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5306 = CARTESIAN_POINT('',(59.280887125951,36.,51.772003695882)); +#5307 = CARTESIAN_POINT('',(59.248779288072,35.988327784495, + 51.540777969505)); +#5308 = CARTESIAN_POINT('',(59.24187853766,35.976868393202, + 51.310320282656)); +#5309 = CARTESIAN_POINT('',(59.267864294565,35.959969900701, + 50.965741707101)); +#5310 = CARTESIAN_POINT('',(59.282634787424,35.954385628555, + 50.85106845405)); +#5311 = CARTESIAN_POINT('',(59.314247349684,35.946079545981, + 50.679347185909)); +#5312 = CARTESIAN_POINT('',(59.326376013129,35.943323007823, + 50.622162316771)); +#5313 = CARTESIAN_POINT('',(59.353500811567,35.937899043987, + 50.509271567126)); +#5314 = CARTESIAN_POINT('',(59.368526284101,35.935223085488, + 50.453389648206)); +#5315 = CARTESIAN_POINT('',(59.450846309559,35.922017698398, + 50.176750205025)); +#5316 = CARTESIAN_POINT('',(59.539475094679,35.912006458978, + 49.964209213998)); +#5317 = CARTESIAN_POINT('',(59.679243047358,35.900144942568, + 49.709697344453)); +#5318 = CARTESIAN_POINT('',(59.708758365885,35.897798638115, + 49.659209108977)); +#5319 = CARTESIAN_POINT('',(59.770207663948,35.89321485547, + 49.560312221761)); +#5320 = CARTESIAN_POINT('',(59.802135887779,35.890976614149, + 49.511888313724)); +#5321 = CARTESIAN_POINT('',(59.901460523171,35.88441756872, + 49.369630058774)); +#5322 = CARTESIAN_POINT('',(60.043313782951,35.876086426533, + 49.187971712562)); +#5323 = CARTESIAN_POINT('',(60.203752052774,35.868550355614, + 49.022135267308)); +#5324 = CARTESIAN_POINT('',(60.373674798015,35.861408965919, + 48.864373708257)); +#5325 = CARTESIAN_POINT('',(60.463832895999,35.858023731485, + 48.789263117181)); +#5326 = CARTESIAN_POINT('',(60.742587104304,35.848682940493, + 48.581325097383)); +#5327 = CARTESIAN_POINT('',(60.94085340378,35.843456723333, + 48.464028215275)); +#5328 = CARTESIAN_POINT('',(61.204156243775,35.83812642416, + 48.343953403032)); +#5329 = CARTESIAN_POINT('',(61.257598548172,35.837121188193, + 48.321279888941)); +#5330 = CARTESIAN_POINT('',(61.366078940476,35.835233994434, + 48.278671241666)); +#5331 = CARTESIAN_POINT('',(61.421088661298,35.834353113257, + 48.258760308308)); +#5332 = CARTESIAN_POINT('',(61.586512869675,35.831926086469, + 48.203855441113)); +#5333 = CARTESIAN_POINT('',(61.809442299069,35.829239842468, + 48.142957955291)); +#5334 = CARTESIAN_POINT('',(62.03698337419,35.827616782789, + 48.10607489939)); +#5335 = CARTESIAN_POINT('',(62.209384941894,35.826799796878, + 48.087503484515)); +#5336 = CARTESIAN_POINT('',(62.267143686507,35.82659433604, + 48.082831257675)); +#5337 = CARTESIAN_POINT('',(62.383254635354,35.826319335585, + 48.076577192501)); +#5338 = CARTESIAN_POINT('',(62.441781876112,35.826249980723, + 48.074999561534)); +#5339 = CARTESIAN_POINT('',(62.732994855577,35.826250077128, + 48.075001754324)); +#5340 = CARTESIAN_POINT('',(62.962270942648,35.827337605585, + 48.099767352797)); +#5341 = CARTESIAN_POINT('',(63.300789195069,35.830568786143, + 48.173085236192)); +#5342 = CARTESIAN_POINT('',(63.412867704267,35.83191711791, + 48.203652524894)); +#5343 = CARTESIAN_POINT('',(63.63453816905,35.835169124854, + 48.277220373975)); +#5344 = CARTESIAN_POINT('',(63.74240379311,35.837046725685, + 48.319630402796)); +#5345 = CARTESIAN_POINT('',(64.057407180462,35.843417265204, + 48.463140940232)); +#5346 = CARTESIAN_POINT('',(64.256048262195,35.848638668452, + 48.580338547851)); +#5347 = CARTESIAN_POINT('',(64.48969793843,35.856466230992, + 48.754591401559)); +#5348 = CARTESIAN_POINT('',(64.535581799569,35.85809460243, + 48.790778838795)); +#5349 = CARTESIAN_POINT('',(64.624789292221,35.861445246629, + 48.86509337163)); +#5350 = CARTESIAN_POINT('',(64.668244049778,35.863171826457, + 48.903316422826)); +#5351 = CARTESIAN_POINT('',(64.79521722871,35.868504814426, + 49.021131014479)); +#5352 = CARTESIAN_POINT('',(64.955490717371,35.876023239352, + 49.186587504146)); +#5353 = CARTESIAN_POINT('',(65.097841261328,35.884373270233, + 49.368667588179)); +#5354 = CARTESIAN_POINT('',(65.197698419539,35.890964774783, + 49.511632368115)); +#5355 = CARTESIAN_POINT('',(65.229907246594,35.893223162599, + 49.560491696671)); +#5356 = CARTESIAN_POINT('',(65.29129699459,35.89780303301, + 49.659303684486)); +#5357 = CARTESIAN_POINT('',(65.320546265577,35.900128314399, + 49.709339420206)); +#5358 = CARTESIAN_POINT('',(65.45970120396,35.911931584373, + 49.962607138507)); +#5359 = CARTESIAN_POINT('',(65.548571826403,35.921934573152, + 50.17500202423)); +#5360 = CARTESIAN_POINT('',(65.631324342174,35.935196592727, + 50.452836334498)); +#5361 = CARTESIAN_POINT('',(65.646469785791,35.937892738142, + 50.509140563199)); +#5362 = CARTESIAN_POINT('',(65.673705972587,35.943339829175, + 50.622512182967)); +#5363 = CARTESIAN_POINT('',(65.685740258007,35.946078047149, + 50.679315399563)); +#5364 = CARTESIAN_POINT('',(65.717194349433,35.954337236849, + 50.850069587335)); +#5365 = CARTESIAN_POINT('',(65.746762317521,35.965468136123, + 51.078658680669)); +#5366 = CARTESIAN_POINT('',(65.752019944526,35.976844690086, + 51.309048881623)); +#5367 = CARTESIAN_POINT('',(65.746695545862,35.985473796174, + 51.482528003611)); +#5368 = CARTESIAN_POINT('',(65.743372918818,35.988366295933, + 51.540469029186)); +#5369 = CARTESIAN_POINT('',(65.73356552201,35.994184521815, + 51.656585295102)); +#5370 = CARTESIAN_POINT('',(65.727088198473,35.997100717097, + 51.71456911589)); +#5371 = CARTESIAN_POINT('',(65.719112874049,36.,51.772003695882)); +#5372 = ORIENTED_EDGE('',*,*,#5373,.T.); +#5373 = EDGE_CURVE('',#5303,#3792,#5374,.T.); +#5374 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5375,#5376),.UNSPECIFIED.,.F., + .F.,(2,2),(3.389999979886,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5375 = CARTESIAN_POINT('',(60.025078217846,35.877499979886, + 49.218519007392)); +#5376 = CARTESIAN_POINT('',(60.025078217846,39.7,49.218519007392)); +#5377 = ORIENTED_EDGE('',*,*,#3800,.T.); +#5378 = ORIENTED_EDGE('',*,*,#5379,.T.); +#5379 = EDGE_CURVE('',#3801,#3792,#5380,.T.); +#5380 = CIRCLE('',#5381,3.25); +#5381 = AXIS2_PLACEMENT_3D('',#5382,#5383,#5384); +#5382 = CARTESIAN_POINT('',(62.5,39.7,51.325)); +#5383 = DIRECTION('',(0.,-1.,0.)); +#5384 = DIRECTION('',(0.,0.,1.)); +#5385 = ORIENTED_EDGE('',*,*,#5373,.F.); +#5386 = ORIENTED_EDGE('',*,*,#5387,.F.); +#5387 = EDGE_CURVE('',#4622,#5303,#5388,.T.); +#5388 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5389,#5390,#5391,#5392,#5393, + #5394,#5395,#5396,#5397,#5398,#5399,#5400,#5401,#5402,#5403,#5404, + #5405,#5406,#5407,#5408,#5409,#5410,#5411,#5412,#5413,#5414,#5415, + #5416,#5417,#5418,#5419,#5420,#5421,#5422,#5423,#5424,#5425,#5426, + #5427,#5428,#5429,#5430,#5431,#5432,#5433,#5434,#5435,#5436,#5437, + #5438,#5439,#5440,#5441,#5442,#5443,#5444,#5445,#5446,#5447,#5448, + #5449,#5450,#5451,#5452,#5453,#5454),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999999E-02,9.374999999998E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5389 = CARTESIAN_POINT('',(59.280887125951,36.,51.772003695882)); +#5390 = CARTESIAN_POINT('',(59.248779288072,35.988327784495, + 51.540777969505)); +#5391 = CARTESIAN_POINT('',(59.24187853766,35.976868393202, + 51.310320282656)); +#5392 = CARTESIAN_POINT('',(59.267864294565,35.959969900701, + 50.965741707101)); +#5393 = CARTESIAN_POINT('',(59.282634787424,35.954385628555, + 50.85106845405)); +#5394 = CARTESIAN_POINT('',(59.314247349684,35.946079545981, + 50.679347185909)); +#5395 = CARTESIAN_POINT('',(59.326376013129,35.943323007823, + 50.622162316771)); +#5396 = CARTESIAN_POINT('',(59.353500811567,35.937899043987, + 50.509271567126)); +#5397 = CARTESIAN_POINT('',(59.368526284101,35.935223085488, + 50.453389648206)); +#5398 = CARTESIAN_POINT('',(59.450846309559,35.922017698398, + 50.176750205025)); +#5399 = CARTESIAN_POINT('',(59.539475094679,35.912006458978, + 49.964209213998)); +#5400 = CARTESIAN_POINT('',(59.679243047358,35.900144942568, + 49.709697344453)); +#5401 = CARTESIAN_POINT('',(59.708758365885,35.897798638115, + 49.659209108977)); +#5402 = CARTESIAN_POINT('',(59.770207663948,35.89321485547, + 49.560312221761)); +#5403 = CARTESIAN_POINT('',(59.802135887779,35.890976614149, + 49.511888313724)); +#5404 = CARTESIAN_POINT('',(59.901460523171,35.88441756872, + 49.369630058774)); +#5405 = CARTESIAN_POINT('',(60.043313782951,35.876086426533, + 49.187971712562)); +#5406 = CARTESIAN_POINT('',(60.203752052774,35.868550355614, + 49.022135267308)); +#5407 = CARTESIAN_POINT('',(60.373674798015,35.861408965919, + 48.864373708257)); +#5408 = CARTESIAN_POINT('',(60.463832895999,35.858023731485, + 48.789263117181)); +#5409 = CARTESIAN_POINT('',(60.742587104304,35.848682940493, + 48.581325097383)); +#5410 = CARTESIAN_POINT('',(60.94085340378,35.843456723333, + 48.464028215275)); +#5411 = CARTESIAN_POINT('',(61.204156243775,35.83812642416, + 48.343953403032)); +#5412 = CARTESIAN_POINT('',(61.257598548172,35.837121188193, + 48.321279888941)); +#5413 = CARTESIAN_POINT('',(61.366078940476,35.835233994434, + 48.278671241666)); +#5414 = CARTESIAN_POINT('',(61.421088661298,35.834353113257, + 48.258760308308)); +#5415 = CARTESIAN_POINT('',(61.586512869675,35.831926086469, + 48.203855441113)); +#5416 = CARTESIAN_POINT('',(61.809442299069,35.829239842468, + 48.142957955291)); +#5417 = CARTESIAN_POINT('',(62.03698337419,35.827616782789, + 48.10607489939)); +#5418 = CARTESIAN_POINT('',(62.209384941894,35.826799796878, + 48.087503484515)); +#5419 = CARTESIAN_POINT('',(62.267143686507,35.82659433604, + 48.082831257675)); +#5420 = CARTESIAN_POINT('',(62.383254635354,35.826319335585, + 48.076577192501)); +#5421 = CARTESIAN_POINT('',(62.441781876112,35.826249980723, + 48.074999561534)); +#5422 = CARTESIAN_POINT('',(62.732994855577,35.826250077128, + 48.075001754324)); +#5423 = CARTESIAN_POINT('',(62.962270942648,35.827337605585, + 48.099767352797)); +#5424 = CARTESIAN_POINT('',(63.300789195069,35.830568786143, + 48.173085236192)); +#5425 = CARTESIAN_POINT('',(63.412867704267,35.83191711791, + 48.203652524894)); +#5426 = CARTESIAN_POINT('',(63.63453816905,35.835169124854, + 48.277220373975)); +#5427 = CARTESIAN_POINT('',(63.74240379311,35.837046725685, + 48.319630402796)); +#5428 = CARTESIAN_POINT('',(64.057407180462,35.843417265204, + 48.463140940232)); +#5429 = CARTESIAN_POINT('',(64.256048262195,35.848638668452, + 48.580338547851)); +#5430 = CARTESIAN_POINT('',(64.48969793843,35.856466230992, + 48.754591401559)); +#5431 = CARTESIAN_POINT('',(64.535581799569,35.85809460243, + 48.790778838795)); +#5432 = CARTESIAN_POINT('',(64.624789292221,35.861445246629, + 48.86509337163)); +#5433 = CARTESIAN_POINT('',(64.668244049778,35.863171826457, + 48.903316422826)); +#5434 = CARTESIAN_POINT('',(64.79521722871,35.868504814426, + 49.021131014479)); +#5435 = CARTESIAN_POINT('',(64.955490717371,35.876023239352, + 49.186587504146)); +#5436 = CARTESIAN_POINT('',(65.097841261328,35.884373270233, + 49.368667588179)); +#5437 = CARTESIAN_POINT('',(65.197698419539,35.890964774783, + 49.511632368115)); +#5438 = CARTESIAN_POINT('',(65.229907246594,35.893223162599, + 49.560491696671)); +#5439 = CARTESIAN_POINT('',(65.29129699459,35.89780303301, + 49.659303684486)); +#5440 = CARTESIAN_POINT('',(65.320546265577,35.900128314399, + 49.709339420206)); +#5441 = CARTESIAN_POINT('',(65.45970120396,35.911931584373, + 49.962607138507)); +#5442 = CARTESIAN_POINT('',(65.548571826403,35.921934573152, + 50.17500202423)); +#5443 = CARTESIAN_POINT('',(65.631324342174,35.935196592727, + 50.452836334498)); +#5444 = CARTESIAN_POINT('',(65.646469785791,35.937892738142, + 50.509140563199)); +#5445 = CARTESIAN_POINT('',(65.673705972587,35.943339829175, + 50.622512182967)); +#5446 = CARTESIAN_POINT('',(65.685740258007,35.946078047149, + 50.679315399563)); +#5447 = CARTESIAN_POINT('',(65.717194349433,35.954337236849, + 50.850069587335)); +#5448 = CARTESIAN_POINT('',(65.746762317521,35.965468136123, + 51.078658680669)); +#5449 = CARTESIAN_POINT('',(65.752019944526,35.976844690086, + 51.309048881623)); +#5450 = CARTESIAN_POINT('',(65.746695545862,35.985473796174, + 51.482528003611)); +#5451 = CARTESIAN_POINT('',(65.743372918818,35.988366295933, + 51.540469029186)); +#5452 = CARTESIAN_POINT('',(65.73356552201,35.994184521815, + 51.656585295102)); +#5453 = CARTESIAN_POINT('',(65.727088198473,35.997100717097, + 51.71456911589)); +#5454 = CARTESIAN_POINT('',(65.719112874049,36.,51.772003695882)); +#5455 = ORIENTED_EDGE('',*,*,#4619,.F.); +#5456 = CYLINDRICAL_SURFACE('',#5457,3.25); +#5457 = AXIS2_PLACEMENT_3D('',#5458,#5459,#5460); +#5458 = CARTESIAN_POINT('',(62.5,32.4875,51.325)); +#5459 = DIRECTION('',(0.,1.,0.)); +#5460 = DIRECTION('',(0.,0.,-1.)); +#5461 = ADVANCED_FACE('',(#5462),#5466,.F.); +#5462 = FACE_BOUND('',#5463,.T.); +#5463 = EDGE_LOOP('',(#5464,#5465)); +#5464 = ORIENTED_EDGE('',*,*,#4047,.F.); +#5465 = ORIENTED_EDGE('',*,*,#5379,.T.); +#5466 = PLANE('',#5467); +#5467 = AXIS2_PLACEMENT_3D('',#5468,#5469,#5470); +#5468 = CARTESIAN_POINT('',(62.5,39.7,71.677383086122)); +#5469 = DIRECTION('',(0.,1.,0.)); +#5470 = DIRECTION('',(0.,-0.,1.)); +#5471 = ADVANCED_FACE('',(#5472),#5552,.F.); +#5472 = FACE_BOUND('',#5473,.F.); +#5473 = EDGE_LOOP('',(#5474,#5543,#5548,#5549,#5550,#5551)); +#5474 = ORIENTED_EDGE('',*,*,#5475,.F.); +#5475 = EDGE_CURVE('',#4631,#4640,#5476,.T.); +#5476 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5477,#5478,#5479,#5480,#5481, + #5482,#5483,#5484,#5485,#5486,#5487,#5488,#5489,#5490,#5491,#5492, + #5493,#5494,#5495,#5496,#5497,#5498,#5499,#5500,#5501,#5502,#5503, + #5504,#5505,#5506,#5507,#5508,#5509,#5510,#5511,#5512,#5513,#5514, + #5515,#5516,#5517,#5518,#5519,#5520,#5521,#5522,#5523,#5524,#5525, + #5526,#5527,#5528,#5529,#5530,#5531,#5532,#5533,#5534,#5535,#5536, + #5537,#5538,#5539,#5540,#5541,#5542),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.25E-02,9.375E-02,0.109375,0.125,0.1875,0.203125,0.21875,0.25, + 0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875,0.484375,0.5, + 0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75,0.78125,0.796875, + 0.8125,0.875,0.890625,0.90625,0.9375,0.96875,0.984375,1.), + .UNSPECIFIED.); +#5477 = CARTESIAN_POINT('',(81.006478441353,36.,60.598168321365)); +#5478 = CARTESIAN_POINT('',(81.190671875464,35.988327784495, + 60.454749254913)); +#5479 = CARTESIAN_POINT('',(81.386803711567,35.976868393202, + 60.333544186326)); +#5480 = CARTESIAN_POINT('',(81.698210390049,35.959969900701, + 60.183759224165)); +#5481 = CARTESIAN_POINT('',(81.804905586756,35.954385628555, + 60.139214219681)); +#5482 = CARTESIAN_POINT('',(81.969426848466,35.946079545981, + 60.080730867608)); +#5483 = CARTESIAN_POINT('',(82.025014729574,35.943323007823, + 60.062642163695)); +#5484 = CARTESIAN_POINT('',(82.136343385838,35.937899043987, + 60.029687553392)); +#5485 = CARTESIAN_POINT('',(82.192251283502,35.935223085488, + 60.01475903485)); +#5486 = CARTESIAN_POINT('',(82.472988081714,35.922017698398, + 59.947730546547)); +#5487 = CARTESIAN_POINT('',(82.701368371849,35.912006458978, + 59.918214830454)); +#5488 = CARTESIAN_POINT('',(82.99166609278,35.900144942568, + 59.912001493337)); +#5489 = CARTESIAN_POINT('',(83.050147846557,35.897798638115, + 59.912318391244)); +#5490 = CARTESIAN_POINT('',(83.166519712274,35.89321485547, + 59.916086600804)); +#5491 = CARTESIAN_POINT('',(83.224420158699,35.890976614149, + 59.91952529972)); +#5492 = CARTESIAN_POINT('',(83.39728173908,35.88441756872, + 59.934413829716)); +#5493 = CARTESIAN_POINT('',(83.625529111599,35.876086426533, + 59.966433183189)); +#5494 = CARTESIAN_POINT('',(83.849366820974,35.868550355614, + 60.022458577968)); +#5495 = CARTESIAN_POINT('',(84.070953711474,35.861408965919, + 60.090735212502)); +#5496 = CARTESIAN_POINT('',(84.18108044043,35.858023731485, + 60.131259120175)); +#5497 = CARTESIAN_POINT('',(84.500537152141,35.848682940493, + 60.26869833608)); +#5498 = CARTESIAN_POINT('',(84.701252381568,35.843456723333, + 60.381753547087)); +#5499 = CARTESIAN_POINT('',(84.936891639324,35.83812642416, + 60.549743089289)); +#5500 = CARTESIAN_POINT('',(84.983248630718,35.837121188193, + 60.584688725488)); +#5501 = CARTESIAN_POINT('',(85.074388997831,35.835233994434, + 60.657331177399)); +#5502 = CARTESIAN_POINT('',(85.119137232343,35.834353113257, + 60.695015526407)); +#5503 = CARTESIAN_POINT('',(85.249398346313,35.831926086469, + 60.810824659665)); +#5504 = CARTESIAN_POINT('',(85.413602241001,35.829239807643, + 60.973438110742)); +#5505 = CARTESIAN_POINT('',(85.559314031699,35.827616782789, + 61.152053289369)); +#5506 = CARTESIAN_POINT('',(85.661598132617,35.826799796878, + 61.292071719215)); +#5507 = CARTESIAN_POINT('',(85.694523772059,35.82659433604, + 61.33975614592)); +#5508 = CARTESIAN_POINT('',(85.7579954258,35.826319335585, + 61.437184144693)); +#5509 = CARTESIAN_POINT('',(85.788625314674,35.826249980723, + 61.487081406519)); +#5510 = CARTESIAN_POINT('',(85.934229905396,35.826250077128, + 61.739280341042)); +#5511 = CARTESIAN_POINT('',(86.027420311513,35.827337605585, + 61.950222056163)); +#5512 = CARTESIAN_POINT('',(86.133184288152,35.830568786143, + 62.280046404101)); +#5513 = CARTESIAN_POINT('',(86.16275149421,35.83191711791, + 62.392392884637)); +#5514 = CARTESIAN_POINT('',(86.209875100396,35.835169124854, + 62.621149062947)); +#5515 = CARTESIAN_POINT('',(86.227079750092,35.837046725686, + 62.735768447989)); +#5516 = CARTESIAN_POINT('',(86.260297672638,35.843417265204, + 63.080324652432)); +#5517 = CARTESIAN_POINT('',(86.258122108042,35.848638668452, + 63.310951679257)); +#5518 = CARTESIAN_POINT('',(86.224039548167,35.856466230992, + 63.600424661317)); +#5519 = CARTESIAN_POINT('',(86.215642238792,35.85809460243, + 63.658254969305)); +#5520 = CARTESIAN_POINT('',(86.195887711813,35.861445246629, + 63.772668190568)); +#5521 = CARTESIAN_POINT('',(86.184512957246,35.863171826457, + 63.829412640125)); +#5522 = CARTESIAN_POINT('',(86.145969117404,35.868504814426, + 63.998281934505)); +#5523 = CARTESIAN_POINT('',(86.082816338461,35.876023239352, + 64.219811092073)); +#5524 = CARTESIAN_POINT('',(85.996305632144,35.884373270233, + 64.434130321398)); +#5525 = CARTESIAN_POINT('',(85.922423079979,35.890964774783, + 64.592091547127)); +#5526 = CARTESIAN_POINT('',(85.896214073765,35.893223162599, + 64.644414873861)); +#5527 = CARTESIAN_POINT('',(85.841335256117,35.89780303301, + 64.746985949065)); +#5528 = CARTESIAN_POINT('',(85.812627673379,35.900128314399, + 64.797334428642)); +#5529 = CARTESIAN_POINT('',(85.662868864564,35.911931584373, + 65.044479999494)); +#5530 = CARTESIAN_POINT('',(85.523364809116,35.921934573152, + 65.227641659041)); +#5531 = CARTESIAN_POINT('',(85.324129496266,35.935196592727, + 65.43822459506)); +#5532 = CARTESIAN_POINT('',(85.282941325679,35.937892738142, + 65.479493048334)); +#5533 = CARTESIAN_POINT('',(85.19837671629,35.943339829175, + 65.559766087886)); +#5534 = CARTESIAN_POINT('',(85.15520083041,35.946078047149, + 65.598589693074)); +#5535 = CARTESIAN_POINT('',(85.02305041171,35.954337236849, + 65.711206829188)); +#5536 = CARTESIAN_POINT('',(84.839870455375,35.965468140979, + 65.851108018459)); +#5537 = CARTESIAN_POINT('',(84.642975480593,35.976844690086, + 65.970856326384)); +#5538 = CARTESIAN_POINT('',(84.490075954593,35.985473796174, + 66.052984822876)); +#5539 = CARTESIAN_POINT('',(84.438236241002,35.988366295933, + 66.079077856236)); +#5540 = CARTESIAN_POINT('',(84.332772906522,35.994184521815, + 66.128642534413)); +#5541 = CARTESIAN_POINT('',(84.279318782943,35.997100717097, + 66.152024918075)); +#5542 = CARTESIAN_POINT('',(84.225591315402,36.,66.173835374517)); +#5543 = ORIENTED_EDGE('',*,*,#5544,.T.); +#5544 = EDGE_CURVE('',#4631,#3668,#5545,.T.); +#5545 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5546,#5547),.UNSPECIFIED.,.F., + .F.,(2,2),(3.5125,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5546 = CARTESIAN_POINT('',(81.006478441353,36.,60.598168321365)); +#5547 = CARTESIAN_POINT('',(81.006478441353,39.7,60.598168321365)); +#5548 = ORIENTED_EDGE('',*,*,#3676,.T.); +#5549 = ORIENTED_EDGE('',*,*,#3665,.T.); +#5550 = ORIENTED_EDGE('',*,*,#5544,.F.); +#5551 = ORIENTED_EDGE('',*,*,#4639,.F.); +#5552 = CYLINDRICAL_SURFACE('',#5553,3.25); +#5553 = AXIS2_PLACEMENT_3D('',#5554,#5555,#5556); +#5554 = CARTESIAN_POINT('',(83.003151434597,32.4875,63.1625)); +#5555 = DIRECTION('',(0.,1.,0.)); +#5556 = DIRECTION('',(0.866025403784,0.,-0.5)); +#5557 = ADVANCED_FACE('',(#5558),#5715,.F.); +#5558 = FACE_BOUND('',#5559,.F.); +#5559 = EDGE_LOOP('',(#5560,#5631,#5636,#5637,#5644,#5645,#5714)); +#5560 = ORIENTED_EDGE('',*,*,#5561,.F.); +#5561 = EDGE_CURVE('',#5562,#4667,#5564,.T.); +#5562 = VERTEX_POINT('',#5563); +#5563 = CARTESIAN_POINT('',(86.064878377861,35.87749998823, + 85.747395360579)); +#5564 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5565,#5566,#5567,#5568,#5569, + #5570,#5571,#5572,#5573,#5574,#5575,#5576,#5577,#5578,#5579,#5580, + #5581,#5582,#5583,#5584,#5585,#5586,#5587,#5588,#5589,#5590,#5591, + #5592,#5593,#5594,#5595,#5596,#5597,#5598,#5599,#5600,#5601,#5602, + #5603,#5604,#5605,#5606,#5607,#5608,#5609,#5610,#5611,#5612,#5613, + #5614,#5615,#5616,#5617,#5618,#5619,#5620,#5621,#5622,#5623,#5624, + #5625,#5626,#5627,#5628,#5629,#5630),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999998E-02,9.374999999997E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5565 = CARTESIAN_POINT('',(84.225591315402,36.,83.826164625483)); +#5566 = CARTESIAN_POINT('',(84.441892587392,35.988327784495, + 83.913971285408)); +#5567 = CARTESIAN_POINT('',(84.644925173907,35.976868393202, + 84.02322390367)); +#5568 = CARTESIAN_POINT('',(84.930346095485,35.959969900701, + 84.218017517064)); +#5569 = CARTESIAN_POINT('',(85.022270799333,35.954385628554, + 84.288145765632)); +#5570 = CARTESIAN_POINT('',(85.155179498782,35.946079545981, + 84.401383681699)); +#5571 = CARTESIAN_POINT('',(85.198638716446,35.943323007823, + 84.440479846924)); +#5572 = CARTESIAN_POINT('',(85.282842574272,35.937899043987, + 84.520415986267)); +#5573 = CARTESIAN_POINT('',(85.323724999402,35.935223085488, + 84.561369386645)); +#5574 = CARTESIAN_POINT('',(85.522141772156,35.922017698398, + 84.770980341522)); +#5575 = CARTESIAN_POINT('',(85.661893277171,35.912006458978, + 84.954005616456)); +#5576 = CARTESIAN_POINT('',(85.812423045422,35.900144942568, + 85.202304148884)); +#5577 = CARTESIAN_POINT('',(85.841389480673,35.897798638115, + 85.253109282267)); +#5578 = CARTESIAN_POINT('',(85.896312048326,35.89321485547, + 85.355774379043)); +#5579 = CARTESIAN_POINT('',(85.922284270921,35.890976614149, + 85.407636985996)); +#5580 = CARTESIAN_POINT('',(85.995821215909,35.88441756872, + 85.564783770942)); +#5581 = CARTESIAN_POINT('',(86.082215555147,35.876086443685, + 85.778461390936)); +#5582 = CARTESIAN_POINT('',(86.1456147682,35.868550355614, + 86.000323310661)); +#5583 = CARTESIAN_POINT('',(86.197278913459,35.861408965919, + 86.226361504246)); +#5584 = CARTESIAN_POINT('',(86.217247544431,35.858023731485, + 86.341996002995)); +#5585 = CARTESIAN_POINT('',(86.257950047837,35.848682940493, + 86.687373238698)); +#5586 = CARTESIAN_POINT('',(86.260398977789,35.843456723333, + 86.917725331812)); +#5587 = CARTESIAN_POINT('',(86.232735395549,35.83812642416, + 87.205789686258)); +#5588 = CARTESIAN_POINT('',(86.225650082546,35.837121188193, + 87.263408836548)); +#5589 = CARTESIAN_POINT('',(86.208310057355,35.835233994434, + 87.378659935734)); +#5590 = CARTESIAN_POINT('',(86.198048571044,35.834353113257, + 87.4362552181)); +#5591 = CARTESIAN_POINT('',(86.162885476638,35.831926086469, + 87.606969218553)); +#5592 = CARTESIAN_POINT('',(86.104160044352,35.829239807643, + 87.830480688291)); +#5593 = CARTESIAN_POINT('',(86.022330657508,35.827616782789, + 88.045978389979)); +#5594 = CARTESIAN_POINT('',(85.952213190723,35.826799796878, + 88.204568234701)); +#5595 = CARTESIAN_POINT('',(85.927380085552,35.82659433604, + 88.256924888247)); +#5596 = CARTESIAN_POINT('',(85.874740790446,35.826319335585, + 88.360606952192)); +#5597 = CARTESIAN_POINT('',(85.846843438562,35.826249980723, + 88.412081844986)); +#5598 = CARTESIAN_POINT('',(85.701235049818,35.826250077128, + 88.66427858672)); +#5599 = CARTESIAN_POINT('',(85.565149368865,35.827337605585, + 88.850454703366)); +#5600 = CARTESIAN_POINT('',(85.332395093082,35.830568786143, + 89.10696116791)); +#5601 = CARTESIAN_POINT('',(85.249883789942,35.83191711791, + 89.188740359744)); +#5602 = CARTESIAN_POINT('',(85.075336931345,35.835169124854, + 89.343928688973)); +#5603 = CARTESIAN_POINT('',(84.984675956981,35.837046725686, + 89.416138045194)); +#5604 = CARTESIAN_POINT('',(84.702890492174,35.843417265204, + 89.617183712201)); +#5605 = CARTESIAN_POINT('',(84.502073845847,35.848638668452, + 89.730613131407)); +#5606 = CARTESIAN_POINT('',(84.234341609736,35.856466230992, + 89.845833259759)); +#5607 = CARTESIAN_POINT('',(84.180060439222,35.85809460243, + 89.867476130511)); +#5608 = CARTESIAN_POINT('',(84.07109841959,35.861445246629, + 89.907574818938)); +#5609 = CARTESIAN_POINT('',(84.016268907466,35.863171826457, + 89.9260962173)); +#5610 = CARTESIAN_POINT('',(83.850751888693,35.868504814427, + 89.977150920027)); +#5611 = CARTESIAN_POINT('',(83.627325464391,35.876023289134, + 90.033222896918)); +#5612 = CARTESIAN_POINT('',(83.398464370815,35.884373270233, + 90.06546273322)); +#5613 = CARTESIAN_POINT('',(83.224724660439,35.890964774783, + 90.080459179012)); +#5614 = CARTESIAN_POINT('',(83.16630682717,35.893223162599, + 90.08392317719)); +#5615 = CARTESIAN_POINT('',(83.050038261525,35.897803033011, + 90.087682264579)); +#5616 = CARTESIAN_POINT('',(82.9920814078,35.900128314399, + 90.087995008436)); +#5617 = CARTESIAN_POINT('',(82.703167660603,35.911931584373, + 90.081872860986)); +#5618 = CARTESIAN_POINT('',(82.474792982711,35.921934573153, + 90.052639634811)); +#5619 = CARTESIAN_POINT('',(82.19280515409,35.935196592727, + 89.985388260562)); +#5620 = CARTESIAN_POINT('',(82.136471539887,35.937892738143, + 89.970352485135)); +#5621 = CARTESIAN_POINT('',(82.024670743701,35.943339829175, + 89.937253904918)); +#5622 = CARTESIAN_POINT('',(81.969460572402,35.946078047149, + 89.91927429351)); +#5623 = CARTESIAN_POINT('',(81.805856062276,35.954337236849, + 89.861137241852)); +#5624 = CARTESIAN_POINT('',(81.59310810018,35.965468140979, + 89.772449340837)); +#5625 = CARTESIAN_POINT('',(81.390955536065,35.976844690086, + 89.661807444761)); +#5626 = CARTESIAN_POINT('',(81.243380408729,35.985473796174, + 89.570456819264)); +#5627 = CARTESIAN_POINT('',(81.194863322182,35.988366295933, + 89.538608827048)); +#5628 = CARTESIAN_POINT('',(81.09920738451,35.994184521815, + 89.47205723931)); +#5629 = CARTESIAN_POINT('',(81.052230584468,35.997100717098, + 89.437455802184)); +#5630 = CARTESIAN_POINT('',(81.006478441351,36.,89.401831678634)); +#5631 = ORIENTED_EDGE('',*,*,#5632,.T.); +#5632 = EDGE_CURVE('',#5562,#3686,#5633,.T.); +#5633 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5634,#5635),.UNSPECIFIED.,.F., + .F.,(2,2),(3.38999998823,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5634 = CARTESIAN_POINT('',(86.064878377861,35.87749998823, + 85.747395360579)); +#5635 = CARTESIAN_POINT('',(86.064878377861,39.7,85.747395360579)); +#5636 = ORIENTED_EDGE('',*,*,#3696,.T.); +#5637 = ORIENTED_EDGE('',*,*,#5638,.T.); +#5638 = EDGE_CURVE('',#3697,#3686,#5639,.T.); +#5639 = CIRCLE('',#5640,3.25); +#5640 = AXIS2_PLACEMENT_3D('',#5641,#5642,#5643); +#5641 = CARTESIAN_POINT('',(83.003151434597,39.7,86.8375)); +#5642 = DIRECTION('',(0.,-1.,0.)); +#5643 = DIRECTION('',(0.,0.,1.)); +#5644 = ORIENTED_EDGE('',*,*,#5632,.F.); +#5645 = ORIENTED_EDGE('',*,*,#5646,.F.); +#5646 = EDGE_CURVE('',#4658,#5562,#5647,.T.); +#5647 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5648,#5649,#5650,#5651,#5652, + #5653,#5654,#5655,#5656,#5657,#5658,#5659,#5660,#5661,#5662,#5663, + #5664,#5665,#5666,#5667,#5668,#5669,#5670,#5671,#5672,#5673,#5674, + #5675,#5676,#5677,#5678,#5679,#5680,#5681,#5682,#5683,#5684,#5685, + #5686,#5687,#5688,#5689,#5690,#5691,#5692,#5693,#5694,#5695,#5696, + #5697,#5698,#5699,#5700,#5701,#5702,#5703,#5704,#5705,#5706,#5707, + #5708,#5709,#5710,#5711,#5712,#5713),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999998E-02,9.374999999997E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5648 = CARTESIAN_POINT('',(84.225591315402,36.,83.826164625483)); +#5649 = CARTESIAN_POINT('',(84.441892587392,35.988327784495, + 83.913971285408)); +#5650 = CARTESIAN_POINT('',(84.644925173907,35.976868393202, + 84.02322390367)); +#5651 = CARTESIAN_POINT('',(84.930346095485,35.959969900701, + 84.218017517064)); +#5652 = CARTESIAN_POINT('',(85.022270799333,35.954385628554, + 84.288145765632)); +#5653 = CARTESIAN_POINT('',(85.155179498782,35.946079545981, + 84.401383681699)); +#5654 = CARTESIAN_POINT('',(85.198638716446,35.943323007823, + 84.440479846924)); +#5655 = CARTESIAN_POINT('',(85.282842574272,35.937899043987, + 84.520415986267)); +#5656 = CARTESIAN_POINT('',(85.323724999402,35.935223085488, + 84.561369386645)); +#5657 = CARTESIAN_POINT('',(85.522141772156,35.922017698398, + 84.770980341522)); +#5658 = CARTESIAN_POINT('',(85.661893277171,35.912006458978, + 84.954005616456)); +#5659 = CARTESIAN_POINT('',(85.812423045422,35.900144942568, + 85.202304148884)); +#5660 = CARTESIAN_POINT('',(85.841389480673,35.897798638115, + 85.253109282267)); +#5661 = CARTESIAN_POINT('',(85.896312048326,35.89321485547, + 85.355774379043)); +#5662 = CARTESIAN_POINT('',(85.922284270921,35.890976614149, + 85.407636985996)); +#5663 = CARTESIAN_POINT('',(85.995821215909,35.88441756872, + 85.564783770942)); +#5664 = CARTESIAN_POINT('',(86.082215555147,35.876086443685, + 85.778461390936)); +#5665 = CARTESIAN_POINT('',(86.1456147682,35.868550355614, + 86.000323310661)); +#5666 = CARTESIAN_POINT('',(86.197278913459,35.861408965919, + 86.226361504246)); +#5667 = CARTESIAN_POINT('',(86.217247544431,35.858023731485, + 86.341996002995)); +#5668 = CARTESIAN_POINT('',(86.257950047837,35.848682940493, + 86.687373238698)); +#5669 = CARTESIAN_POINT('',(86.260398977789,35.843456723333, + 86.917725331812)); +#5670 = CARTESIAN_POINT('',(86.232735395549,35.83812642416, + 87.205789686258)); +#5671 = CARTESIAN_POINT('',(86.225650082546,35.837121188193, + 87.263408836548)); +#5672 = CARTESIAN_POINT('',(86.208310057355,35.835233994434, + 87.378659935734)); +#5673 = CARTESIAN_POINT('',(86.198048571044,35.834353113257, + 87.4362552181)); +#5674 = CARTESIAN_POINT('',(86.162885476638,35.831926086469, + 87.606969218553)); +#5675 = CARTESIAN_POINT('',(86.104160044352,35.829239807643, + 87.830480688291)); +#5676 = CARTESIAN_POINT('',(86.022330657508,35.827616782789, + 88.045978389979)); +#5677 = CARTESIAN_POINT('',(85.952213190723,35.826799796878, + 88.204568234701)); +#5678 = CARTESIAN_POINT('',(85.927380085552,35.82659433604, + 88.256924888247)); +#5679 = CARTESIAN_POINT('',(85.874740790446,35.826319335585, + 88.360606952192)); +#5680 = CARTESIAN_POINT('',(85.846843438562,35.826249980723, + 88.412081844986)); +#5681 = CARTESIAN_POINT('',(85.701235049818,35.826250077128, + 88.66427858672)); +#5682 = CARTESIAN_POINT('',(85.565149368865,35.827337605585, + 88.850454703366)); +#5683 = CARTESIAN_POINT('',(85.332395093082,35.830568786143, + 89.10696116791)); +#5684 = CARTESIAN_POINT('',(85.249883789942,35.83191711791, + 89.188740359744)); +#5685 = CARTESIAN_POINT('',(85.075336931345,35.835169124854, + 89.343928688973)); +#5686 = CARTESIAN_POINT('',(84.984675956981,35.837046725686, + 89.416138045194)); +#5687 = CARTESIAN_POINT('',(84.702890492174,35.843417265204, + 89.617183712201)); +#5688 = CARTESIAN_POINT('',(84.502073845847,35.848638668452, + 89.730613131407)); +#5689 = CARTESIAN_POINT('',(84.234341609736,35.856466230992, + 89.845833259759)); +#5690 = CARTESIAN_POINT('',(84.180060439222,35.85809460243, + 89.867476130511)); +#5691 = CARTESIAN_POINT('',(84.07109841959,35.861445246629, + 89.907574818938)); +#5692 = CARTESIAN_POINT('',(84.016268907466,35.863171826457, + 89.9260962173)); +#5693 = CARTESIAN_POINT('',(83.850751888693,35.868504814427, + 89.977150920027)); +#5694 = CARTESIAN_POINT('',(83.627325464391,35.876023289134, + 90.033222896918)); +#5695 = CARTESIAN_POINT('',(83.398464370815,35.884373270233, + 90.06546273322)); +#5696 = CARTESIAN_POINT('',(83.224724660439,35.890964774783, + 90.080459179012)); +#5697 = CARTESIAN_POINT('',(83.16630682717,35.893223162599, + 90.08392317719)); +#5698 = CARTESIAN_POINT('',(83.050038261525,35.897803033011, + 90.087682264579)); +#5699 = CARTESIAN_POINT('',(82.9920814078,35.900128314399, + 90.087995008436)); +#5700 = CARTESIAN_POINT('',(82.703167660603,35.911931584373, + 90.081872860986)); +#5701 = CARTESIAN_POINT('',(82.474792982711,35.921934573153, + 90.052639634811)); +#5702 = CARTESIAN_POINT('',(82.19280515409,35.935196592727, + 89.985388260562)); +#5703 = CARTESIAN_POINT('',(82.136471539887,35.937892738143, + 89.970352485135)); +#5704 = CARTESIAN_POINT('',(82.024670743701,35.943339829175, + 89.937253904918)); +#5705 = CARTESIAN_POINT('',(81.969460572402,35.946078047149, + 89.91927429351)); +#5706 = CARTESIAN_POINT('',(81.805856062276,35.954337236849, + 89.861137241852)); +#5707 = CARTESIAN_POINT('',(81.59310810018,35.965468140979, + 89.772449340837)); +#5708 = CARTESIAN_POINT('',(81.390955536065,35.976844690086, + 89.661807444761)); +#5709 = CARTESIAN_POINT('',(81.243380408729,35.985473796174, + 89.570456819264)); +#5710 = CARTESIAN_POINT('',(81.194863322182,35.988366295933, + 89.538608827048)); +#5711 = CARTESIAN_POINT('',(81.09920738451,35.994184521815, + 89.47205723931)); +#5712 = CARTESIAN_POINT('',(81.052230584468,35.997100717098, + 89.437455802184)); +#5713 = CARTESIAN_POINT('',(81.006478441351,36.,89.401831678634)); +#5714 = ORIENTED_EDGE('',*,*,#4666,.F.); +#5715 = CYLINDRICAL_SURFACE('',#5716,3.25); +#5716 = AXIS2_PLACEMENT_3D('',#5717,#5718,#5719); +#5717 = CARTESIAN_POINT('',(83.003151434597,32.4875,86.8375)); +#5718 = DIRECTION('',(0.,1.,0.)); +#5719 = DIRECTION('',(0.866025403784,-0.,0.5)); +#5720 = ADVANCED_FACE('',(#5721),#5725,.F.); +#5721 = FACE_BOUND('',#5722,.T.); +#5722 = EDGE_LOOP('',(#5723,#5724)); +#5723 = ORIENTED_EDGE('',*,*,#4771,.F.); +#5724 = ORIENTED_EDGE('',*,*,#5638,.T.); +#5725 = PLANE('',#5726); +#5726 = AXIS2_PLACEMENT_3D('',#5727,#5728,#5729); +#5727 = CARTESIAN_POINT('',(62.5,39.7,71.677383086122)); +#5728 = DIRECTION('',(0.,1.,0.)); +#5729 = DIRECTION('',(0.,-0.,1.)); +#5730 = ADVANCED_FACE('',(#5731),#5881,.F.); +#5731 = FACE_BOUND('',#5732,.F.); +#5732 = EDGE_LOOP('',(#5733,#5804,#5809,#5810,#5811,#5880)); +#5733 = ORIENTED_EDGE('',*,*,#5734,.F.); +#5734 = EDGE_CURVE('',#5735,#4685,#5737,.T.); +#5735 = VERTEX_POINT('',#5736); +#5736 = CARTESIAN_POINT('',(62.5,35.826250000071,101.925)); +#5737 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5738,#5739,#5740,#5741,#5742, + #5743,#5744,#5745,#5746,#5747,#5748,#5749,#5750,#5751,#5752,#5753, + #5754,#5755,#5756,#5757,#5758,#5759,#5760,#5761,#5762,#5763,#5764, + #5765,#5766,#5767,#5768,#5769,#5770,#5771,#5772,#5773,#5774,#5775, + #5776,#5777,#5778,#5779,#5780,#5781,#5782,#5783,#5784,#5785,#5786, + #5787,#5788,#5789,#5790,#5791,#5792,#5793,#5794,#5795,#5796,#5797, + #5798,#5799,#5800,#5801,#5802,#5803),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999997E-02,9.374999999996E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5738 = CARTESIAN_POINT('',(65.719112874049,36.,98.227996304118)); +#5739 = CARTESIAN_POINT('',(65.751220711928,35.988327784495, + 98.459222030495)); +#5740 = CARTESIAN_POINT('',(65.75812146234,35.976868393202, + 98.689679717344)); +#5741 = CARTESIAN_POINT('',(65.732135705435,35.959969900701, + 99.034258292899)); +#5742 = CARTESIAN_POINT('',(65.717365212576,35.954385628555, + 99.148931545951)); +#5743 = CARTESIAN_POINT('',(65.685752650316,35.946079545981, + 99.320652814091)); +#5744 = CARTESIAN_POINT('',(65.673623986871,35.943323007823, + 99.377837683229)); +#5745 = CARTESIAN_POINT('',(65.646499188433,35.937899043987, + 99.490728432875)); +#5746 = CARTESIAN_POINT('',(65.6314737159,35.935223085488, + 99.546610351794)); +#5747 = CARTESIAN_POINT('',(65.549153690442,35.922017698398, + 99.823249794975)); +#5748 = CARTESIAN_POINT('',(65.460524905321,35.912006458978, + 100.035790786)); +#5749 = CARTESIAN_POINT('',(65.320756952642,35.900144942568, + 100.29030265554)); +#5750 = CARTESIAN_POINT('',(65.291241634116,35.897798638115, + 100.34079089102)); +#5751 = CARTESIAN_POINT('',(65.229792336052,35.89321485547, + 100.43968777823)); +#5752 = CARTESIAN_POINT('',(65.197864112222,35.890976614149, + 100.48811168627)); +#5753 = CARTESIAN_POINT('',(65.098539476829,35.88441756872, + 100.63036994122)); +#5754 = CARTESIAN_POINT('',(64.956686217049,35.876086426533, + 100.81202828743)); +#5755 = CARTESIAN_POINT('',(64.796247947226,35.868550355614, + 100.97786473269)); +#5756 = CARTESIAN_POINT('',(64.626325201985,35.861408965919, + 101.13562629174)); +#5757 = CARTESIAN_POINT('',(64.536167104001,35.858023731485, + 101.21073688281)); +#5758 = CARTESIAN_POINT('',(64.257412895696,35.848682940493, + 101.41867490261)); +#5759 = CARTESIAN_POINT('',(64.05914659622,35.843456723333, + 101.53597178472)); +#5760 = CARTESIAN_POINT('',(63.795843756225,35.83812642416, + 101.65604659696)); +#5761 = CARTESIAN_POINT('',(63.742401451828,35.837121188193, + 101.67872011105)); +#5762 = CARTESIAN_POINT('',(63.633921059524,35.835233994434, + 101.72132875833)); +#5763 = CARTESIAN_POINT('',(63.578911338702,35.834353113257, + 101.74123969169)); +#5764 = CARTESIAN_POINT('',(63.413487130325,35.831926086469, + 101.79614455888)); +#5765 = CARTESIAN_POINT('',(63.190557700931,35.829239842468, + 101.8570420447)); +#5766 = CARTESIAN_POINT('',(62.96301662581,35.827616782789, + 101.8939251006)); +#5767 = CARTESIAN_POINT('',(62.790615058107,35.826799796878, + 101.91249651548)); +#5768 = CARTESIAN_POINT('',(62.732856313493,35.82659433604, + 101.91716874232)); +#5769 = CARTESIAN_POINT('',(62.616745364646,35.826319335585, + 101.92342280749)); +#5770 = CARTESIAN_POINT('',(62.558218123888,35.826249980723, + 101.92500043846)); +#5771 = CARTESIAN_POINT('',(62.267005144423,35.826250077128, + 101.92499824567)); +#5772 = CARTESIAN_POINT('',(62.037729057352,35.827337605585, + 101.9002326472)); +#5773 = CARTESIAN_POINT('',(61.699210804931,35.830568786143, + 101.8269147638)); +#5774 = CARTESIAN_POINT('',(61.587132295733,35.83191711791, + 101.7963474751)); +#5775 = CARTESIAN_POINT('',(61.365461830951,35.835169124854, + 101.72277962602)); +#5776 = CARTESIAN_POINT('',(61.25759620689,35.837046725686, + 101.6803695972)); +#5777 = CARTESIAN_POINT('',(60.942592819538,35.843417265204, + 101.53685905976)); +#5778 = CARTESIAN_POINT('',(60.743951737806,35.848638668452, + 101.41966145214)); +#5779 = CARTESIAN_POINT('',(60.51030206157,35.856466230992, + 101.24540859844)); +#5780 = CARTESIAN_POINT('',(60.464418200431,35.85809460243, + 101.2092211612)); +#5781 = CARTESIAN_POINT('',(60.375210707779,35.861445246629, + 101.13490662836)); +#5782 = CARTESIAN_POINT('',(60.331755950222,35.863171826457, + 101.09668357717)); +#5783 = CARTESIAN_POINT('',(60.204782771291,35.868504814426, + 100.97886898552)); +#5784 = CARTESIAN_POINT('',(60.044509802712,35.876023289134, + 100.81341201464)); +#5785 = CARTESIAN_POINT('',(59.902158738672,35.884373270233, + 100.63133241182)); +#5786 = CARTESIAN_POINT('',(59.802301580462,35.890964774783, + 100.48836763188)); +#5787 = CARTESIAN_POINT('',(59.770092753406,35.893223162599, + 100.43950830332)); +#5788 = CARTESIAN_POINT('',(59.70870300541,35.89780303301, + 100.34069631551)); +#5789 = CARTESIAN_POINT('',(59.679453734423,35.900128314399, + 100.29066057979)); +#5790 = CARTESIAN_POINT('',(59.540298796041,35.911931584373, + 100.03739286149)); +#5791 = CARTESIAN_POINT('',(59.451428173598,35.921934573152, + 99.82499797577)); +#5792 = CARTESIAN_POINT('',(59.368675657826,35.935196592727, + 99.547163665502)); +#5793 = CARTESIAN_POINT('',(59.353530214209,35.937892738142, + 99.490859436801)); +#5794 = CARTESIAN_POINT('',(59.326294027414,35.943339829175, + 99.377487817033)); +#5795 = CARTESIAN_POINT('',(59.314259741994,35.946078047149, + 99.320684600437)); +#5796 = CARTESIAN_POINT('',(59.282805650568,35.954337236849, + 99.149930412665)); +#5797 = CARTESIAN_POINT('',(59.253237682479,35.965468136123, + 98.921341319331)); +#5798 = CARTESIAN_POINT('',(59.247980055474,35.976844690086, + 98.690951118377)); +#5799 = CARTESIAN_POINT('',(59.253304454138,35.985473796174, + 98.517471996389)); +#5800 = CARTESIAN_POINT('',(59.256627081182,35.988366295933, + 98.459530970814)); +#5801 = CARTESIAN_POINT('',(59.26643447799,35.994184521815, + 98.343414704898)); +#5802 = CARTESIAN_POINT('',(59.272911801527,35.997100717097, + 98.28543088411)); +#5803 = CARTESIAN_POINT('',(59.280887125951,36.,98.227996304118)); +#5804 = ORIENTED_EDGE('',*,*,#5805,.T.); +#5805 = EDGE_CURVE('',#5735,#3655,#5806,.T.); +#5806 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5807,#5808),.UNSPECIFIED.,.F., + .F.,(2,2),(3.338750000071,7.2125),.PIECEWISE_BEZIER_KNOTS.); +#5807 = CARTESIAN_POINT('',(62.5,35.826250000071,101.925)); +#5808 = CARTESIAN_POINT('',(62.5,39.7,101.925)); +#5809 = ORIENTED_EDGE('',*,*,#3654,.T.); +#5810 = ORIENTED_EDGE('',*,*,#5805,.F.); +#5811 = ORIENTED_EDGE('',*,*,#5812,.F.); +#5812 = EDGE_CURVE('',#4676,#5735,#5813,.T.); +#5813 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#5814,#5815,#5816,#5817,#5818, + #5819,#5820,#5821,#5822,#5823,#5824,#5825,#5826,#5827,#5828,#5829, + #5830,#5831,#5832,#5833,#5834,#5835,#5836,#5837,#5838,#5839,#5840, + #5841,#5842,#5843,#5844,#5845,#5846,#5847,#5848,#5849,#5850,#5851, + #5852,#5853,#5854,#5855,#5856,#5857,#5858,#5859,#5860,#5861,#5862, + #5863,#5864,#5865,#5866,#5867,#5868,#5869,#5870,#5871,#5872,#5873, + #5874,#5875,#5876,#5877,#5878,#5879),.UNSPECIFIED.,.F.,.F.,(4,2,2,2, + 2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,4),(0., + 6.249999999997E-02,9.374999999996E-02,0.109375,0.125,0.1875,0.203125 + ,0.21875,0.25,0.28125,0.3125,0.375,0.390625,0.40625,0.4375,0.46875, + 0.484375,0.5,0.5625,0.59375,0.625,0.6875,0.703125,0.71875,0.75, + 0.78125,0.796875,0.8125,0.875,0.890625,0.90625,0.9375,0.96875, + 0.984375,1.),.UNSPECIFIED.); +#5814 = CARTESIAN_POINT('',(65.719112874049,36.,98.227996304118)); +#5815 = CARTESIAN_POINT('',(65.751220711928,35.988327784495, + 98.459222030495)); +#5816 = CARTESIAN_POINT('',(65.75812146234,35.976868393202, + 98.689679717344)); +#5817 = CARTESIAN_POINT('',(65.732135705435,35.959969900701, + 99.034258292899)); +#5818 = CARTESIAN_POINT('',(65.717365212576,35.954385628555, + 99.148931545951)); +#5819 = CARTESIAN_POINT('',(65.685752650316,35.946079545981, + 99.320652814091)); +#5820 = CARTESIAN_POINT('',(65.673623986871,35.943323007823, + 99.377837683229)); +#5821 = CARTESIAN_POINT('',(65.646499188433,35.937899043987, + 99.490728432875)); +#5822 = CARTESIAN_POINT('',(65.6314737159,35.935223085488, + 99.546610351794)); +#5823 = CARTESIAN_POINT('',(65.549153690442,35.922017698398, + 99.823249794975)); +#5824 = CARTESIAN_POINT('',(65.460524905321,35.912006458978, + 100.035790786)); +#5825 = CARTESIAN_POINT('',(65.320756952642,35.900144942568, + 100.29030265554)); +#5826 = CARTESIAN_POINT('',(65.291241634116,35.897798638115, + 100.34079089102)); +#5827 = CARTESIAN_POINT('',(65.229792336052,35.89321485547, + 100.43968777823)); +#5828 = CARTESIAN_POINT('',(65.197864112222,35.890976614149, + 100.48811168627)); +#5829 = CARTESIAN_POINT('',(65.098539476829,35.88441756872, + 100.63036994122)); +#5830 = CARTESIAN_POINT('',(64.956686217049,35.876086426533, + 100.81202828743)); +#5831 = CARTESIAN_POINT('',(64.796247947226,35.868550355614, + 100.97786473269)); +#5832 = CARTESIAN_POINT('',(64.626325201985,35.861408965919, + 101.13562629174)); +#5833 = CARTESIAN_POINT('',(64.536167104001,35.858023731485, + 101.21073688281)); +#5834 = CARTESIAN_POINT('',(64.257412895696,35.848682940493, + 101.41867490261)); +#5835 = CARTESIAN_POINT('',(64.05914659622,35.843456723333, + 101.53597178472)); +#5836 = CARTESIAN_POINT('',(63.795843756225,35.83812642416, + 101.65604659696)); +#5837 = CARTESIAN_POINT('',(63.742401451828,35.837121188193, + 101.67872011105)); +#5838 = CARTESIAN_POINT('',(63.633921059524,35.835233994434, + 101.72132875833)); +#5839 = CARTESIAN_POINT('',(63.578911338702,35.834353113257, + 101.74123969169)); +#5840 = CARTESIAN_POINT('',(63.413487130325,35.831926086469, + 101.79614455888)); +#5841 = CARTESIAN_POINT('',(63.190557700931,35.829239842468, + 101.8570420447)); +#5842 = CARTESIAN_POINT('',(62.96301662581,35.827616782789, + 101.8939251006)); +#5843 = CARTESIAN_POINT('',(62.790615058107,35.826799796878, + 101.91249651548)); +#5844 = CARTESIAN_POINT('',(62.732856313493,35.82659433604, + 101.91716874232)); +#5845 = CARTESIAN_POINT('',(62.616745364646,35.826319335585, + 101.92342280749)); +#5846 = CARTESIAN_POINT('',(62.558218123888,35.826249980723, + 101.92500043846)); +#5847 = CARTESIAN_POINT('',(62.267005144423,35.826250077128, + 101.92499824567)); +#5848 = CARTESIAN_POINT('',(62.037729057352,35.827337605585, + 101.9002326472)); +#5849 = CARTESIAN_POINT('',(61.699210804931,35.830568786143, + 101.8269147638)); +#5850 = CARTESIAN_POINT('',(61.587132295733,35.83191711791, + 101.7963474751)); +#5851 = CARTESIAN_POINT('',(61.365461830951,35.835169124854, + 101.72277962602)); +#5852 = CARTESIAN_POINT('',(61.25759620689,35.837046725686, + 101.6803695972)); +#5853 = CARTESIAN_POINT('',(60.942592819538,35.843417265204, + 101.53685905976)); +#5854 = CARTESIAN_POINT('',(60.743951737806,35.848638668452, + 101.41966145214)); +#5855 = CARTESIAN_POINT('',(60.51030206157,35.856466230992, + 101.24540859844)); +#5856 = CARTESIAN_POINT('',(60.464418200431,35.85809460243, + 101.2092211612)); +#5857 = CARTESIAN_POINT('',(60.375210707779,35.861445246629, + 101.13490662836)); +#5858 = CARTESIAN_POINT('',(60.331755950222,35.863171826457, + 101.09668357717)); +#5859 = CARTESIAN_POINT('',(60.204782771291,35.868504814426, + 100.97886898552)); +#5860 = CARTESIAN_POINT('',(60.044509802712,35.876023289134, + 100.81341201464)); +#5861 = CARTESIAN_POINT('',(59.902158738672,35.884373270233, + 100.63133241182)); +#5862 = CARTESIAN_POINT('',(59.802301580462,35.890964774783, + 100.48836763188)); +#5863 = CARTESIAN_POINT('',(59.770092753406,35.893223162599, + 100.43950830332)); +#5864 = CARTESIAN_POINT('',(59.70870300541,35.89780303301, + 100.34069631551)); +#5865 = CARTESIAN_POINT('',(59.679453734423,35.900128314399, + 100.29066057979)); +#5866 = CARTESIAN_POINT('',(59.540298796041,35.911931584373, + 100.03739286149)); +#5867 = CARTESIAN_POINT('',(59.451428173598,35.921934573152, + 99.82499797577)); +#5868 = CARTESIAN_POINT('',(59.368675657826,35.935196592727, + 99.547163665502)); +#5869 = CARTESIAN_POINT('',(59.353530214209,35.937892738142, + 99.490859436801)); +#5870 = CARTESIAN_POINT('',(59.326294027414,35.943339829175, + 99.377487817033)); +#5871 = CARTESIAN_POINT('',(59.314259741994,35.946078047149, + 99.320684600437)); +#5872 = CARTESIAN_POINT('',(59.282805650568,35.954337236849, + 99.149930412665)); +#5873 = CARTESIAN_POINT('',(59.253237682479,35.965468136123, + 98.921341319331)); +#5874 = CARTESIAN_POINT('',(59.247980055474,35.976844690086, + 98.690951118377)); +#5875 = CARTESIAN_POINT('',(59.253304454138,35.985473796174, + 98.517471996389)); +#5876 = CARTESIAN_POINT('',(59.256627081182,35.988366295933, + 98.459530970814)); +#5877 = CARTESIAN_POINT('',(59.26643447799,35.994184521815, + 98.343414704898)); +#5878 = CARTESIAN_POINT('',(59.272911801527,35.997100717097, + 98.28543088411)); +#5879 = CARTESIAN_POINT('',(59.280887125951,36.,98.227996304118)); +#5880 = ORIENTED_EDGE('',*,*,#4684,.F.); +#5881 = CYLINDRICAL_SURFACE('',#5882,3.25); +#5882 = AXIS2_PLACEMENT_3D('',#5883,#5884,#5885); +#5883 = CARTESIAN_POINT('',(62.5,32.4875,98.675)); +#5884 = DIRECTION('',(0.,1.,0.)); +#5885 = DIRECTION('',(0.,-0.,1.)); +#5886 = ADVANCED_FACE('',(#5887),#5893,.T.); +#5887 = FACE_BOUND('',#5888,.T.); +#5888 = EDGE_LOOP('',(#5889,#5890,#5891,#5892)); +#5889 = ORIENTED_EDGE('',*,*,#3766,.T.); +#5890 = ORIENTED_EDGE('',*,*,#4080,.F.); +#5891 = ORIENTED_EDGE('',*,*,#4121,.F.); +#5892 = ORIENTED_EDGE('',*,*,#4002,.T.); +#5893 = PLANE('',#5894); +#5894 = AXIS2_PLACEMENT_3D('',#5895,#5896,#5897); +#5895 = CARTESIAN_POINT('',(37.078232612654,47.9,79.954164198295)); +#5896 = DIRECTION('',(-0.191280470977,0.,-0.981535420361)); +#5897 = DIRECTION('',(0.,-1.,-0.)); +#5898 = ADVANCED_FACE('',(#5899),#5905,.F.); +#5899 = FACE_BOUND('',#5900,.T.); +#5900 = EDGE_LOOP('',(#5901,#5902,#5903,#5904)); +#5901 = ORIENTED_EDGE('',*,*,#3985,.T.); +#5902 = ORIENTED_EDGE('',*,*,#4128,.T.); +#5903 = ORIENTED_EDGE('',*,*,#4095,.F.); +#5904 = ORIENTED_EDGE('',*,*,#3731,.F.); +#5905 = PLANE('',#5906); +#5906 = AXIS2_PLACEMENT_3D('',#5907,#5908,#5909); +#5907 = CARTESIAN_POINT('',(45.498684256084,47.9,94.538814267393)); +#5908 = DIRECTION('',(-0.754394373258,0.,-0.656421457294)); +#5909 = DIRECTION('',(0.,-1.,-0.)); +#5910 = ADVANCED_FACE('',(#5911),#5917,.T.); +#5911 = FACE_BOUND('',#5912,.T.); +#5912 = EDGE_LOOP('',(#5913,#5914,#5915,#5916)); +#5913 = ORIENTED_EDGE('',*,*,#3818,.T.); +#5914 = ORIENTED_EDGE('',*,*,#4040,.F.); +#5915 = ORIENTED_EDGE('',*,*,#3932,.F.); +#5916 = ORIENTED_EDGE('',*,*,#4016,.T.); +#5917 = PLANE('',#5918); +#5918 = AXIS2_PLACEMENT_3D('',#5919,#5920,#5921); +#5919 = CARTESIAN_POINT('',(70.92045164343,47.9,50.507021534312)); +#5920 = DIRECTION('',(0.945674844235,0.,0.325113963067)); +#5921 = DIRECTION('',(0.,-1.,0.)); +#5922 = ADVANCED_FACE('',(#5923),#5929,.F.); +#5923 = FACE_BOUND('',#5924,.T.); +#5924 = EDGE_LOOP('',(#5925,#5926,#5927,#5928)); +#5925 = ORIENTED_EDGE('',*,*,#4009,.F.); +#5926 = ORIENTED_EDGE('',*,*,#3913,.T.); +#5927 = ORIENTED_EDGE('',*,*,#4055,.T.); +#5928 = ORIENTED_EDGE('',*,*,#3783,.F.); +#5929 = PLANE('',#5930); +#5930 = AXIS2_PLACEMENT_3D('',#5931,#5932,#5933); +#5931 = CARTESIAN_POINT('',(54.07954835657,47.9,50.507021534312)); +#5932 = DIRECTION('',(0.945674844235,0.,-0.325113963067)); +#5933 = DIRECTION('',(0.,-1.,0.)); +#5934 = ADVANCED_FACE('',(#5935),#5941,.F.); +#5935 = FACE_BOUND('',#5936,.T.); +#5936 = EDGE_LOOP('',(#5937,#5938,#5939,#5940)); +#5937 = ORIENTED_EDGE('',*,*,#3888,.T.); +#5938 = ORIENTED_EDGE('',*,*,#4757,.T.); +#5939 = ORIENTED_EDGE('',*,*,#3835,.F.); +#5940 = ORIENTED_EDGE('',*,*,#3971,.F.); +#5941 = PLANE('',#5942); +#5942 = AXIS2_PLACEMENT_3D('',#5943,#5944,#5945); +#5943 = CARTESIAN_POINT('',(87.921767387346,47.9,79.954164198296)); +#5944 = DIRECTION('',(-0.191280470977,0.,0.981535420361)); +#5945 = DIRECTION('',(0.,-1.,0.)); +#5946 = ADVANCED_FACE('',(#5947),#5953,.T.); +#5947 = FACE_BOUND('',#5948,.T.); +#5948 = EDGE_LOOP('',(#5949,#5950,#5951,#5952)); +#5949 = ORIENTED_EDGE('',*,*,#3714,.T.); +#5950 = ORIENTED_EDGE('',*,*,#4764,.F.); +#5951 = ORIENTED_EDGE('',*,*,#3871,.F.); +#5952 = ORIENTED_EDGE('',*,*,#3978,.T.); +#5953 = PLANE('',#5954); +#5954 = AXIS2_PLACEMENT_3D('',#5955,#5956,#5957); +#5955 = CARTESIAN_POINT('',(79.501315743916,47.9,94.538814267393)); +#5956 = DIRECTION('',(-0.754394373258,0.,0.656421457294)); +#5957 = DIRECTION('',(0.,-1.,0.)); +#5958 = ADVANCED_FACE('',(#5959),#5977,.F.); +#5959 = FACE_BOUND('',#5960,.F.); +#5960 = EDGE_LOOP('',(#5961,#5970,#5975,#5976)); +#5961 = ORIENTED_EDGE('',*,*,#5962,.F.); +#5962 = EDGE_CURVE('',#5963,#5963,#5965,.T.); +#5963 = VERTEX_POINT('',#5964); +#5964 = CARTESIAN_POINT('',(42.538114442769,46.,85.625)); +#5965 = CIRCLE('',#5966,0.9); +#5966 = AXIS2_PLACEMENT_3D('',#5967,#5968,#5969); +#5967 = CARTESIAN_POINT('',(42.538114442769,46.,86.525)); +#5968 = DIRECTION('',(0.,-1.,0.)); +#5969 = DIRECTION('',(0.,0.,-1.)); +#5970 = ORIENTED_EDGE('',*,*,#5971,.T.); +#5971 = EDGE_CURVE('',#5963,#4110,#5972,.T.); +#5972 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#5973,#5974),.UNSPECIFIED.,.F., + .F.,(2,2),(0.,10.1),.PIECEWISE_BEZIER_KNOTS.); +#5973 = CARTESIAN_POINT('',(42.538114442769,46.,85.625)); +#5974 = CARTESIAN_POINT('',(42.538114442769,56.1,85.625)); +#5975 = ORIENTED_EDGE('',*,*,#4109,.T.); +#5976 = ORIENTED_EDGE('',*,*,#5971,.F.); +#5977 = CYLINDRICAL_SURFACE('',#5978,0.9); +#5978 = AXIS2_PLACEMENT_3D('',#5979,#5980,#5981); +#5979 = CARTESIAN_POINT('',(42.538114442769,46.,86.525)); +#5980 = DIRECTION('',(0.,1.,0.)); +#5981 = DIRECTION('',(-0.5,0.,-0.866025403784)); +#5982 = ADVANCED_FACE('',(#5983),#5986,.F.); +#5983 = FACE_BOUND('',#5984,.T.); +#5984 = EDGE_LOOP('',(#5985)); +#5985 = ORIENTED_EDGE('',*,*,#5962,.F.); +#5986 = PLANE('',#5987); +#5987 = AXIS2_PLACEMENT_3D('',#5988,#5989,#5990); +#5988 = CARTESIAN_POINT('',(42.538114442769,46.,86.525)); +#5989 = DIRECTION('',(0.,-1.,0.)); +#5990 = DIRECTION('',(-0.866025403784,0.,0.5)); +#5991 = ADVANCED_FACE('',(#5992),#6010,.F.); +#5992 = FACE_BOUND('',#5993,.F.); +#5993 = EDGE_LOOP('',(#5994,#6003,#6008,#6009)); +#5994 = ORIENTED_EDGE('',*,*,#5995,.F.); +#5995 = EDGE_CURVE('',#5996,#5996,#5998,.T.); +#5996 = VERTEX_POINT('',#5997); +#5997 = CARTESIAN_POINT('',(62.5,46.,51.05)); +#5998 = CIRCLE('',#5999,0.9); +#5999 = AXIS2_PLACEMENT_3D('',#6000,#6001,#6002); +#6000 = CARTESIAN_POINT('',(62.5,46.,51.95)); +#6001 = DIRECTION('',(0.,-1.,0.)); +#6002 = DIRECTION('',(0.,0.,-1.)); +#6003 = ORIENTED_EDGE('',*,*,#6004,.T.); +#6004 = EDGE_CURVE('',#5996,#3903,#6005,.T.); +#6005 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#6006,#6007),.UNSPECIFIED.,.F., + .F.,(2,2),(0.,10.1),.PIECEWISE_BEZIER_KNOTS.); +#6006 = CARTESIAN_POINT('',(62.5,46.,51.05)); +#6007 = CARTESIAN_POINT('',(62.5,56.1,51.05)); +#6008 = ORIENTED_EDGE('',*,*,#3902,.T.); +#6009 = ORIENTED_EDGE('',*,*,#6004,.F.); +#6010 = CYLINDRICAL_SURFACE('',#6011,0.9); +#6011 = AXIS2_PLACEMENT_3D('',#6012,#6013,#6014); +#6012 = CARTESIAN_POINT('',(62.5,46.,51.95)); +#6013 = DIRECTION('',(0.,1.,0.)); +#6014 = DIRECTION('',(1.,0.,0.)); +#6015 = ADVANCED_FACE('',(#6016),#6019,.F.); +#6016 = FACE_BOUND('',#6017,.T.); +#6017 = EDGE_LOOP('',(#6018)); +#6018 = ORIENTED_EDGE('',*,*,#5995,.F.); +#6019 = PLANE('',#6020); +#6020 = AXIS2_PLACEMENT_3D('',#6021,#6022,#6023); +#6021 = CARTESIAN_POINT('',(62.5,46.,51.95)); +#6022 = DIRECTION('',(0.,-1.,0.)); +#6023 = DIRECTION('',(0.,0.,-1.)); +#6024 = ADVANCED_FACE('',(#6025),#6043,.F.); +#6025 = FACE_BOUND('',#6026,.F.); +#6026 = EDGE_LOOP('',(#6027,#6036,#6041,#6042)); +#6027 = ORIENTED_EDGE('',*,*,#6028,.F.); +#6028 = EDGE_CURVE('',#6029,#6029,#6031,.T.); +#6029 = VERTEX_POINT('',#6030); +#6030 = CARTESIAN_POINT('',(82.461885557231,46.,85.625)); +#6031 = CIRCLE('',#6032,0.9); +#6032 = AXIS2_PLACEMENT_3D('',#6033,#6034,#6035); +#6033 = CARTESIAN_POINT('',(82.461885557231,46.,86.525)); +#6034 = DIRECTION('',(0.,-1.,0.)); +#6035 = DIRECTION('',(0.,0.,-1.)); +#6036 = ORIENTED_EDGE('',*,*,#6037,.T.); +#6037 = EDGE_CURVE('',#6029,#3850,#6038,.T.); +#6038 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#6039,#6040),.UNSPECIFIED.,.F., + .F.,(2,2),(0.,10.1),.PIECEWISE_BEZIER_KNOTS.); +#6039 = CARTESIAN_POINT('',(82.461885557231,46.,85.625)); +#6040 = CARTESIAN_POINT('',(82.461885557231,56.1,85.625)); +#6041 = ORIENTED_EDGE('',*,*,#3849,.T.); +#6042 = ORIENTED_EDGE('',*,*,#6037,.F.); +#6043 = CYLINDRICAL_SURFACE('',#6044,0.9); +#6044 = AXIS2_PLACEMENT_3D('',#6045,#6046,#6047); +#6045 = CARTESIAN_POINT('',(82.461885557231,46.,86.525)); +#6046 = DIRECTION('',(0.,1.,0.)); +#6047 = DIRECTION('',(-0.5,0.,0.866025403784)); +#6048 = ADVANCED_FACE('',(#6049),#6052,.F.); +#6049 = FACE_BOUND('',#6050,.T.); +#6050 = EDGE_LOOP('',(#6051)); +#6051 = ORIENTED_EDGE('',*,*,#6028,.F.); +#6052 = PLANE('',#6053); +#6053 = AXIS2_PLACEMENT_3D('',#6054,#6055,#6056); +#6054 = CARTESIAN_POINT('',(82.461885557231,46.,86.525)); +#6055 = DIRECTION('',(0.,-1.,0.)); +#6056 = DIRECTION('',(0.866025403784,0.,0.5)); +#6057 = ADVANCED_FACE('',(#6058),#6090,.F.); +#6058 = FACE_BOUND('',#6059,.F.); +#6059 = EDGE_LOOP('',(#6060,#6061,#6062,#6063,#6064,#6065,#6066,#6067, + #6068,#6069,#6070,#6071,#6072,#6077,#6078,#6079,#6080,#6081,#6082, + #6083,#6084,#6085,#6086,#6087,#6088,#6089)); +#6060 = ORIENTED_EDGE('',*,*,#5561,.T.); +#6061 = ORIENTED_EDGE('',*,*,#4675,.T.); +#6062 = ORIENTED_EDGE('',*,*,#5812,.T.); +#6063 = ORIENTED_EDGE('',*,*,#5734,.T.); +#6064 = ORIENTED_EDGE('',*,*,#4693,.T.); +#6065 = ORIENTED_EDGE('',*,*,#4702,.T.); +#6066 = ORIENTED_EDGE('',*,*,#5128,.T.); +#6067 = ORIENTED_EDGE('',*,*,#5043,.T.); +#6068 = ORIENTED_EDGE('',*,*,#4720,.T.); +#6069 = ORIENTED_EDGE('',*,*,#5216,.T.); +#6070 = ORIENTED_EDGE('',*,*,#4738,.T.); +#6071 = ORIENTED_EDGE('',*,*,#5387,.T.); +#6072 = ORIENTED_EDGE('',*,*,#6073,.T.); +#6073 = EDGE_CURVE('',#5303,#4595,#6074,.T.); +#6074 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#6075,#6076),.UNSPECIFIED.,.F., + .F.,(2,2),(2.453060850079,20.024984394501),.PIECEWISE_BEZIER_KNOTS.); +#6075 = CARTESIAN_POINT('',(60.025077941115,35.877499982671, + 49.218518771543)); +#6076 = CARTESIAN_POINT('',(58.348055506961,34.999999965244, + 31.74882826124)); +#6077 = ORIENTED_EDGE('',*,*,#4594,.T.); +#6078 = ORIENTED_EDGE('',*,*,#4152,.T.); +#6079 = ORIENTED_EDGE('',*,*,#4218,.T.); +#6080 = ORIENTED_EDGE('',*,*,#4235,.T.); +#6081 = ORIENTED_EDGE('',*,*,#4272,.T.); +#6082 = ORIENTED_EDGE('',*,*,#4603,.T.); +#6083 = ORIENTED_EDGE('',*,*,#6073,.F.); +#6084 = ORIENTED_EDGE('',*,*,#5302,.T.); +#6085 = ORIENTED_EDGE('',*,*,#4630,.T.); +#6086 = ORIENTED_EDGE('',*,*,#5475,.T.); +#6087 = ORIENTED_EDGE('',*,*,#4648,.T.); +#6088 = ORIENTED_EDGE('',*,*,#4657,.T.); +#6089 = ORIENTED_EDGE('',*,*,#5646,.T.); +#6090 = CONICAL_SURFACE('',#6091,23.45,1.520837929335); +#6091 = AXIS2_PLACEMENT_3D('',#6092,#6093,#6094); +#6092 = CARTESIAN_POINT('',(62.5,36.,75.)); +#6093 = DIRECTION('',(0.,-1.,0.)); +#6094 = DIRECTION('',(0.,0.,-1.)); +#6095 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#6099)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#6096,#6097,#6098)) REPRESENTATION_CONTEXT +('Context #1','3D Context with UNIT and UNCERTAINTY') ); +#6096 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#6097 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#6098 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#6099 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-05),#6096, + 'distance_accuracy_value','confusion accuracy'); +#6100 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#6101,#6103); +#6101 = ( REPRESENTATION_RELATIONSHIP('','',#3511,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#6102) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#6102 = ITEM_DEFINED_TRANSFORMATION('','',#11,#23); +#6103 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #6104); +#6104 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','ferro_mount','',#5,#3506,$); +#6105 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#3508)); +#6106 = SHAPE_DEFINITION_REPRESENTATION(#6107,#6113); +#6107 = PRODUCT_DEFINITION_SHAPE('','',#6108); +#6108 = PRODUCT_DEFINITION('design','',#6109,#6112); +#6109 = PRODUCT_DEFINITION_FORMATION('','',#6110); +#6110 = PRODUCT('housing','housing','',(#6111)); +#6111 = PRODUCT_CONTEXT('',#2,'mechanical'); +#6112 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#6113 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#6114),#12561); +#6114 = MANIFOLD_SOLID_BREP('',#6115); +#6115 = CLOSED_SHELL('',(#6116,#6480,#6844,#7208,#7572,#7712,#7852,#7869 + ,#7909,#7949,#7981,#8013,#8143,#8273,#8346,#8358,#8383,#8408,#8433, + #8458,#8482,#8506,#8524,#8542,#8566,#8640,#8658,#8676,#8700,#8724, + #8748,#8772,#8789,#8806,#8985,#9033,#9058,#9090,#9120,#9138,#9160, + #9192,#9231,#9309,#9353,#9397,#9475,#9522,#9560,#9599,#9626,#9638, + #9650,#9765,#9810,#9863,#9902,#9955,#9994,#10053,#10154,#10213, + #10252,#10277,#10409,#10434,#10472,#10497,#10522,#10548,#10581, + #10607,#10632,#10756,#10788,#10820,#10852,#10884,#10909,#10981, + #11097,#11127,#11153,#11197,#11313,#11325,#11337,#11359,#11376, + #11393,#11405,#11427,#11444,#11461,#11473,#11495,#11512,#11529, + #11541,#11563,#11580,#11597,#11609,#11631,#11648,#11665,#11677, + #11699,#11716,#11733,#11745,#11767,#11784,#11801,#11813,#11835, + #11852,#11869,#11881,#11903,#11920,#11937,#11949,#11971,#11988, + #12005,#12017,#12039,#12056,#12073,#12085,#12107,#12124,#12141, + #12153,#12175,#12192,#12209,#12221,#12243,#12260,#12277,#12289, + #12311,#12328,#12345,#12357,#12379,#12396,#12413,#12425,#12447, + #12464,#12481,#12493,#12515,#12532,#12549)); +#6116 = ADVANCED_FACE('',(#6117,#6153,#6189,#6225,#6259,#6295,#6331, + #6367,#6403,#6439),#6475,.T.); +#6117 = FACE_BOUND('',#6118,.T.); +#6118 = EDGE_LOOP('',(#6119,#6129,#6138,#6146)); +#6119 = ORIENTED_EDGE('',*,*,#6120,.F.); +#6120 = EDGE_CURVE('',#6121,#6123,#6125,.T.); +#6121 = VERTEX_POINT('',#6122); +#6122 = CARTESIAN_POINT('',(0.,90.534992952076,104.31223590809)); +#6123 = VERTEX_POINT('',#6124); +#6124 = CARTESIAN_POINT('',(0.,41.080054104728,88.243352200596)); +#6125 = LINE('',#6126,#6127); +#6126 = CARTESIAN_POINT('',(0.,45.82686287296,89.785683863646)); +#6127 = VECTOR('',#6128,1.); +#6128 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6129 = ORIENTED_EDGE('',*,*,#6130,.F.); +#6130 = EDGE_CURVE('',#6131,#6121,#6133,.T.); +#6131 = VERTEX_POINT('',#6132); +#6132 = CARTESIAN_POINT('',(0.,89.298924974576,108.11646197327)); +#6133 = CIRCLE('',#6134,2.); +#6134 = AXIS2_PLACEMENT_3D('',#6135,#6136,#6137); +#6135 = CARTESIAN_POINT('',(0.,89.916958963326,106.21434894068)); +#6136 = DIRECTION('',(-1.,0.,0.)); +#6137 = DIRECTION('',(0.,0.,1.)); +#6138 = ORIENTED_EDGE('',*,*,#6139,.F.); +#6139 = EDGE_CURVE('',#6140,#6131,#6142,.T.); +#6140 = VERTEX_POINT('',#6141); +#6141 = CARTESIAN_POINT('',(0.,39.843986127228,92.047578265777)); +#6142 = LINE('',#6143,#6144); +#6143 = CARTESIAN_POINT('',(0.,44.59079489546,93.589909928827)); +#6144 = VECTOR('',#6145,1.); +#6145 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6146 = ORIENTED_EDGE('',*,*,#6147,.F.); +#6147 = EDGE_CURVE('',#6123,#6140,#6148,.T.); +#6148 = CIRCLE('',#6149,2.); +#6149 = AXIS2_PLACEMENT_3D('',#6150,#6151,#6152); +#6150 = CARTESIAN_POINT('',(0.,40.462020115978,90.145465233187)); +#6151 = DIRECTION('',(-1.,0.,0.)); +#6152 = DIRECTION('',(0.,0.,1.)); +#6153 = FACE_BOUND('',#6154,.T.); +#6154 = EDGE_LOOP('',(#6155,#6165,#6174,#6182)); +#6155 = ORIENTED_EDGE('',*,*,#6156,.F.); +#6156 = EDGE_CURVE('',#6157,#6159,#6161,.T.); +#6157 = VERTEX_POINT('',#6158); +#6158 = CARTESIAN_POINT('',(0.,95.860298455961,97.630834760857)); +#6159 = VERTEX_POINT('',#6160); +#6160 = CARTESIAN_POINT('',(0.,40.699020510842,79.70784908711)); +#6161 = LINE('',#6162,#6163); +#6162 = CARTESIAN_POINT('',(0.,48.29899882796,82.177231733285)); +#6163 = VECTOR('',#6164,1.); +#6164 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6165 = ORIENTED_EDGE('',*,*,#6166,.F.); +#6166 = EDGE_CURVE('',#6167,#6157,#6169,.T.); +#6167 = VERTEX_POINT('',#6168); +#6168 = CARTESIAN_POINT('',(0.,94.624230478461,101.43506082603)); +#6169 = CIRCLE('',#6170,2.); +#6170 = AXIS2_PLACEMENT_3D('',#6171,#6172,#6173); +#6171 = CARTESIAN_POINT('',(0.,95.242264467211,99.532947793448)); +#6172 = DIRECTION('',(-1.,0.,0.)); +#6173 = DIRECTION('',(0.,0.,1.)); +#6174 = ORIENTED_EDGE('',*,*,#6175,.F.); +#6175 = EDGE_CURVE('',#6176,#6167,#6178,.T.); +#6176 = VERTEX_POINT('',#6177); +#6177 = CARTESIAN_POINT('',(0.,39.462952533342,83.512075152291)); +#6178 = LINE('',#6179,#6180); +#6179 = CARTESIAN_POINT('',(0.,47.06293085046,85.981457798466)); +#6180 = VECTOR('',#6181,1.); +#6181 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6182 = ORIENTED_EDGE('',*,*,#6183,.F.); +#6183 = EDGE_CURVE('',#6159,#6176,#6184,.T.); +#6184 = CIRCLE('',#6185,2.); +#6185 = AXIS2_PLACEMENT_3D('',#6186,#6187,#6188); +#6186 = CARTESIAN_POINT('',(0.,40.080986522092,81.609962119701)); +#6187 = DIRECTION('',(-1.,0.,0.)); +#6188 = DIRECTION('',(0.,0.,1.)); +#6189 = FACE_BOUND('',#6190,.T.); +#6190 = EDGE_LOOP('',(#6191,#6201,#6210,#6218)); +#6191 = ORIENTED_EDGE('',*,*,#6192,.F.); +#6192 = EDGE_CURVE('',#6193,#6195,#6197,.T.); +#6193 = VERTEX_POINT('',#6194); +#6194 = CARTESIAN_POINT('',(0.,82.356517899305,110.0665860722)); +#6195 = VERTEX_POINT('',#6196); +#6196 = CARTESIAN_POINT('',(0.,44.314257247499,97.705906297207)); +#6197 = LINE('',#6198,#6199); +#6198 = CARTESIAN_POINT('',(0.,43.354726917961,97.394135994007)); +#6199 = VECTOR('',#6200,1.); +#6200 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6201 = ORIENTED_EDGE('',*,*,#6202,.F.); +#6202 = EDGE_CURVE('',#6203,#6193,#6205,.T.); +#6203 = VERTEX_POINT('',#6204); +#6204 = CARTESIAN_POINT('',(0.,81.120449921805,113.87081213738)); +#6205 = CIRCLE('',#6206,2.); +#6206 = AXIS2_PLACEMENT_3D('',#6207,#6208,#6209); +#6207 = CARTESIAN_POINT('',(0.,81.738483910555,111.96869910479)); +#6208 = DIRECTION('',(-1.,0.,0.)); +#6209 = DIRECTION('',(0.,0.,1.)); +#6210 = ORIENTED_EDGE('',*,*,#6211,.F.); +#6211 = EDGE_CURVE('',#6212,#6203,#6214,.T.); +#6212 = VERTEX_POINT('',#6213); +#6213 = CARTESIAN_POINT('',(0.,43.078189269999,101.51013236238)); +#6214 = LINE('',#6215,#6216); +#6215 = CARTESIAN_POINT('',(0.,42.118658940461,101.19836205918)); +#6216 = VECTOR('',#6217,1.); +#6217 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6218 = ORIENTED_EDGE('',*,*,#6219,.F.); +#6219 = EDGE_CURVE('',#6195,#6212,#6220,.T.); +#6220 = CIRCLE('',#6221,2.); +#6221 = AXIS2_PLACEMENT_3D('',#6222,#6223,#6224); +#6222 = CARTESIAN_POINT('',(0.,43.696223258749,99.608019329798)); +#6223 = DIRECTION('',(-1.,0.,0.)); +#6224 = DIRECTION('',(0.,0.,1.)); +#6225 = FACE_BOUND('',#6226,.T.); +#6226 = EDGE_LOOP('',(#6227,#6237,#6245,#6253)); +#6227 = ORIENTED_EDGE('',*,*,#6228,.T.); +#6228 = EDGE_CURVE('',#6229,#6231,#6233,.T.); +#6229 = VERTEX_POINT('',#6230); +#6230 = CARTESIAN_POINT('',(0.,10.,24.278441447094)); +#6231 = VERTEX_POINT('',#6232); +#6232 = CARTESIAN_POINT('',(0.,10.,130.)); +#6233 = LINE('',#6234,#6235); +#6234 = CARTESIAN_POINT('',(0.,10.,0.)); +#6235 = VECTOR('',#6236,1.); +#6236 = DIRECTION('',(0.,0.,1.)); +#6237 = ORIENTED_EDGE('',*,*,#6238,.T.); +#6238 = EDGE_CURVE('',#6231,#6239,#6241,.T.); +#6239 = VERTEX_POINT('',#6240); +#6240 = CARTESIAN_POINT('',(1.734723475977E-15,121.43614694383,130.)); +#6241 = LINE('',#6242,#6243); +#6242 = CARTESIAN_POINT('',(0.,75.,130.)); +#6243 = VECTOR('',#6244,1.); +#6244 = DIRECTION('',(0.,1.,0.)); +#6245 = ORIENTED_EDGE('',*,*,#6246,.T.); +#6246 = EDGE_CURVE('',#6239,#6247,#6249,.T.); +#6247 = VERTEX_POINT('',#6248); +#6248 = CARTESIAN_POINT('',(5.052458161338E-30,131.90718208477, + 63.888486018689)); +#6249 = LINE('',#6250,#6251); +#6250 = CARTESIAN_POINT('',(0.,140.38587817757,10.356105720284)); +#6251 = VECTOR('',#6252,1.); +#6252 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#6253 = ORIENTED_EDGE('',*,*,#6254,.T.); +#6254 = EDGE_CURVE('',#6247,#6229,#6255,.T.); +#6255 = LINE('',#6256,#6257); +#6256 = CARTESIAN_POINT('',(0.,61.657797401562,41.063077286871)); +#6257 = VECTOR('',#6258,1.); +#6258 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6259 = FACE_BOUND('',#6260,.T.); +#6260 = EDGE_LOOP('',(#6261,#6272,#6280,#6289)); +#6261 = ORIENTED_EDGE('',*,*,#6262,.T.); +#6262 = EDGE_CURVE('',#6263,#6265,#6267,.T.); +#6263 = VERTEX_POINT('',#6264); +#6264 = CARTESIAN_POINT('',(0.,100.80457036596,82.413930500135)); +#6265 = VERTEX_POINT('',#6266); +#6266 = CARTESIAN_POINT('',(0.,99.56850238846,86.218156565315)); +#6267 = CIRCLE('',#6268,2.); +#6268 = AXIS2_PLACEMENT_3D('',#6269,#6270,#6271); +#6269 = CARTESIAN_POINT('',(0.,100.18653637721,84.316043532725)); +#6270 = DIRECTION('',(1.,0.,-0.)); +#6271 = DIRECTION('',(0.,0.,1.)); +#6272 = ORIENTED_EDGE('',*,*,#6273,.T.); +#6273 = EDGE_CURVE('',#6265,#6274,#6276,.T.); +#6274 = VERTEX_POINT('',#6275); +#6275 = CARTESIAN_POINT('',(0.,44.407224443341,68.295170891569)); +#6276 = LINE('',#6277,#6278); +#6277 = CARTESIAN_POINT('',(0.,52.007202760459,70.764553537743)); +#6278 = VECTOR('',#6279,1.); +#6279 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6280 = ORIENTED_EDGE('',*,*,#6281,.T.); +#6281 = EDGE_CURVE('',#6274,#6282,#6284,.T.); +#6282 = VERTEX_POINT('',#6283); +#6283 = CARTESIAN_POINT('',(0.,45.643292420841,64.490944826388)); +#6284 = CIRCLE('',#6285,2.); +#6285 = AXIS2_PLACEMENT_3D('',#6286,#6287,#6288); +#6286 = CARTESIAN_POINT('',(0.,45.025258432091,66.393057858978)); +#6287 = DIRECTION('',(1.,0.,-0.)); +#6288 = DIRECTION('',(0.,0.,1.)); +#6289 = ORIENTED_EDGE('',*,*,#6290,.T.); +#6290 = EDGE_CURVE('',#6282,#6263,#6291,.T.); +#6291 = LINE('',#6292,#6293); +#6292 = CARTESIAN_POINT('',(0.,53.243270737959,66.960327472563)); +#6293 = VECTOR('',#6294,1.); +#6294 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6295 = FACE_BOUND('',#6296,.T.); +#6296 = EDGE_LOOP('',(#6297,#6308,#6316,#6325)); +#6297 = ORIENTED_EDGE('',*,*,#6298,.T.); +#6298 = EDGE_CURVE('',#6299,#6301,#6303,.T.); +#6299 = VERTEX_POINT('',#6300); +#6300 = CARTESIAN_POINT('',(0.,99.283490927255,90.331399624871)); +#6301 = VERTEX_POINT('',#6302); +#6302 = CARTESIAN_POINT('',(0.,98.047422949756,94.135625690052)); +#6303 = CIRCLE('',#6304,2.); +#6304 = AXIS2_PLACEMENT_3D('',#6305,#6306,#6307); +#6305 = CARTESIAN_POINT('',(0.,98.665456938505,92.233512657461)); +#6306 = DIRECTION('',(1.,0.,-0.)); +#6307 = DIRECTION('',(0.,0.,1.)); +#6308 = ORIENTED_EDGE('',*,*,#6309,.T.); +#6309 = EDGE_CURVE('',#6301,#6310,#6312,.T.); +#6310 = VERTEX_POINT('',#6311); +#6311 = CARTESIAN_POINT('',(0.,40.984031972046,75.594606027555)); +#6312 = LINE('',#6313,#6314); +#6313 = CARTESIAN_POINT('',(0.,49.53506680546,78.373005668104)); +#6314 = VECTOR('',#6315,1.); +#6315 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6316 = ORIENTED_EDGE('',*,*,#6317,.T.); +#6317 = EDGE_CURVE('',#6310,#6318,#6320,.T.); +#6318 = VERTEX_POINT('',#6319); +#6319 = CARTESIAN_POINT('',(0.,42.220099949546,71.790379962374)); +#6320 = CIRCLE('',#6321,2.); +#6321 = AXIS2_PLACEMENT_3D('',#6322,#6323,#6324); +#6322 = CARTESIAN_POINT('',(0.,41.602065960796,73.692492994964)); +#6323 = DIRECTION('',(1.,0.,-0.)); +#6324 = DIRECTION('',(0.,0.,1.)); +#6325 = ORIENTED_EDGE('',*,*,#6326,.T.); +#6326 = EDGE_CURVE('',#6318,#6299,#6327,.T.); +#6327 = LINE('',#6328,#6329); +#6328 = CARTESIAN_POINT('',(0.,50.771134782959,74.568779602924)); +#6329 = VECTOR('',#6330,1.); +#6330 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6331 = FACE_BOUND('',#6332,.T.); +#6332 = EDGE_LOOP('',(#6333,#6344,#6352,#6361)); +#6333 = ORIENTED_EDGE('',*,*,#6334,.T.); +#6334 = EDGE_CURVE('',#6335,#6337,#6339,.T.); +#6335 = VERTEX_POINT('',#6336); +#6336 = CARTESIAN_POINT('',(0.,88.24879138876,53.099217227177)); +#6337 = VERTEX_POINT('',#6338); +#6338 = CARTESIAN_POINT('',(0.,87.01272341126,56.903443292358)); +#6339 = CIRCLE('',#6340,2.); +#6340 = AXIS2_PLACEMENT_3D('',#6341,#6342,#6343); +#6341 = CARTESIAN_POINT('',(0.,87.63075740001,55.001330259768)); +#6342 = DIRECTION('',(1.,0.,-0.)); +#6343 = DIRECTION('',(0.,0.,1.)); +#6344 = ORIENTED_EDGE('',*,*,#6345,.T.); +#6345 = EDGE_CURVE('',#6337,#6346,#6348,.T.); +#6346 = VERTEX_POINT('',#6347); +#6347 = CARTESIAN_POINT('',(0.,71.795819150538,51.959171382359)); +#6348 = LINE('',#6349,#6350); +#6349 = CARTESIAN_POINT('',(0.,59.423610625458,47.93919714666)); +#6350 = VECTOR('',#6351,1.); +#6351 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6352 = ORIENTED_EDGE('',*,*,#6353,.T.); +#6353 = EDGE_CURVE('',#6346,#6354,#6356,.T.); +#6354 = VERTEX_POINT('',#6355); +#6355 = CARTESIAN_POINT('',(0.,73.031887128038,48.154945317178)); +#6356 = CIRCLE('',#6357,2.); +#6357 = AXIS2_PLACEMENT_3D('',#6358,#6359,#6360); +#6358 = CARTESIAN_POINT('',(0.,72.413853139288,50.057058349768)); +#6359 = DIRECTION('',(1.,0.,-0.)); +#6360 = DIRECTION('',(0.,0.,1.)); +#6361 = ORIENTED_EDGE('',*,*,#6362,.T.); +#6362 = EDGE_CURVE('',#6354,#6335,#6363,.T.); +#6363 = LINE('',#6364,#6365); +#6364 = CARTESIAN_POINT('',(0.,60.659678602958,44.134971081479)); +#6365 = VECTOR('',#6366,1.); +#6366 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6367 = FACE_BOUND('',#6368,.T.); +#6368 = EDGE_LOOP('',(#6369,#6380,#6388,#6397)); +#6369 = ORIENTED_EDGE('',*,*,#6370,.T.); +#6370 = EDGE_CURVE('',#6371,#6373,#6375,.T.); +#6371 = VERTEX_POINT('',#6372); +#6372 = CARTESIAN_POINT('',(0.,100.42353677207,73.878427386649)); +#6373 = VERTEX_POINT('',#6374); +#6374 = CARTESIAN_POINT('',(0.,99.187468794574,77.682653451829)); +#6375 = CIRCLE('',#6376,2.); +#6376 = AXIS2_PLACEMENT_3D('',#6377,#6378,#6379); +#6377 = CARTESIAN_POINT('',(0.,99.805502783324,75.780540419239)); +#6378 = DIRECTION('',(1.,0.,-0.)); +#6379 = DIRECTION('',(0.,0.,1.)); +#6380 = ORIENTED_EDGE('',*,*,#6381,.T.); +#6381 = EDGE_CURVE('',#6373,#6382,#6384,.T.); +#6382 = VERTEX_POINT('',#6383); +#6383 = CARTESIAN_POINT('',(0.,49.732529947226,61.613769744332)); +#6384 = LINE('',#6385,#6386); +#6385 = CARTESIAN_POINT('',(0.,54.479338715459,63.156101407382)); +#6386 = VECTOR('',#6387,1.); +#6387 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6388 = ORIENTED_EDGE('',*,*,#6389,.T.); +#6389 = EDGE_CURVE('',#6382,#6390,#6392,.T.); +#6390 = VERTEX_POINT('',#6391); +#6391 = CARTESIAN_POINT('',(0.,50.968597924726,57.809543679152)); +#6392 = CIRCLE('',#6393,2.); +#6393 = AXIS2_PLACEMENT_3D('',#6394,#6395,#6396); +#6394 = CARTESIAN_POINT('',(0.,50.350563935976,59.711656711742)); +#6395 = DIRECTION('',(1.,0.,-0.)); +#6396 = DIRECTION('',(0.,0.,1.)); +#6397 = ORIENTED_EDGE('',*,*,#6398,.T.); +#6398 = EDGE_CURVE('',#6390,#6371,#6399,.T.); +#6399 = LINE('',#6400,#6401); +#6400 = CARTESIAN_POINT('',(0.,55.715406692959,59.351875342201)); +#6401 = VECTOR('',#6402,1.); +#6402 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6403 = FACE_BOUND('',#6404,.T.); +#6404 = EDGE_LOOP('',(#6405,#6416,#6424,#6433)); +#6405 = ORIENTED_EDGE('',*,*,#6406,.T.); +#6406 = EDGE_CURVE('',#6407,#6409,#6411,.T.); +#6407 = VERTEX_POINT('',#6408); +#6408 = CARTESIAN_POINT('',(0.,68.471703748764,113.96683427006)); +#6409 = VERTEX_POINT('',#6410); +#6410 = CARTESIAN_POINT('',(0.,67.235635771264,117.77106033524)); +#6411 = CIRCLE('',#6412,2.); +#6412 = AXIS2_PLACEMENT_3D('',#6413,#6414,#6415); +#6413 = CARTESIAN_POINT('',(0.,67.853669760014,115.86894730265)); +#6414 = DIRECTION('',(1.,0.,-0.)); +#6415 = DIRECTION('',(0.,0.,1.)); +#6416 = ORIENTED_EDGE('',*,*,#6417,.T.); +#6417 = EDGE_CURVE('',#6409,#6418,#6420,.T.); +#6418 = VERTEX_POINT('',#6419); +#6419 = CARTESIAN_POINT('',(0.,52.018731510541,112.82678842524)); +#6420 = LINE('',#6421,#6422); +#6421 = CARTESIAN_POINT('',(0.,39.646522985461,108.80681418954)); +#6422 = VECTOR('',#6423,1.); +#6423 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6424 = ORIENTED_EDGE('',*,*,#6425,.T.); +#6425 = EDGE_CURVE('',#6418,#6426,#6428,.T.); +#6426 = VERTEX_POINT('',#6427); +#6427 = CARTESIAN_POINT('',(0.,53.254799488041,109.02256236006)); +#6428 = CIRCLE('',#6429,2.); +#6429 = AXIS2_PLACEMENT_3D('',#6430,#6431,#6432); +#6430 = CARTESIAN_POINT('',(0.,52.636765499291,110.92467539265)); +#6431 = DIRECTION('',(1.,0.,-0.)); +#6432 = DIRECTION('',(0.,0.,1.)); +#6433 = ORIENTED_EDGE('',*,*,#6434,.T.); +#6434 = EDGE_CURVE('',#6426,#6407,#6435,.T.); +#6435 = LINE('',#6436,#6437); +#6436 = CARTESIAN_POINT('',(0.,40.882590962961,105.00258812436)); +#6437 = VECTOR('',#6438,1.); +#6438 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6439 = FACE_BOUND('',#6440,.T.); +#6440 = EDGE_LOOP('',(#6441,#6452,#6460,#6469)); +#6441 = ORIENTED_EDGE('',*,*,#6442,.T.); +#6442 = EDGE_CURVE('',#6443,#6445,#6447,.T.); +#6443 = VERTEX_POINT('',#6444); +#6444 = CARTESIAN_POINT('',(0.,97.189333629303,64.415873290038)); +#6445 = VERTEX_POINT('',#6446); +#6446 = CARTESIAN_POINT('',(0.,95.953265651803,68.220099355218)); +#6447 = CIRCLE('',#6448,2.); +#6448 = AXIS2_PLACEMENT_3D('',#6449,#6450,#6451); +#6449 = CARTESIAN_POINT('',(0.,96.571299640553,66.317986322628)); +#6450 = DIRECTION('',(1.,0.,-0.)); +#6451 = DIRECTION('',(0.,0.,1.)); +#6452 = ORIENTED_EDGE('',*,*,#6453,.T.); +#6453 = EDGE_CURVE('',#6445,#6454,#6456,.T.); +#6454 = VERTEX_POINT('',#6455); +#6455 = CARTESIAN_POINT('',(0.,57.911004999996,55.85941958022)); +#6456 = LINE('',#6457,#6458); +#6457 = CARTESIAN_POINT('',(0.,56.951474670458,55.547649277021)); +#6458 = VECTOR('',#6459,1.); +#6459 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6460 = ORIENTED_EDGE('',*,*,#6461,.T.); +#6461 = EDGE_CURVE('',#6454,#6462,#6464,.T.); +#6462 = VERTEX_POINT('',#6463); +#6463 = CARTESIAN_POINT('',(0.,59.147072977496,52.05519351504)); +#6464 = CIRCLE('',#6465,2.); +#6465 = AXIS2_PLACEMENT_3D('',#6466,#6467,#6468); +#6466 = CARTESIAN_POINT('',(0.,58.529038988746,53.95730654763)); +#6467 = DIRECTION('',(1.,0.,-0.)); +#6468 = DIRECTION('',(0.,0.,1.)); +#6469 = ORIENTED_EDGE('',*,*,#6470,.T.); +#6470 = EDGE_CURVE('',#6462,#6443,#6471,.T.); +#6471 = LINE('',#6472,#6473); +#6472 = CARTESIAN_POINT('',(0.,58.187542647958,51.74342321184)); +#6473 = VECTOR('',#6474,1.); +#6474 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6475 = PLANE('',#6476); +#6476 = AXIS2_PLACEMENT_3D('',#6477,#6478,#6479); +#6477 = CARTESIAN_POINT('',(0.,75.,0.)); +#6478 = DIRECTION('',(-1.,0.,0.)); +#6479 = DIRECTION('',(0.,0.,1.)); +#6480 = ADVANCED_FACE('',(#6481,#6517,#6553,#6589,#6623,#6659,#6695, + #6731,#6767,#6803),#6839,.F.); +#6481 = FACE_BOUND('',#6482,.T.); +#6482 = EDGE_LOOP('',(#6483,#6493,#6502,#6510)); +#6483 = ORIENTED_EDGE('',*,*,#6484,.F.); +#6484 = EDGE_CURVE('',#6485,#6487,#6489,.T.); +#6485 = VERTEX_POINT('',#6486); +#6486 = CARTESIAN_POINT('',(150.,41.080054104728,88.243352200596)); +#6487 = VERTEX_POINT('',#6488); +#6488 = CARTESIAN_POINT('',(150.,90.534992952076,104.31223590809)); +#6489 = LINE('',#6490,#6491); +#6490 = CARTESIAN_POINT('',(150.,45.82686287296,89.785683863646)); +#6491 = VECTOR('',#6492,1.); +#6492 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6493 = ORIENTED_EDGE('',*,*,#6494,.F.); +#6494 = EDGE_CURVE('',#6495,#6485,#6497,.T.); +#6495 = VERTEX_POINT('',#6496); +#6496 = CARTESIAN_POINT('',(150.,39.843986127228,92.047578265777)); +#6497 = CIRCLE('',#6498,2.); +#6498 = AXIS2_PLACEMENT_3D('',#6499,#6500,#6501); +#6499 = CARTESIAN_POINT('',(150.,40.462020115978,90.145465233187)); +#6500 = DIRECTION('',(1.,0.,-0.)); +#6501 = DIRECTION('',(0.,0.,1.)); +#6502 = ORIENTED_EDGE('',*,*,#6503,.F.); +#6503 = EDGE_CURVE('',#6504,#6495,#6506,.T.); +#6504 = VERTEX_POINT('',#6505); +#6505 = CARTESIAN_POINT('',(150.,89.298924974576,108.11646197327)); +#6506 = LINE('',#6507,#6508); +#6507 = CARTESIAN_POINT('',(150.,44.59079489546,93.589909928827)); +#6508 = VECTOR('',#6509,1.); +#6509 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6510 = ORIENTED_EDGE('',*,*,#6511,.F.); +#6511 = EDGE_CURVE('',#6487,#6504,#6512,.T.); +#6512 = CIRCLE('',#6513,2.); +#6513 = AXIS2_PLACEMENT_3D('',#6514,#6515,#6516); +#6514 = CARTESIAN_POINT('',(150.,89.916958963326,106.21434894068)); +#6515 = DIRECTION('',(1.,0.,-0.)); +#6516 = DIRECTION('',(0.,0.,1.)); +#6517 = FACE_BOUND('',#6518,.T.); +#6518 = EDGE_LOOP('',(#6519,#6529,#6538,#6546)); +#6519 = ORIENTED_EDGE('',*,*,#6520,.F.); +#6520 = EDGE_CURVE('',#6521,#6523,#6525,.T.); +#6521 = VERTEX_POINT('',#6522); +#6522 = CARTESIAN_POINT('',(150.,40.699020510842,79.70784908711)); +#6523 = VERTEX_POINT('',#6524); +#6524 = CARTESIAN_POINT('',(150.,95.860298455961,97.630834760857)); +#6525 = LINE('',#6526,#6527); +#6526 = CARTESIAN_POINT('',(150.,48.29899882796,82.177231733285)); +#6527 = VECTOR('',#6528,1.); +#6528 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6529 = ORIENTED_EDGE('',*,*,#6530,.F.); +#6530 = EDGE_CURVE('',#6531,#6521,#6533,.T.); +#6531 = VERTEX_POINT('',#6532); +#6532 = CARTESIAN_POINT('',(150.,39.462952533342,83.512075152291)); +#6533 = CIRCLE('',#6534,2.); +#6534 = AXIS2_PLACEMENT_3D('',#6535,#6536,#6537); +#6535 = CARTESIAN_POINT('',(150.,40.080986522092,81.609962119701)); +#6536 = DIRECTION('',(1.,0.,-0.)); +#6537 = DIRECTION('',(0.,0.,1.)); +#6538 = ORIENTED_EDGE('',*,*,#6539,.F.); +#6539 = EDGE_CURVE('',#6540,#6531,#6542,.T.); +#6540 = VERTEX_POINT('',#6541); +#6541 = CARTESIAN_POINT('',(150.,94.624230478461,101.43506082603)); +#6542 = LINE('',#6543,#6544); +#6543 = CARTESIAN_POINT('',(150.,47.06293085046,85.981457798466)); +#6544 = VECTOR('',#6545,1.); +#6545 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6546 = ORIENTED_EDGE('',*,*,#6547,.F.); +#6547 = EDGE_CURVE('',#6523,#6540,#6548,.T.); +#6548 = CIRCLE('',#6549,2.); +#6549 = AXIS2_PLACEMENT_3D('',#6550,#6551,#6552); +#6550 = CARTESIAN_POINT('',(150.,95.242264467211,99.532947793448)); +#6551 = DIRECTION('',(1.,0.,-0.)); +#6552 = DIRECTION('',(0.,0.,1.)); +#6553 = FACE_BOUND('',#6554,.T.); +#6554 = EDGE_LOOP('',(#6555,#6565,#6574,#6582)); +#6555 = ORIENTED_EDGE('',*,*,#6556,.F.); +#6556 = EDGE_CURVE('',#6557,#6559,#6561,.T.); +#6557 = VERTEX_POINT('',#6558); +#6558 = CARTESIAN_POINT('',(150.,44.314257247499,97.705906297207)); +#6559 = VERTEX_POINT('',#6560); +#6560 = CARTESIAN_POINT('',(150.,82.356517899305,110.0665860722)); +#6561 = LINE('',#6562,#6563); +#6562 = CARTESIAN_POINT('',(150.,43.354726917961,97.394135994007)); +#6563 = VECTOR('',#6564,1.); +#6564 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6565 = ORIENTED_EDGE('',*,*,#6566,.F.); +#6566 = EDGE_CURVE('',#6567,#6557,#6569,.T.); +#6567 = VERTEX_POINT('',#6568); +#6568 = CARTESIAN_POINT('',(150.,43.078189269999,101.51013236238)); +#6569 = CIRCLE('',#6570,2.); +#6570 = AXIS2_PLACEMENT_3D('',#6571,#6572,#6573); +#6571 = CARTESIAN_POINT('',(150.,43.696223258749,99.608019329798)); +#6572 = DIRECTION('',(1.,0.,-0.)); +#6573 = DIRECTION('',(0.,0.,1.)); +#6574 = ORIENTED_EDGE('',*,*,#6575,.F.); +#6575 = EDGE_CURVE('',#6576,#6567,#6578,.T.); +#6576 = VERTEX_POINT('',#6577); +#6577 = CARTESIAN_POINT('',(150.,81.120449921805,113.87081213738)); +#6578 = LINE('',#6579,#6580); +#6579 = CARTESIAN_POINT('',(150.,42.118658940461,101.19836205918)); +#6580 = VECTOR('',#6581,1.); +#6581 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6582 = ORIENTED_EDGE('',*,*,#6583,.F.); +#6583 = EDGE_CURVE('',#6559,#6576,#6584,.T.); +#6584 = CIRCLE('',#6585,2.); +#6585 = AXIS2_PLACEMENT_3D('',#6586,#6587,#6588); +#6586 = CARTESIAN_POINT('',(150.,81.738483910555,111.96869910479)); +#6587 = DIRECTION('',(1.,0.,-0.)); +#6588 = DIRECTION('',(0.,0.,1.)); +#6589 = FACE_BOUND('',#6590,.T.); +#6590 = EDGE_LOOP('',(#6591,#6601,#6609,#6617)); +#6591 = ORIENTED_EDGE('',*,*,#6592,.T.); +#6592 = EDGE_CURVE('',#6593,#6595,#6597,.T.); +#6593 = VERTEX_POINT('',#6594); +#6594 = CARTESIAN_POINT('',(150.,121.43614694383,130.)); +#6595 = VERTEX_POINT('',#6596); +#6596 = CARTESIAN_POINT('',(150.,10.,130.)); +#6597 = LINE('',#6598,#6599); +#6598 = CARTESIAN_POINT('',(150.,75.,130.)); +#6599 = VECTOR('',#6600,1.); +#6600 = DIRECTION('',(0.,-1.,0.)); +#6601 = ORIENTED_EDGE('',*,*,#6602,.T.); +#6602 = EDGE_CURVE('',#6595,#6603,#6605,.T.); +#6603 = VERTEX_POINT('',#6604); +#6604 = CARTESIAN_POINT('',(150.,10.,24.278441447094)); +#6605 = LINE('',#6606,#6607); +#6606 = CARTESIAN_POINT('',(150.,10.,0.)); +#6607 = VECTOR('',#6608,1.); +#6608 = DIRECTION('',(0.,0.,-1.)); +#6609 = ORIENTED_EDGE('',*,*,#6610,.T.); +#6610 = EDGE_CURVE('',#6603,#6611,#6613,.T.); +#6611 = VERTEX_POINT('',#6612); +#6612 = CARTESIAN_POINT('',(150.,131.90718208477,63.888486018689)); +#6613 = LINE('',#6614,#6615); +#6614 = CARTESIAN_POINT('',(150.,61.657797401562,41.063077286871)); +#6615 = VECTOR('',#6616,1.); +#6616 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6617 = ORIENTED_EDGE('',*,*,#6618,.T.); +#6618 = EDGE_CURVE('',#6611,#6593,#6619,.T.); +#6619 = LINE('',#6620,#6621); +#6620 = CARTESIAN_POINT('',(150.,140.38587817757,10.356105720284)); +#6621 = VECTOR('',#6622,1.); +#6622 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#6623 = FACE_BOUND('',#6624,.T.); +#6624 = EDGE_LOOP('',(#6625,#6636,#6644,#6653)); +#6625 = ORIENTED_EDGE('',*,*,#6626,.T.); +#6626 = EDGE_CURVE('',#6627,#6629,#6631,.T.); +#6627 = VERTEX_POINT('',#6628); +#6628 = CARTESIAN_POINT('',(150.,45.643292420841,64.490944826388)); +#6629 = VERTEX_POINT('',#6630); +#6630 = CARTESIAN_POINT('',(150.,44.407224443341,68.295170891569)); +#6631 = CIRCLE('',#6632,2.); +#6632 = AXIS2_PLACEMENT_3D('',#6633,#6634,#6635); +#6633 = CARTESIAN_POINT('',(150.,45.025258432091,66.393057858978)); +#6634 = DIRECTION('',(-1.,0.,0.)); +#6635 = DIRECTION('',(0.,0.,1.)); +#6636 = ORIENTED_EDGE('',*,*,#6637,.T.); +#6637 = EDGE_CURVE('',#6629,#6638,#6640,.T.); +#6638 = VERTEX_POINT('',#6639); +#6639 = CARTESIAN_POINT('',(150.,99.56850238846,86.218156565315)); +#6640 = LINE('',#6641,#6642); +#6641 = CARTESIAN_POINT('',(150.,52.007202760459,70.764553537743)); +#6642 = VECTOR('',#6643,1.); +#6643 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6644 = ORIENTED_EDGE('',*,*,#6645,.T.); +#6645 = EDGE_CURVE('',#6638,#6646,#6648,.T.); +#6646 = VERTEX_POINT('',#6647); +#6647 = CARTESIAN_POINT('',(150.,100.80457036596,82.413930500135)); +#6648 = CIRCLE('',#6649,2.); +#6649 = AXIS2_PLACEMENT_3D('',#6650,#6651,#6652); +#6650 = CARTESIAN_POINT('',(150.,100.18653637721,84.316043532725)); +#6651 = DIRECTION('',(-1.,0.,0.)); +#6652 = DIRECTION('',(0.,0.,1.)); +#6653 = ORIENTED_EDGE('',*,*,#6654,.T.); +#6654 = EDGE_CURVE('',#6646,#6627,#6655,.T.); +#6655 = LINE('',#6656,#6657); +#6656 = CARTESIAN_POINT('',(150.,53.243270737959,66.960327472563)); +#6657 = VECTOR('',#6658,1.); +#6658 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6659 = FACE_BOUND('',#6660,.T.); +#6660 = EDGE_LOOP('',(#6661,#6672,#6680,#6689)); +#6661 = ORIENTED_EDGE('',*,*,#6662,.T.); +#6662 = EDGE_CURVE('',#6663,#6665,#6667,.T.); +#6663 = VERTEX_POINT('',#6664); +#6664 = CARTESIAN_POINT('',(150.,42.220099949546,71.790379962374)); +#6665 = VERTEX_POINT('',#6666); +#6666 = CARTESIAN_POINT('',(150.,40.984031972046,75.594606027555)); +#6667 = CIRCLE('',#6668,2.); +#6668 = AXIS2_PLACEMENT_3D('',#6669,#6670,#6671); +#6669 = CARTESIAN_POINT('',(150.,41.602065960796,73.692492994964)); +#6670 = DIRECTION('',(-1.,0.,0.)); +#6671 = DIRECTION('',(0.,0.,1.)); +#6672 = ORIENTED_EDGE('',*,*,#6673,.T.); +#6673 = EDGE_CURVE('',#6665,#6674,#6676,.T.); +#6674 = VERTEX_POINT('',#6675); +#6675 = CARTESIAN_POINT('',(150.,98.047422949756,94.135625690052)); +#6676 = LINE('',#6677,#6678); +#6677 = CARTESIAN_POINT('',(150.,49.53506680546,78.373005668104)); +#6678 = VECTOR('',#6679,1.); +#6679 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6680 = ORIENTED_EDGE('',*,*,#6681,.T.); +#6681 = EDGE_CURVE('',#6674,#6682,#6684,.T.); +#6682 = VERTEX_POINT('',#6683); +#6683 = CARTESIAN_POINT('',(150.,99.283490927255,90.331399624871)); +#6684 = CIRCLE('',#6685,2.); +#6685 = AXIS2_PLACEMENT_3D('',#6686,#6687,#6688); +#6686 = CARTESIAN_POINT('',(150.,98.665456938505,92.233512657461)); +#6687 = DIRECTION('',(-1.,0.,0.)); +#6688 = DIRECTION('',(0.,0.,1.)); +#6689 = ORIENTED_EDGE('',*,*,#6690,.T.); +#6690 = EDGE_CURVE('',#6682,#6663,#6691,.T.); +#6691 = LINE('',#6692,#6693); +#6692 = CARTESIAN_POINT('',(150.,50.771134782959,74.568779602924)); +#6693 = VECTOR('',#6694,1.); +#6694 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6695 = FACE_BOUND('',#6696,.T.); +#6696 = EDGE_LOOP('',(#6697,#6708,#6716,#6725)); +#6697 = ORIENTED_EDGE('',*,*,#6698,.T.); +#6698 = EDGE_CURVE('',#6699,#6701,#6703,.T.); +#6699 = VERTEX_POINT('',#6700); +#6700 = CARTESIAN_POINT('',(150.,73.031887128038,48.154945317178)); +#6701 = VERTEX_POINT('',#6702); +#6702 = CARTESIAN_POINT('',(150.,71.795819150538,51.959171382359)); +#6703 = CIRCLE('',#6704,2.); +#6704 = AXIS2_PLACEMENT_3D('',#6705,#6706,#6707); +#6705 = CARTESIAN_POINT('',(150.,72.413853139288,50.057058349768)); +#6706 = DIRECTION('',(-1.,0.,0.)); +#6707 = DIRECTION('',(0.,0.,1.)); +#6708 = ORIENTED_EDGE('',*,*,#6709,.T.); +#6709 = EDGE_CURVE('',#6701,#6710,#6712,.T.); +#6710 = VERTEX_POINT('',#6711); +#6711 = CARTESIAN_POINT('',(150.,87.01272341126,56.903443292358)); +#6712 = LINE('',#6713,#6714); +#6713 = CARTESIAN_POINT('',(150.,59.423610625458,47.93919714666)); +#6714 = VECTOR('',#6715,1.); +#6715 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6716 = ORIENTED_EDGE('',*,*,#6717,.T.); +#6717 = EDGE_CURVE('',#6710,#6718,#6720,.T.); +#6718 = VERTEX_POINT('',#6719); +#6719 = CARTESIAN_POINT('',(150.,88.24879138876,53.099217227177)); +#6720 = CIRCLE('',#6721,2.); +#6721 = AXIS2_PLACEMENT_3D('',#6722,#6723,#6724); +#6722 = CARTESIAN_POINT('',(150.,87.63075740001,55.001330259768)); +#6723 = DIRECTION('',(-1.,0.,0.)); +#6724 = DIRECTION('',(0.,0.,1.)); +#6725 = ORIENTED_EDGE('',*,*,#6726,.T.); +#6726 = EDGE_CURVE('',#6718,#6699,#6727,.T.); +#6727 = LINE('',#6728,#6729); +#6728 = CARTESIAN_POINT('',(150.,60.659678602958,44.134971081479)); +#6729 = VECTOR('',#6730,1.); +#6730 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6731 = FACE_BOUND('',#6732,.T.); +#6732 = EDGE_LOOP('',(#6733,#6744,#6752,#6761)); +#6733 = ORIENTED_EDGE('',*,*,#6734,.T.); +#6734 = EDGE_CURVE('',#6735,#6737,#6739,.T.); +#6735 = VERTEX_POINT('',#6736); +#6736 = CARTESIAN_POINT('',(150.,50.968597924726,57.809543679152)); +#6737 = VERTEX_POINT('',#6738); +#6738 = CARTESIAN_POINT('',(150.,49.732529947226,61.613769744332)); +#6739 = CIRCLE('',#6740,2.); +#6740 = AXIS2_PLACEMENT_3D('',#6741,#6742,#6743); +#6741 = CARTESIAN_POINT('',(150.,50.350563935976,59.711656711742)); +#6742 = DIRECTION('',(-1.,0.,0.)); +#6743 = DIRECTION('',(0.,0.,1.)); +#6744 = ORIENTED_EDGE('',*,*,#6745,.T.); +#6745 = EDGE_CURVE('',#6737,#6746,#6748,.T.); +#6746 = VERTEX_POINT('',#6747); +#6747 = CARTESIAN_POINT('',(150.,99.187468794574,77.682653451829)); +#6748 = LINE('',#6749,#6750); +#6749 = CARTESIAN_POINT('',(150.,54.479338715459,63.156101407382)); +#6750 = VECTOR('',#6751,1.); +#6751 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6752 = ORIENTED_EDGE('',*,*,#6753,.T.); +#6753 = EDGE_CURVE('',#6746,#6754,#6756,.T.); +#6754 = VERTEX_POINT('',#6755); +#6755 = CARTESIAN_POINT('',(150.,100.42353677207,73.878427386649)); +#6756 = CIRCLE('',#6757,2.); +#6757 = AXIS2_PLACEMENT_3D('',#6758,#6759,#6760); +#6758 = CARTESIAN_POINT('',(150.,99.805502783324,75.780540419239)); +#6759 = DIRECTION('',(-1.,0.,0.)); +#6760 = DIRECTION('',(0.,0.,1.)); +#6761 = ORIENTED_EDGE('',*,*,#6762,.T.); +#6762 = EDGE_CURVE('',#6754,#6735,#6763,.T.); +#6763 = LINE('',#6764,#6765); +#6764 = CARTESIAN_POINT('',(150.,55.715406692959,59.351875342201)); +#6765 = VECTOR('',#6766,1.); +#6766 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6767 = FACE_BOUND('',#6768,.T.); +#6768 = EDGE_LOOP('',(#6769,#6780,#6788,#6797)); +#6769 = ORIENTED_EDGE('',*,*,#6770,.T.); +#6770 = EDGE_CURVE('',#6771,#6773,#6775,.T.); +#6771 = VERTEX_POINT('',#6772); +#6772 = CARTESIAN_POINT('',(150.,53.254799488041,109.02256236006)); +#6773 = VERTEX_POINT('',#6774); +#6774 = CARTESIAN_POINT('',(150.,52.018731510541,112.82678842524)); +#6775 = CIRCLE('',#6776,2.); +#6776 = AXIS2_PLACEMENT_3D('',#6777,#6778,#6779); +#6777 = CARTESIAN_POINT('',(150.,52.636765499291,110.92467539265)); +#6778 = DIRECTION('',(-1.,0.,0.)); +#6779 = DIRECTION('',(0.,0.,1.)); +#6780 = ORIENTED_EDGE('',*,*,#6781,.T.); +#6781 = EDGE_CURVE('',#6773,#6782,#6784,.T.); +#6782 = VERTEX_POINT('',#6783); +#6783 = CARTESIAN_POINT('',(150.,67.235635771264,117.77106033524)); +#6784 = LINE('',#6785,#6786); +#6785 = CARTESIAN_POINT('',(150.,39.646522985461,108.80681418954)); +#6786 = VECTOR('',#6787,1.); +#6787 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6788 = ORIENTED_EDGE('',*,*,#6789,.T.); +#6789 = EDGE_CURVE('',#6782,#6790,#6792,.T.); +#6790 = VERTEX_POINT('',#6791); +#6791 = CARTESIAN_POINT('',(150.,68.471703748764,113.96683427006)); +#6792 = CIRCLE('',#6793,2.); +#6793 = AXIS2_PLACEMENT_3D('',#6794,#6795,#6796); +#6794 = CARTESIAN_POINT('',(150.,67.853669760014,115.86894730265)); +#6795 = DIRECTION('',(-1.,0.,0.)); +#6796 = DIRECTION('',(0.,0.,1.)); +#6797 = ORIENTED_EDGE('',*,*,#6798,.T.); +#6798 = EDGE_CURVE('',#6790,#6771,#6799,.T.); +#6799 = LINE('',#6800,#6801); +#6800 = CARTESIAN_POINT('',(150.,40.882590962961,105.00258812436)); +#6801 = VECTOR('',#6802,1.); +#6802 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6803 = FACE_BOUND('',#6804,.T.); +#6804 = EDGE_LOOP('',(#6805,#6816,#6824,#6833)); +#6805 = ORIENTED_EDGE('',*,*,#6806,.T.); +#6806 = EDGE_CURVE('',#6807,#6809,#6811,.T.); +#6807 = VERTEX_POINT('',#6808); +#6808 = CARTESIAN_POINT('',(150.,59.147072977496,52.05519351504)); +#6809 = VERTEX_POINT('',#6810); +#6810 = CARTESIAN_POINT('',(150.,57.911004999996,55.85941958022)); +#6811 = CIRCLE('',#6812,2.); +#6812 = AXIS2_PLACEMENT_3D('',#6813,#6814,#6815); +#6813 = CARTESIAN_POINT('',(150.,58.529038988746,53.95730654763)); +#6814 = DIRECTION('',(-1.,0.,0.)); +#6815 = DIRECTION('',(0.,0.,1.)); +#6816 = ORIENTED_EDGE('',*,*,#6817,.T.); +#6817 = EDGE_CURVE('',#6809,#6818,#6820,.T.); +#6818 = VERTEX_POINT('',#6819); +#6819 = CARTESIAN_POINT('',(150.,95.953265651803,68.220099355218)); +#6820 = LINE('',#6821,#6822); +#6821 = CARTESIAN_POINT('',(150.,56.951474670458,55.547649277021)); +#6822 = VECTOR('',#6823,1.); +#6823 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6824 = ORIENTED_EDGE('',*,*,#6825,.T.); +#6825 = EDGE_CURVE('',#6818,#6826,#6828,.T.); +#6826 = VERTEX_POINT('',#6827); +#6827 = CARTESIAN_POINT('',(150.,97.189333629303,64.415873290038)); +#6828 = CIRCLE('',#6829,2.); +#6829 = AXIS2_PLACEMENT_3D('',#6830,#6831,#6832); +#6830 = CARTESIAN_POINT('',(150.,96.571299640553,66.317986322628)); +#6831 = DIRECTION('',(-1.,0.,0.)); +#6832 = DIRECTION('',(0.,0.,1.)); +#6833 = ORIENTED_EDGE('',*,*,#6834,.T.); +#6834 = EDGE_CURVE('',#6826,#6807,#6835,.T.); +#6835 = LINE('',#6836,#6837); +#6836 = CARTESIAN_POINT('',(150.,58.187542647958,51.74342321184)); +#6837 = VECTOR('',#6838,1.); +#6838 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6839 = PLANE('',#6840); +#6840 = AXIS2_PLACEMENT_3D('',#6841,#6842,#6843); +#6841 = CARTESIAN_POINT('',(150.,75.,0.)); +#6842 = DIRECTION('',(-1.,0.,0.)); +#6843 = DIRECTION('',(0.,0.,1.)); +#6844 = ADVANCED_FACE('',(#6845,#6881,#6917,#6953,#6989,#7025,#7061, + #7095,#7131,#7167),#7203,.T.); +#6845 = FACE_BOUND('',#6846,.T.); +#6846 = EDGE_LOOP('',(#6847,#6858,#6866,#6875)); +#6847 = ORIENTED_EDGE('',*,*,#6848,.T.); +#6848 = EDGE_CURVE('',#6849,#6851,#6853,.T.); +#6849 = VERTEX_POINT('',#6850); +#6850 = CARTESIAN_POINT('',(147.5,39.843986127228,92.047578265777)); +#6851 = VERTEX_POINT('',#6852); +#6852 = CARTESIAN_POINT('',(147.5,41.080054104728,88.243352200596)); +#6853 = CIRCLE('',#6854,2.); +#6854 = AXIS2_PLACEMENT_3D('',#6855,#6856,#6857); +#6855 = CARTESIAN_POINT('',(147.5,40.462020115978,90.145465233187)); +#6856 = DIRECTION('',(1.,0.,-0.)); +#6857 = DIRECTION('',(0.,0.,1.)); +#6858 = ORIENTED_EDGE('',*,*,#6859,.T.); +#6859 = EDGE_CURVE('',#6851,#6860,#6862,.T.); +#6860 = VERTEX_POINT('',#6861); +#6861 = CARTESIAN_POINT('',(147.5,90.534992952076,104.31223590809)); +#6862 = LINE('',#6863,#6864); +#6863 = CARTESIAN_POINT('',(147.5,45.82686287296,89.785683863646)); +#6864 = VECTOR('',#6865,1.); +#6865 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6866 = ORIENTED_EDGE('',*,*,#6867,.T.); +#6867 = EDGE_CURVE('',#6860,#6868,#6870,.T.); +#6868 = VERTEX_POINT('',#6869); +#6869 = CARTESIAN_POINT('',(147.5,89.298924974576,108.11646197327)); +#6870 = CIRCLE('',#6871,2.); +#6871 = AXIS2_PLACEMENT_3D('',#6872,#6873,#6874); +#6872 = CARTESIAN_POINT('',(147.5,89.916958963326,106.21434894068)); +#6873 = DIRECTION('',(1.,0.,-0.)); +#6874 = DIRECTION('',(0.,0.,1.)); +#6875 = ORIENTED_EDGE('',*,*,#6876,.T.); +#6876 = EDGE_CURVE('',#6868,#6849,#6877,.T.); +#6877 = LINE('',#6878,#6879); +#6878 = CARTESIAN_POINT('',(147.5,44.59079489546,93.589909928827)); +#6879 = VECTOR('',#6880,1.); +#6880 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6881 = FACE_BOUND('',#6882,.T.); +#6882 = EDGE_LOOP('',(#6883,#6894,#6902,#6911)); +#6883 = ORIENTED_EDGE('',*,*,#6884,.T.); +#6884 = EDGE_CURVE('',#6885,#6887,#6889,.T.); +#6885 = VERTEX_POINT('',#6886); +#6886 = CARTESIAN_POINT('',(147.5,39.462952533342,83.512075152291)); +#6887 = VERTEX_POINT('',#6888); +#6888 = CARTESIAN_POINT('',(147.5,40.699020510842,79.70784908711)); +#6889 = CIRCLE('',#6890,2.); +#6890 = AXIS2_PLACEMENT_3D('',#6891,#6892,#6893); +#6891 = CARTESIAN_POINT('',(147.5,40.080986522092,81.609962119701)); +#6892 = DIRECTION('',(1.,0.,-0.)); +#6893 = DIRECTION('',(0.,0.,1.)); +#6894 = ORIENTED_EDGE('',*,*,#6895,.T.); +#6895 = EDGE_CURVE('',#6887,#6896,#6898,.T.); +#6896 = VERTEX_POINT('',#6897); +#6897 = CARTESIAN_POINT('',(147.5,95.860298455961,97.630834760857)); +#6898 = LINE('',#6899,#6900); +#6899 = CARTESIAN_POINT('',(147.5,48.29899882796,82.177231733285)); +#6900 = VECTOR('',#6901,1.); +#6901 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6902 = ORIENTED_EDGE('',*,*,#6903,.T.); +#6903 = EDGE_CURVE('',#6896,#6904,#6906,.T.); +#6904 = VERTEX_POINT('',#6905); +#6905 = CARTESIAN_POINT('',(147.5,94.624230478461,101.43506082603)); +#6906 = CIRCLE('',#6907,2.); +#6907 = AXIS2_PLACEMENT_3D('',#6908,#6909,#6910); +#6908 = CARTESIAN_POINT('',(147.5,95.242264467211,99.532947793448)); +#6909 = DIRECTION('',(1.,0.,-0.)); +#6910 = DIRECTION('',(0.,0.,1.)); +#6911 = ORIENTED_EDGE('',*,*,#6912,.T.); +#6912 = EDGE_CURVE('',#6904,#6885,#6913,.T.); +#6913 = LINE('',#6914,#6915); +#6914 = CARTESIAN_POINT('',(147.5,47.06293085046,85.981457798466)); +#6915 = VECTOR('',#6916,1.); +#6916 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6917 = FACE_BOUND('',#6918,.T.); +#6918 = EDGE_LOOP('',(#6919,#6929,#6938,#6946)); +#6919 = ORIENTED_EDGE('',*,*,#6920,.F.); +#6920 = EDGE_CURVE('',#6921,#6923,#6925,.T.); +#6921 = VERTEX_POINT('',#6922); +#6922 = CARTESIAN_POINT('',(147.5,52.018731510541,112.82678842524)); +#6923 = VERTEX_POINT('',#6924); +#6924 = CARTESIAN_POINT('',(147.5,67.235635771264,117.77106033524)); +#6925 = LINE('',#6926,#6927); +#6926 = CARTESIAN_POINT('',(147.5,39.646522985461,108.80681418954)); +#6927 = VECTOR('',#6928,1.); +#6928 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6929 = ORIENTED_EDGE('',*,*,#6930,.F.); +#6930 = EDGE_CURVE('',#6931,#6921,#6933,.T.); +#6931 = VERTEX_POINT('',#6932); +#6932 = CARTESIAN_POINT('',(147.5,53.254799488041,109.02256236006)); +#6933 = CIRCLE('',#6934,2.); +#6934 = AXIS2_PLACEMENT_3D('',#6935,#6936,#6937); +#6935 = CARTESIAN_POINT('',(147.5,52.636765499291,110.92467539265)); +#6936 = DIRECTION('',(-1.,0.,0.)); +#6937 = DIRECTION('',(0.,0.,1.)); +#6938 = ORIENTED_EDGE('',*,*,#6939,.F.); +#6939 = EDGE_CURVE('',#6940,#6931,#6942,.T.); +#6940 = VERTEX_POINT('',#6941); +#6941 = CARTESIAN_POINT('',(147.5,68.471703748764,113.96683427006)); +#6942 = LINE('',#6943,#6944); +#6943 = CARTESIAN_POINT('',(147.5,40.882590962961,105.00258812436)); +#6944 = VECTOR('',#6945,1.); +#6945 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6946 = ORIENTED_EDGE('',*,*,#6947,.F.); +#6947 = EDGE_CURVE('',#6923,#6940,#6948,.T.); +#6948 = CIRCLE('',#6949,2.); +#6949 = AXIS2_PLACEMENT_3D('',#6950,#6951,#6952); +#6950 = CARTESIAN_POINT('',(147.5,67.853669760014,115.86894730265)); +#6951 = DIRECTION('',(-1.,0.,0.)); +#6952 = DIRECTION('',(0.,0.,1.)); +#6953 = FACE_BOUND('',#6954,.T.); +#6954 = EDGE_LOOP('',(#6955,#6965,#6974,#6982)); +#6955 = ORIENTED_EDGE('',*,*,#6956,.F.); +#6956 = EDGE_CURVE('',#6957,#6959,#6961,.T.); +#6957 = VERTEX_POINT('',#6958); +#6958 = CARTESIAN_POINT('',(147.5,71.795819150538,51.959171382359)); +#6959 = VERTEX_POINT('',#6960); +#6960 = CARTESIAN_POINT('',(147.5,87.01272341126,56.903443292358)); +#6961 = LINE('',#6962,#6963); +#6962 = CARTESIAN_POINT('',(147.5,59.423610625458,47.93919714666)); +#6963 = VECTOR('',#6964,1.); +#6964 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#6965 = ORIENTED_EDGE('',*,*,#6966,.F.); +#6966 = EDGE_CURVE('',#6967,#6957,#6969,.T.); +#6967 = VERTEX_POINT('',#6968); +#6968 = CARTESIAN_POINT('',(147.5,73.031887128038,48.154945317178)); +#6969 = CIRCLE('',#6970,2.); +#6970 = AXIS2_PLACEMENT_3D('',#6971,#6972,#6973); +#6971 = CARTESIAN_POINT('',(147.5,72.413853139288,50.057058349768)); +#6972 = DIRECTION('',(-1.,0.,0.)); +#6973 = DIRECTION('',(0.,0.,1.)); +#6974 = ORIENTED_EDGE('',*,*,#6975,.F.); +#6975 = EDGE_CURVE('',#6976,#6967,#6978,.T.); +#6976 = VERTEX_POINT('',#6977); +#6977 = CARTESIAN_POINT('',(147.5,88.24879138876,53.099217227177)); +#6978 = LINE('',#6979,#6980); +#6979 = CARTESIAN_POINT('',(147.5,60.659678602958,44.134971081479)); +#6980 = VECTOR('',#6981,1.); +#6981 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#6982 = ORIENTED_EDGE('',*,*,#6983,.F.); +#6983 = EDGE_CURVE('',#6959,#6976,#6984,.T.); +#6984 = CIRCLE('',#6985,2.); +#6985 = AXIS2_PLACEMENT_3D('',#6986,#6987,#6988); +#6986 = CARTESIAN_POINT('',(147.5,87.63075740001,55.001330259768)); +#6987 = DIRECTION('',(-1.,0.,0.)); +#6988 = DIRECTION('',(0.,0.,1.)); +#6989 = FACE_BOUND('',#6990,.T.); +#6990 = EDGE_LOOP('',(#6991,#7001,#7010,#7018)); +#6991 = ORIENTED_EDGE('',*,*,#6992,.F.); +#6992 = EDGE_CURVE('',#6993,#6995,#6997,.T.); +#6993 = VERTEX_POINT('',#6994); +#6994 = CARTESIAN_POINT('',(147.5,44.407224443341,68.295170891569)); +#6995 = VERTEX_POINT('',#6996); +#6996 = CARTESIAN_POINT('',(147.5,99.56850238846,86.218156565315)); +#6997 = LINE('',#6998,#6999); +#6998 = CARTESIAN_POINT('',(147.5,52.007202760459,70.764553537743)); +#6999 = VECTOR('',#7000,1.); +#7000 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7001 = ORIENTED_EDGE('',*,*,#7002,.F.); +#7002 = EDGE_CURVE('',#7003,#6993,#7005,.T.); +#7003 = VERTEX_POINT('',#7004); +#7004 = CARTESIAN_POINT('',(147.5,45.643292420841,64.490944826388)); +#7005 = CIRCLE('',#7006,2.); +#7006 = AXIS2_PLACEMENT_3D('',#7007,#7008,#7009); +#7007 = CARTESIAN_POINT('',(147.5,45.025258432091,66.393057858978)); +#7008 = DIRECTION('',(-1.,0.,0.)); +#7009 = DIRECTION('',(0.,0.,1.)); +#7010 = ORIENTED_EDGE('',*,*,#7011,.F.); +#7011 = EDGE_CURVE('',#7012,#7003,#7014,.T.); +#7012 = VERTEX_POINT('',#7013); +#7013 = CARTESIAN_POINT('',(147.5,100.80457036596,82.413930500135)); +#7014 = LINE('',#7015,#7016); +#7015 = CARTESIAN_POINT('',(147.5,53.243270737959,66.960327472563)); +#7016 = VECTOR('',#7017,1.); +#7017 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7018 = ORIENTED_EDGE('',*,*,#7019,.F.); +#7019 = EDGE_CURVE('',#6995,#7012,#7020,.T.); +#7020 = CIRCLE('',#7021,2.); +#7021 = AXIS2_PLACEMENT_3D('',#7022,#7023,#7024); +#7022 = CARTESIAN_POINT('',(147.5,100.18653637721,84.316043532725)); +#7023 = DIRECTION('',(-1.,0.,0.)); +#7024 = DIRECTION('',(0.,0.,1.)); +#7025 = FACE_BOUND('',#7026,.T.); +#7026 = EDGE_LOOP('',(#7027,#7038,#7046,#7055)); +#7027 = ORIENTED_EDGE('',*,*,#7028,.T.); +#7028 = EDGE_CURVE('',#7029,#7031,#7033,.T.); +#7029 = VERTEX_POINT('',#7030); +#7030 = CARTESIAN_POINT('',(147.5,43.078189269999,101.51013236238)); +#7031 = VERTEX_POINT('',#7032); +#7032 = CARTESIAN_POINT('',(147.5,44.314257247499,97.705906297207)); +#7033 = CIRCLE('',#7034,2.); +#7034 = AXIS2_PLACEMENT_3D('',#7035,#7036,#7037); +#7035 = CARTESIAN_POINT('',(147.5,43.696223258749,99.608019329798)); +#7036 = DIRECTION('',(1.,0.,-0.)); +#7037 = DIRECTION('',(0.,0.,1.)); +#7038 = ORIENTED_EDGE('',*,*,#7039,.T.); +#7039 = EDGE_CURVE('',#7031,#7040,#7042,.T.); +#7040 = VERTEX_POINT('',#7041); +#7041 = CARTESIAN_POINT('',(147.5,82.356517899305,110.0665860722)); +#7042 = LINE('',#7043,#7044); +#7043 = CARTESIAN_POINT('',(147.5,43.354726917961,97.394135994007)); +#7044 = VECTOR('',#7045,1.); +#7045 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7046 = ORIENTED_EDGE('',*,*,#7047,.T.); +#7047 = EDGE_CURVE('',#7040,#7048,#7050,.T.); +#7048 = VERTEX_POINT('',#7049); +#7049 = CARTESIAN_POINT('',(147.5,81.120449921805,113.87081213738)); +#7050 = CIRCLE('',#7051,2.); +#7051 = AXIS2_PLACEMENT_3D('',#7052,#7053,#7054); +#7052 = CARTESIAN_POINT('',(147.5,81.738483910555,111.96869910479)); +#7053 = DIRECTION('',(1.,0.,-0.)); +#7054 = DIRECTION('',(0.,0.,1.)); +#7055 = ORIENTED_EDGE('',*,*,#7056,.T.); +#7056 = EDGE_CURVE('',#7048,#7029,#7057,.T.); +#7057 = LINE('',#7058,#7059); +#7058 = CARTESIAN_POINT('',(147.5,42.118658940461,101.19836205918)); +#7059 = VECTOR('',#7060,1.); +#7060 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7061 = FACE_BOUND('',#7062,.T.); +#7062 = EDGE_LOOP('',(#7063,#7073,#7081,#7089)); +#7063 = ORIENTED_EDGE('',*,*,#7064,.F.); +#7064 = EDGE_CURVE('',#7065,#7067,#7069,.T.); +#7065 = VERTEX_POINT('',#7066); +#7066 = CARTESIAN_POINT('',(147.5,10.,130.)); +#7067 = VERTEX_POINT('',#7068); +#7068 = CARTESIAN_POINT('',(147.5,10.,24.278441447094)); +#7069 = LINE('',#7070,#7071); +#7070 = CARTESIAN_POINT('',(147.5,10.,0.)); +#7071 = VECTOR('',#7072,1.); +#7072 = DIRECTION('',(0.,0.,-1.)); +#7073 = ORIENTED_EDGE('',*,*,#7074,.F.); +#7074 = EDGE_CURVE('',#7075,#7065,#7077,.T.); +#7075 = VERTEX_POINT('',#7076); +#7076 = CARTESIAN_POINT('',(147.5,122.44861206962,130.)); +#7077 = LINE('',#7078,#7079); +#7078 = CARTESIAN_POINT('',(147.5,75.,130.)); +#7079 = VECTOR('',#7080,1.); +#7080 = DIRECTION('',(0.,-1.,0.)); +#7081 = ORIENTED_EDGE('',*,*,#7082,.T.); +#7082 = EDGE_CURVE('',#7075,#7083,#7085,.T.); +#7083 = VERTEX_POINT('',#7084); +#7084 = CARTESIAN_POINT('',(147.5,132.87009364017,64.201354948769)); +#7085 = LINE('',#7086,#7087); +#7086 = CARTESIAN_POINT('',(147.5,122.80787545492,127.73170025691)); +#7087 = VECTOR('',#7088,1.); +#7088 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#7089 = ORIENTED_EDGE('',*,*,#7090,.F.); +#7090 = EDGE_CURVE('',#7067,#7083,#7091,.T.); +#7091 = LINE('',#7092,#7093); +#7092 = CARTESIAN_POINT('',(147.5,65.148898834638,42.197404904024)); +#7093 = VECTOR('',#7094,1.); +#7094 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7095 = FACE_BOUND('',#7096,.T.); +#7096 = EDGE_LOOP('',(#7097,#7107,#7116,#7124)); +#7097 = ORIENTED_EDGE('',*,*,#7098,.F.); +#7098 = EDGE_CURVE('',#7099,#7101,#7103,.T.); +#7099 = VERTEX_POINT('',#7100); +#7100 = CARTESIAN_POINT('',(147.5,40.984031972046,75.594606027555)); +#7101 = VERTEX_POINT('',#7102); +#7102 = CARTESIAN_POINT('',(147.5,98.047422949756,94.135625690052)); +#7103 = LINE('',#7104,#7105); +#7104 = CARTESIAN_POINT('',(147.5,49.53506680546,78.373005668104)); +#7105 = VECTOR('',#7106,1.); +#7106 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7107 = ORIENTED_EDGE('',*,*,#7108,.F.); +#7108 = EDGE_CURVE('',#7109,#7099,#7111,.T.); +#7109 = VERTEX_POINT('',#7110); +#7110 = CARTESIAN_POINT('',(147.5,42.220099949546,71.790379962374)); +#7111 = CIRCLE('',#7112,2.); +#7112 = AXIS2_PLACEMENT_3D('',#7113,#7114,#7115); +#7113 = CARTESIAN_POINT('',(147.5,41.602065960796,73.692492994964)); +#7114 = DIRECTION('',(-1.,0.,0.)); +#7115 = DIRECTION('',(0.,0.,1.)); +#7116 = ORIENTED_EDGE('',*,*,#7117,.F.); +#7117 = EDGE_CURVE('',#7118,#7109,#7120,.T.); +#7118 = VERTEX_POINT('',#7119); +#7119 = CARTESIAN_POINT('',(147.5,99.283490927255,90.331399624871)); +#7120 = LINE('',#7121,#7122); +#7121 = CARTESIAN_POINT('',(147.5,50.771134782959,74.568779602924)); +#7122 = VECTOR('',#7123,1.); +#7123 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7124 = ORIENTED_EDGE('',*,*,#7125,.F.); +#7125 = EDGE_CURVE('',#7101,#7118,#7126,.T.); +#7126 = CIRCLE('',#7127,2.); +#7127 = AXIS2_PLACEMENT_3D('',#7128,#7129,#7130); +#7128 = CARTESIAN_POINT('',(147.5,98.665456938505,92.233512657461)); +#7129 = DIRECTION('',(-1.,0.,0.)); +#7130 = DIRECTION('',(0.,0.,1.)); +#7131 = FACE_BOUND('',#7132,.T.); +#7132 = EDGE_LOOP('',(#7133,#7143,#7152,#7160)); +#7133 = ORIENTED_EDGE('',*,*,#7134,.F.); +#7134 = EDGE_CURVE('',#7135,#7137,#7139,.T.); +#7135 = VERTEX_POINT('',#7136); +#7136 = CARTESIAN_POINT('',(147.5,49.732529947226,61.613769744332)); +#7137 = VERTEX_POINT('',#7138); +#7138 = CARTESIAN_POINT('',(147.5,99.187468794574,77.682653451829)); +#7139 = LINE('',#7140,#7141); +#7140 = CARTESIAN_POINT('',(147.5,54.479338715459,63.156101407382)); +#7141 = VECTOR('',#7142,1.); +#7142 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7143 = ORIENTED_EDGE('',*,*,#7144,.F.); +#7144 = EDGE_CURVE('',#7145,#7135,#7147,.T.); +#7145 = VERTEX_POINT('',#7146); +#7146 = CARTESIAN_POINT('',(147.5,50.968597924726,57.809543679152)); +#7147 = CIRCLE('',#7148,2.); +#7148 = AXIS2_PLACEMENT_3D('',#7149,#7150,#7151); +#7149 = CARTESIAN_POINT('',(147.5,50.350563935976,59.711656711742)); +#7150 = DIRECTION('',(-1.,0.,0.)); +#7151 = DIRECTION('',(0.,0.,1.)); +#7152 = ORIENTED_EDGE('',*,*,#7153,.F.); +#7153 = EDGE_CURVE('',#7154,#7145,#7156,.T.); +#7154 = VERTEX_POINT('',#7155); +#7155 = CARTESIAN_POINT('',(147.5,100.42353677207,73.878427386649)); +#7156 = LINE('',#7157,#7158); +#7157 = CARTESIAN_POINT('',(147.5,55.715406692959,59.351875342201)); +#7158 = VECTOR('',#7159,1.); +#7159 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7160 = ORIENTED_EDGE('',*,*,#7161,.F.); +#7161 = EDGE_CURVE('',#7137,#7154,#7162,.T.); +#7162 = CIRCLE('',#7163,2.); +#7163 = AXIS2_PLACEMENT_3D('',#7164,#7165,#7166); +#7164 = CARTESIAN_POINT('',(147.5,99.805502783324,75.780540419239)); +#7165 = DIRECTION('',(-1.,0.,0.)); +#7166 = DIRECTION('',(0.,0.,1.)); +#7167 = FACE_BOUND('',#7168,.T.); +#7168 = EDGE_LOOP('',(#7169,#7179,#7188,#7196)); +#7169 = ORIENTED_EDGE('',*,*,#7170,.F.); +#7170 = EDGE_CURVE('',#7171,#7173,#7175,.T.); +#7171 = VERTEX_POINT('',#7172); +#7172 = CARTESIAN_POINT('',(147.5,57.911004999996,55.85941958022)); +#7173 = VERTEX_POINT('',#7174); +#7174 = CARTESIAN_POINT('',(147.5,95.953265651803,68.220099355218)); +#7175 = LINE('',#7176,#7177); +#7176 = CARTESIAN_POINT('',(147.5,56.951474670458,55.547649277021)); +#7177 = VECTOR('',#7178,1.); +#7178 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7179 = ORIENTED_EDGE('',*,*,#7180,.F.); +#7180 = EDGE_CURVE('',#7181,#7171,#7183,.T.); +#7181 = VERTEX_POINT('',#7182); +#7182 = CARTESIAN_POINT('',(147.5,59.147072977496,52.05519351504)); +#7183 = CIRCLE('',#7184,2.); +#7184 = AXIS2_PLACEMENT_3D('',#7185,#7186,#7187); +#7185 = CARTESIAN_POINT('',(147.5,58.529038988746,53.95730654763)); +#7186 = DIRECTION('',(-1.,0.,0.)); +#7187 = DIRECTION('',(0.,0.,1.)); +#7188 = ORIENTED_EDGE('',*,*,#7189,.F.); +#7189 = EDGE_CURVE('',#7190,#7181,#7192,.T.); +#7190 = VERTEX_POINT('',#7191); +#7191 = CARTESIAN_POINT('',(147.5,97.189333629303,64.415873290038)); +#7192 = LINE('',#7193,#7194); +#7193 = CARTESIAN_POINT('',(147.5,58.187542647958,51.74342321184)); +#7194 = VECTOR('',#7195,1.); +#7195 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7196 = ORIENTED_EDGE('',*,*,#7197,.F.); +#7197 = EDGE_CURVE('',#7173,#7190,#7198,.T.); +#7198 = CIRCLE('',#7199,2.); +#7199 = AXIS2_PLACEMENT_3D('',#7200,#7201,#7202); +#7200 = CARTESIAN_POINT('',(147.5,96.571299640553,66.317986322628)); +#7201 = DIRECTION('',(-1.,0.,0.)); +#7202 = DIRECTION('',(0.,0.,1.)); +#7203 = PLANE('',#7204); +#7204 = AXIS2_PLACEMENT_3D('',#7205,#7206,#7207); +#7205 = CARTESIAN_POINT('',(147.5,75.,0.)); +#7206 = DIRECTION('',(-1.,0.,0.)); +#7207 = DIRECTION('',(0.,0.,1.)); +#7208 = ADVANCED_FACE('',(#7209,#7245,#7281,#7317,#7351,#7387,#7423, + #7459,#7495,#7531),#7567,.F.); +#7209 = FACE_BOUND('',#7210,.T.); +#7210 = EDGE_LOOP('',(#7211,#7221,#7230,#7238)); +#7211 = ORIENTED_EDGE('',*,*,#7212,.F.); +#7212 = EDGE_CURVE('',#7213,#7215,#7217,.T.); +#7213 = VERTEX_POINT('',#7214); +#7214 = CARTESIAN_POINT('',(2.5,41.080054104728,88.243352200596)); +#7215 = VERTEX_POINT('',#7216); +#7216 = CARTESIAN_POINT('',(2.5,90.534992952076,104.31223590809)); +#7217 = LINE('',#7218,#7219); +#7218 = CARTESIAN_POINT('',(2.5,131.0013766649,117.46056101171)); +#7219 = VECTOR('',#7220,1.); +#7220 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7221 = ORIENTED_EDGE('',*,*,#7222,.F.); +#7222 = EDGE_CURVE('',#7223,#7213,#7225,.T.); +#7223 = VERTEX_POINT('',#7224); +#7224 = CARTESIAN_POINT('',(2.5,39.843986127228,92.047578265777)); +#7225 = CIRCLE('',#7226,2.); +#7226 = AXIS2_PLACEMENT_3D('',#7227,#7228,#7229); +#7227 = CARTESIAN_POINT('',(2.5,40.462020115978,90.145465233187)); +#7228 = DIRECTION('',(1.,0.,-0.)); +#7229 = DIRECTION('',(0.,0.,1.)); +#7230 = ORIENTED_EDGE('',*,*,#7231,.F.); +#7231 = EDGE_CURVE('',#7232,#7223,#7234,.T.); +#7232 = VERTEX_POINT('',#7233); +#7233 = CARTESIAN_POINT('',(2.5,89.298924974576,108.11646197327)); +#7234 = LINE('',#7235,#7236); +#7235 = CARTESIAN_POINT('',(2.5,129.7653086874,121.26478707689)); +#7236 = VECTOR('',#7237,1.); +#7237 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7238 = ORIENTED_EDGE('',*,*,#7239,.F.); +#7239 = EDGE_CURVE('',#7215,#7232,#7240,.T.); +#7240 = CIRCLE('',#7241,2.); +#7241 = AXIS2_PLACEMENT_3D('',#7242,#7243,#7244); +#7242 = CARTESIAN_POINT('',(2.5,89.916958963326,106.21434894068)); +#7243 = DIRECTION('',(1.,0.,-0.)); +#7244 = DIRECTION('',(0.,0.,1.)); +#7245 = FACE_BOUND('',#7246,.T.); +#7246 = EDGE_LOOP('',(#7247,#7257,#7266,#7274)); +#7247 = ORIENTED_EDGE('',*,*,#7248,.F.); +#7248 = EDGE_CURVE('',#7249,#7251,#7253,.T.); +#7249 = VERTEX_POINT('',#7250); +#7250 = CARTESIAN_POINT('',(2.5,40.699020510842,79.70784908711)); +#7251 = VERTEX_POINT('',#7252); +#7252 = CARTESIAN_POINT('',(2.5,95.860298455961,97.630834760857)); +#7253 = LINE('',#7254,#7255); +#7254 = CARTESIAN_POINT('',(2.5,133.4735126199,109.85210888135)); +#7255 = VECTOR('',#7256,1.); +#7256 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7257 = ORIENTED_EDGE('',*,*,#7258,.F.); +#7258 = EDGE_CURVE('',#7259,#7249,#7261,.T.); +#7259 = VERTEX_POINT('',#7260); +#7260 = CARTESIAN_POINT('',(2.5,39.462952533342,83.512075152291)); +#7261 = CIRCLE('',#7262,2.); +#7262 = AXIS2_PLACEMENT_3D('',#7263,#7264,#7265); +#7263 = CARTESIAN_POINT('',(2.5,40.080986522092,81.609962119701)); +#7264 = DIRECTION('',(1.,0.,-0.)); +#7265 = DIRECTION('',(0.,0.,1.)); +#7266 = ORIENTED_EDGE('',*,*,#7267,.F.); +#7267 = EDGE_CURVE('',#7268,#7259,#7270,.T.); +#7268 = VERTEX_POINT('',#7269); +#7269 = CARTESIAN_POINT('',(2.5,94.624230478461,101.43506082603)); +#7270 = LINE('',#7271,#7272); +#7271 = CARTESIAN_POINT('',(2.5,132.2374446424,113.65633494653)); +#7272 = VECTOR('',#7273,1.); +#7273 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7274 = ORIENTED_EDGE('',*,*,#7275,.F.); +#7275 = EDGE_CURVE('',#7251,#7268,#7276,.T.); +#7276 = CIRCLE('',#7277,2.); +#7277 = AXIS2_PLACEMENT_3D('',#7278,#7279,#7280); +#7278 = CARTESIAN_POINT('',(2.5,95.242264467211,99.532947793448)); +#7279 = DIRECTION('',(1.,0.,-0.)); +#7280 = DIRECTION('',(0.,0.,1.)); +#7281 = FACE_BOUND('',#7282,.T.); +#7282 = EDGE_LOOP('',(#7283,#7293,#7302,#7310)); +#7283 = ORIENTED_EDGE('',*,*,#7284,.F.); +#7284 = EDGE_CURVE('',#7285,#7287,#7289,.T.); +#7285 = VERTEX_POINT('',#7286); +#7286 = CARTESIAN_POINT('',(2.5,44.314257247499,97.705906297207)); +#7287 = VERTEX_POINT('',#7288); +#7288 = CARTESIAN_POINT('',(2.5,82.356517899305,110.0665860722)); +#7289 = LINE('',#7290,#7291); +#7290 = CARTESIAN_POINT('',(2.5,128.5292407099,125.06901314207)); +#7291 = VECTOR('',#7292,1.); +#7292 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7293 = ORIENTED_EDGE('',*,*,#7294,.F.); +#7294 = EDGE_CURVE('',#7295,#7285,#7297,.T.); +#7295 = VERTEX_POINT('',#7296); +#7296 = CARTESIAN_POINT('',(2.5,43.078189269999,101.51013236238)); +#7297 = CIRCLE('',#7298,2.); +#7298 = AXIS2_PLACEMENT_3D('',#7299,#7300,#7301); +#7299 = CARTESIAN_POINT('',(2.5,43.696223258749,99.608019329798)); +#7300 = DIRECTION('',(1.,0.,-0.)); +#7301 = DIRECTION('',(0.,0.,1.)); +#7302 = ORIENTED_EDGE('',*,*,#7303,.F.); +#7303 = EDGE_CURVE('',#7304,#7295,#7306,.T.); +#7304 = VERTEX_POINT('',#7305); +#7305 = CARTESIAN_POINT('',(2.5,81.120449921805,113.87081213738)); +#7306 = LINE('',#7307,#7308); +#7307 = CARTESIAN_POINT('',(2.5,127.2931727324,128.87323920725)); +#7308 = VECTOR('',#7309,1.); +#7309 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7310 = ORIENTED_EDGE('',*,*,#7311,.F.); +#7311 = EDGE_CURVE('',#7287,#7304,#7312,.T.); +#7312 = CIRCLE('',#7313,2.); +#7313 = AXIS2_PLACEMENT_3D('',#7314,#7315,#7316); +#7314 = CARTESIAN_POINT('',(2.5,81.738483910555,111.96869910479)); +#7315 = DIRECTION('',(1.,0.,-0.)); +#7316 = DIRECTION('',(0.,0.,1.)); +#7317 = FACE_BOUND('',#7318,.T.); +#7318 = EDGE_LOOP('',(#7319,#7329,#7337,#7345)); +#7319 = ORIENTED_EDGE('',*,*,#7320,.F.); +#7320 = EDGE_CURVE('',#7321,#7323,#7325,.T.); +#7321 = VERTEX_POINT('',#7322); +#7322 = CARTESIAN_POINT('',(2.5,10.,130.)); +#7323 = VERTEX_POINT('',#7324); +#7324 = CARTESIAN_POINT('',(2.5,122.44861206962,130.)); +#7325 = LINE('',#7326,#7327); +#7326 = CARTESIAN_POINT('',(2.5,75.,130.)); +#7327 = VECTOR('',#7328,1.); +#7328 = DIRECTION('',(0.,1.,0.)); +#7329 = ORIENTED_EDGE('',*,*,#7330,.F.); +#7330 = EDGE_CURVE('',#7331,#7321,#7333,.T.); +#7331 = VERTEX_POINT('',#7332); +#7332 = CARTESIAN_POINT('',(2.5,10.,24.278441447094)); +#7333 = LINE('',#7334,#7335); +#7334 = CARTESIAN_POINT('',(2.5,10.,0.)); +#7335 = VECTOR('',#7336,1.); +#7336 = DIRECTION('',(0.,0.,1.)); +#7337 = ORIENTED_EDGE('',*,*,#7338,.F.); +#7338 = EDGE_CURVE('',#7339,#7331,#7341,.T.); +#7339 = VERTEX_POINT('',#7340); +#7340 = CARTESIAN_POINT('',(2.5,132.87009364017,64.201354948769)); +#7341 = LINE('',#7342,#7343); +#7342 = CARTESIAN_POINT('',(2.5,61.657797401562,41.063077286871)); +#7343 = VECTOR('',#7344,1.); +#7344 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7345 = ORIENTED_EDGE('',*,*,#7346,.T.); +#7346 = EDGE_CURVE('',#7339,#7323,#7347,.T.); +#7347 = LINE('',#7348,#7349); +#7348 = CARTESIAN_POINT('',(2.5,132.51083025488,66.469654691853)); +#7349 = VECTOR('',#7350,1.); +#7350 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7351 = FACE_BOUND('',#7352,.T.); +#7352 = EDGE_LOOP('',(#7353,#7364,#7372,#7381)); +#7353 = ORIENTED_EDGE('',*,*,#7354,.T.); +#7354 = EDGE_CURVE('',#7355,#7357,#7359,.T.); +#7355 = VERTEX_POINT('',#7356); +#7356 = CARTESIAN_POINT('',(2.5,45.643292420841,64.490944826388)); +#7357 = VERTEX_POINT('',#7358); +#7358 = CARTESIAN_POINT('',(2.5,44.407224443341,68.295170891569)); +#7359 = CIRCLE('',#7360,2.); +#7360 = AXIS2_PLACEMENT_3D('',#7361,#7362,#7363); +#7361 = CARTESIAN_POINT('',(2.5,45.025258432091,66.393057858978)); +#7362 = DIRECTION('',(-1.,0.,0.)); +#7363 = DIRECTION('',(0.,0.,1.)); +#7364 = ORIENTED_EDGE('',*,*,#7365,.T.); +#7365 = EDGE_CURVE('',#7357,#7366,#7368,.T.); +#7366 = VERTEX_POINT('',#7367); +#7367 = CARTESIAN_POINT('',(2.5,99.56850238846,86.218156565315)); +#7368 = LINE('',#7369,#7370); +#7369 = CARTESIAN_POINT('',(2.5,137.1817165524,98.439430685808)); +#7370 = VECTOR('',#7371,1.); +#7371 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7372 = ORIENTED_EDGE('',*,*,#7373,.T.); +#7373 = EDGE_CURVE('',#7366,#7374,#7376,.T.); +#7374 = VERTEX_POINT('',#7375); +#7375 = CARTESIAN_POINT('',(2.5,100.80457036596,82.413930500135)); +#7376 = CIRCLE('',#7377,2.); +#7377 = AXIS2_PLACEMENT_3D('',#7378,#7379,#7380); +#7378 = CARTESIAN_POINT('',(2.5,100.18653637721,84.316043532725)); +#7379 = DIRECTION('',(-1.,0.,0.)); +#7380 = DIRECTION('',(0.,0.,1.)); +#7381 = ORIENTED_EDGE('',*,*,#7382,.T.); +#7382 = EDGE_CURVE('',#7374,#7355,#7383,.T.); +#7383 = LINE('',#7384,#7385); +#7384 = CARTESIAN_POINT('',(2.5,138.4177845299,94.635204620628)); +#7385 = VECTOR('',#7386,1.); +#7386 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7387 = FACE_BOUND('',#7388,.T.); +#7388 = EDGE_LOOP('',(#7389,#7400,#7408,#7417)); +#7389 = ORIENTED_EDGE('',*,*,#7390,.T.); +#7390 = EDGE_CURVE('',#7391,#7393,#7395,.T.); +#7391 = VERTEX_POINT('',#7392); +#7392 = CARTESIAN_POINT('',(2.5,42.220099949546,71.790379962374)); +#7393 = VERTEX_POINT('',#7394); +#7394 = CARTESIAN_POINT('',(2.5,40.984031972046,75.594606027555)); +#7395 = CIRCLE('',#7396,2.); +#7396 = AXIS2_PLACEMENT_3D('',#7397,#7398,#7399); +#7397 = CARTESIAN_POINT('',(2.5,41.602065960796,73.692492994964)); +#7398 = DIRECTION('',(-1.,0.,0.)); +#7399 = DIRECTION('',(0.,0.,1.)); +#7400 = ORIENTED_EDGE('',*,*,#7401,.T.); +#7401 = EDGE_CURVE('',#7393,#7402,#7404,.T.); +#7402 = VERTEX_POINT('',#7403); +#7403 = CARTESIAN_POINT('',(2.5,98.047422949756,94.135625690052)); +#7404 = LINE('',#7405,#7406); +#7405 = CARTESIAN_POINT('',(2.5,134.7095805974,106.04788281617)); +#7406 = VECTOR('',#7407,1.); +#7407 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7408 = ORIENTED_EDGE('',*,*,#7409,.T.); +#7409 = EDGE_CURVE('',#7402,#7410,#7412,.T.); +#7410 = VERTEX_POINT('',#7411); +#7411 = CARTESIAN_POINT('',(2.5,99.283490927255,90.331399624871)); +#7412 = CIRCLE('',#7413,2.); +#7413 = AXIS2_PLACEMENT_3D('',#7414,#7415,#7416); +#7414 = CARTESIAN_POINT('',(2.5,98.665456938505,92.233512657461)); +#7415 = DIRECTION('',(-1.,0.,0.)); +#7416 = DIRECTION('',(0.,0.,1.)); +#7417 = ORIENTED_EDGE('',*,*,#7418,.T.); +#7418 = EDGE_CURVE('',#7410,#7391,#7419,.T.); +#7419 = LINE('',#7420,#7421); +#7420 = CARTESIAN_POINT('',(2.5,135.9456485749,102.24365675098)); +#7421 = VECTOR('',#7422,1.); +#7422 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7423 = FACE_BOUND('',#7424,.T.); +#7424 = EDGE_LOOP('',(#7425,#7436,#7444,#7453)); +#7425 = ORIENTED_EDGE('',*,*,#7426,.T.); +#7426 = EDGE_CURVE('',#7427,#7429,#7431,.T.); +#7427 = VERTEX_POINT('',#7428); +#7428 = CARTESIAN_POINT('',(2.5,73.031887128038,48.154945317178)); +#7429 = VERTEX_POINT('',#7430); +#7430 = CARTESIAN_POINT('',(2.5,71.795819150538,51.959171382359)); +#7431 = CIRCLE('',#7432,2.); +#7432 = AXIS2_PLACEMENT_3D('',#7433,#7434,#7435); +#7433 = CARTESIAN_POINT('',(2.5,72.413853139288,50.057058349768)); +#7434 = DIRECTION('',(-1.,0.,0.)); +#7435 = DIRECTION('',(0.,0.,1.)); +#7436 = ORIENTED_EDGE('',*,*,#7437,.T.); +#7437 = EDGE_CURVE('',#7429,#7438,#7440,.T.); +#7438 = VERTEX_POINT('',#7439); +#7439 = CARTESIAN_POINT('',(2.5,87.01272341126,56.903443292358)); +#7440 = LINE('',#7441,#7442); +#7441 = CARTESIAN_POINT('',(2.5,144.5981244174,75.614074294725)); +#7442 = VECTOR('',#7443,1.); +#7443 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7444 = ORIENTED_EDGE('',*,*,#7445,.T.); +#7445 = EDGE_CURVE('',#7438,#7446,#7448,.T.); +#7446 = VERTEX_POINT('',#7447); +#7447 = CARTESIAN_POINT('',(2.5,88.24879138876,53.099217227177)); +#7448 = CIRCLE('',#7449,2.); +#7449 = AXIS2_PLACEMENT_3D('',#7450,#7451,#7452); +#7450 = CARTESIAN_POINT('',(2.5,87.63075740001,55.001330259768)); +#7451 = DIRECTION('',(-1.,0.,0.)); +#7452 = DIRECTION('',(0.,0.,1.)); +#7453 = ORIENTED_EDGE('',*,*,#7454,.T.); +#7454 = EDGE_CURVE('',#7446,#7427,#7455,.T.); +#7455 = LINE('',#7456,#7457); +#7456 = CARTESIAN_POINT('',(2.5,145.8341923949,71.809848229544)); +#7457 = VECTOR('',#7458,1.); +#7458 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7459 = FACE_BOUND('',#7460,.T.); +#7460 = EDGE_LOOP('',(#7461,#7472,#7480,#7489)); +#7461 = ORIENTED_EDGE('',*,*,#7462,.T.); +#7462 = EDGE_CURVE('',#7463,#7465,#7467,.T.); +#7463 = VERTEX_POINT('',#7464); +#7464 = CARTESIAN_POINT('',(2.5,50.968597924726,57.809543679152)); +#7465 = VERTEX_POINT('',#7466); +#7466 = CARTESIAN_POINT('',(2.5,49.732529947226,61.613769744332)); +#7467 = CIRCLE('',#7468,2.); +#7468 = AXIS2_PLACEMENT_3D('',#7469,#7470,#7471); +#7469 = CARTESIAN_POINT('',(2.5,50.350563935976,59.711656711742)); +#7470 = DIRECTION('',(-1.,0.,0.)); +#7471 = DIRECTION('',(0.,0.,1.)); +#7472 = ORIENTED_EDGE('',*,*,#7473,.T.); +#7473 = EDGE_CURVE('',#7465,#7474,#7476,.T.); +#7474 = VERTEX_POINT('',#7475); +#7475 = CARTESIAN_POINT('',(2.5,99.187468794574,77.682653451829)); +#7476 = LINE('',#7477,#7478); +#7477 = CARTESIAN_POINT('',(2.5,139.6538525074,90.830978555447)); +#7478 = VECTOR('',#7479,1.); +#7479 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7480 = ORIENTED_EDGE('',*,*,#7481,.T.); +#7481 = EDGE_CURVE('',#7474,#7482,#7484,.T.); +#7482 = VERTEX_POINT('',#7483); +#7483 = CARTESIAN_POINT('',(2.5,100.42353677207,73.878427386649)); +#7484 = CIRCLE('',#7485,2.); +#7485 = AXIS2_PLACEMENT_3D('',#7486,#7487,#7488); +#7486 = CARTESIAN_POINT('',(2.5,99.805502783324,75.780540419239)); +#7487 = DIRECTION('',(-1.,0.,0.)); +#7488 = DIRECTION('',(0.,0.,1.)); +#7489 = ORIENTED_EDGE('',*,*,#7490,.T.); +#7490 = EDGE_CURVE('',#7482,#7463,#7491,.T.); +#7491 = LINE('',#7492,#7493); +#7492 = CARTESIAN_POINT('',(2.5,140.8899204849,87.026752490267)); +#7493 = VECTOR('',#7494,1.); +#7494 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7495 = FACE_BOUND('',#7496,.T.); +#7496 = EDGE_LOOP('',(#7497,#7508,#7516,#7525)); +#7497 = ORIENTED_EDGE('',*,*,#7498,.T.); +#7498 = EDGE_CURVE('',#7499,#7501,#7503,.T.); +#7499 = VERTEX_POINT('',#7500); +#7500 = CARTESIAN_POINT('',(2.5,53.254799488041,109.02256236006)); +#7501 = VERTEX_POINT('',#7502); +#7502 = CARTESIAN_POINT('',(2.5,52.018731510541,112.82678842524)); +#7503 = CIRCLE('',#7504,2.); +#7504 = AXIS2_PLACEMENT_3D('',#7505,#7506,#7507); +#7505 = CARTESIAN_POINT('',(2.5,52.636765499291,110.92467539265)); +#7506 = DIRECTION('',(-1.,0.,0.)); +#7507 = DIRECTION('',(0.,0.,1.)); +#7508 = ORIENTED_EDGE('',*,*,#7509,.T.); +#7509 = EDGE_CURVE('',#7501,#7510,#7512,.T.); +#7510 = VERTEX_POINT('',#7511); +#7511 = CARTESIAN_POINT('',(2.5,67.235635771264,117.77106033524)); +#7512 = LINE('',#7513,#7514); +#7513 = CARTESIAN_POINT('',(2.5,124.8210367774,136.48169133761)); +#7514 = VECTOR('',#7515,1.); +#7515 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7516 = ORIENTED_EDGE('',*,*,#7517,.T.); +#7517 = EDGE_CURVE('',#7510,#7518,#7520,.T.); +#7518 = VERTEX_POINT('',#7519); +#7519 = CARTESIAN_POINT('',(2.5,68.471703748764,113.96683427006)); +#7520 = CIRCLE('',#7521,2.); +#7521 = AXIS2_PLACEMENT_3D('',#7522,#7523,#7524); +#7522 = CARTESIAN_POINT('',(2.5,67.853669760014,115.86894730265)); +#7523 = DIRECTION('',(-1.,0.,0.)); +#7524 = DIRECTION('',(0.,0.,1.)); +#7525 = ORIENTED_EDGE('',*,*,#7526,.T.); +#7526 = EDGE_CURVE('',#7518,#7499,#7527,.T.); +#7527 = LINE('',#7528,#7529); +#7528 = CARTESIAN_POINT('',(2.5,126.0571047549,132.67746527243)); +#7529 = VECTOR('',#7530,1.); +#7530 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7531 = FACE_BOUND('',#7532,.T.); +#7532 = EDGE_LOOP('',(#7533,#7544,#7552,#7561)); +#7533 = ORIENTED_EDGE('',*,*,#7534,.T.); +#7534 = EDGE_CURVE('',#7535,#7537,#7539,.T.); +#7535 = VERTEX_POINT('',#7536); +#7536 = CARTESIAN_POINT('',(2.5,59.147072977496,52.05519351504)); +#7537 = VERTEX_POINT('',#7538); +#7538 = CARTESIAN_POINT('',(2.5,57.911004999996,55.85941958022)); +#7539 = CIRCLE('',#7540,2.); +#7540 = AXIS2_PLACEMENT_3D('',#7541,#7542,#7543); +#7541 = CARTESIAN_POINT('',(2.5,58.529038988746,53.95730654763)); +#7542 = DIRECTION('',(-1.,0.,0.)); +#7543 = DIRECTION('',(0.,0.,1.)); +#7544 = ORIENTED_EDGE('',*,*,#7545,.T.); +#7545 = EDGE_CURVE('',#7537,#7546,#7548,.T.); +#7546 = VERTEX_POINT('',#7547); +#7547 = CARTESIAN_POINT('',(2.5,95.953265651803,68.220099355218)); +#7548 = LINE('',#7549,#7550); +#7549 = CARTESIAN_POINT('',(2.5,142.1259884624,83.222526425086)); +#7550 = VECTOR('',#7551,1.); +#7551 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#7552 = ORIENTED_EDGE('',*,*,#7553,.T.); +#7553 = EDGE_CURVE('',#7546,#7554,#7556,.T.); +#7554 = VERTEX_POINT('',#7555); +#7555 = CARTESIAN_POINT('',(2.5,97.189333629303,64.415873290038)); +#7556 = CIRCLE('',#7557,2.); +#7557 = AXIS2_PLACEMENT_3D('',#7558,#7559,#7560); +#7558 = CARTESIAN_POINT('',(2.5,96.571299640553,66.317986322628)); +#7559 = DIRECTION('',(-1.,0.,0.)); +#7560 = DIRECTION('',(0.,0.,1.)); +#7561 = ORIENTED_EDGE('',*,*,#7562,.T.); +#7562 = EDGE_CURVE('',#7554,#7535,#7563,.T.); +#7563 = LINE('',#7564,#7565); +#7564 = CARTESIAN_POINT('',(2.5,143.3620564399,79.418300359905)); +#7565 = VECTOR('',#7566,1.); +#7566 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#7567 = PLANE('',#7568); +#7568 = AXIS2_PLACEMENT_3D('',#7569,#7570,#7571); +#7569 = CARTESIAN_POINT('',(2.5,146.8323111935,68.737954434936)); +#7570 = DIRECTION('',(-1.,0.,0.)); +#7571 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7572 = ADVANCED_FACE('',(#7573),#7609,.T.); +#7573 = FACE_BOUND('',#7574,.T.); +#7574 = EDGE_LOOP('',(#7575,#7586,#7593,#7602)); +#7575 = ORIENTED_EDGE('',*,*,#7576,.T.); +#7576 = EDGE_CURVE('',#7577,#7579,#7581,.T.); +#7577 = VERTEX_POINT('',#7578); +#7578 = CARTESIAN_POINT('',(20.,135.90417479153,45.044920483729)); +#7579 = VERTEX_POINT('',#7580); +#7580 = CARTESIAN_POINT('',(20.,135.22550344531,43.937429502394)); +#7581 = CIRCLE('',#7582,1.); +#7582 = AXIS2_PLACEMENT_3D('',#7583,#7584,#7585); +#7583 = CARTESIAN_POINT('',(20.,134.91648645094,44.888486018689)); +#7584 = DIRECTION('',(-1.,0.,0.)); +#7585 = DIRECTION('',(0.,0.,1.)); +#7586 = ORIENTED_EDGE('',*,*,#7587,.F.); +#7587 = EDGE_CURVE('',#6247,#7579,#7588,.T.); +#7588 = ELLIPSE('',#7589,20.225130723143,20.); +#7589 = AXIS2_PLACEMENT_3D('',#7590,#7591,#7592); +#7590 = CARTESIAN_POINT('',(20.,131.90718208477,63.888486018689)); +#7591 = DIRECTION('',(0.,-0.986448828905,-0.164069216954)); +#7592 = DIRECTION('',(0.,0.164069216954,-0.986448828905)); +#7593 = ORIENTED_EDGE('',*,*,#7594,.F.); +#7594 = EDGE_CURVE('',#7595,#6247,#7597,.T.); +#7595 = VERTEX_POINT('',#7596); +#7596 = CARTESIAN_POINT('',(1.,132.89487042536,64.044920483729)); +#7597 = CIRCLE('',#7598,1.); +#7598 = AXIS2_PLACEMENT_3D('',#7599,#7600,#7601); +#7599 = CARTESIAN_POINT('',(1.,131.90718208477,63.888486018689)); +#7600 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7601 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#7602 = ORIENTED_EDGE('',*,*,#7603,.F.); +#7603 = EDGE_CURVE('',#7577,#7595,#7604,.T.); +#7604 = ELLIPSE('',#7605,19.236837389972,19.); +#7605 = AXIS2_PLACEMENT_3D('',#7606,#7607,#7608); +#7606 = CARTESIAN_POINT('',(20.,132.89487042536,64.044920483729)); +#7607 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#7608 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#7609 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#7610,#7611,#7612) + ,(#7613,#7614,#7615) + ,(#7616,#7617,#7618) + ,(#7619,#7620,#7621) + ,(#7622,#7623,#7624) + ,(#7625,#7626,#7627) + ,(#7628,#7629,#7630) + ,(#7631,#7632,#7633) + ,(#7634,#7635,#7636) + ,(#7637,#7638,#7639) + ,(#7640,#7641,#7642) + ,(#7643,#7644,#7645) + ,(#7646,#7647,#7648) + ,(#7649,#7650,#7651) + ,(#7652,#7653,#7654) + ,(#7655,#7656,#7657) + ,(#7658,#7659,#7660) + ,(#7661,#7662,#7663) + ,(#7664,#7665,#7666) + ,(#7667,#7668,#7669) + ,(#7670,#7671,#7672) + ,(#7673,#7674,#7675) + ,(#7676,#7677,#7678) + ,(#7679,#7680,#7681) + ,(#7682,#7683,#7684) + ,(#7685,#7686,#7687) + ,(#7688,#7689,#7690) + ,(#7691,#7692,#7693) + ,(#7694,#7695,#7696) + ,(#7697,#7698,#7699) + ,(#7700,#7701,#7702) + ,(#7703,#7704,#7705) + ,(#7706,#7707,#7708) + ,(#7709,#7710,#7711 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.7604059656,1.) + ,(1.,0.760405985456,1.) + ,(1.,0.760323294568,1.) + ,(1.,0.75999324506,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.759088305079,1.) + ,(1.,0.758678122053,1.) + ,(1.,0.757698117207,1.) + ,(1.,0.757128295703,1.) + ,(1.,0.755833435756,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.753508771184,1.) + ,(1.,0.752634183213,1.) + ,(1.,0.750742352454,1.) + ,(1.,0.749725110415,1.) + ,(1.,0.747556076765,1.) + ,(1.,0.746404286093,1.) + ,(1.,0.743975444742,1.) + ,(1.,0.742698395233,1.) + ,(1.,0.740029478676,1.) + ,(1.,0.738637613056,1.) + ,(1.,0.735750620887,1.) + ,(1.,0.734255496068,1.) + ,(1.,0.73117460895,1.) + ,(1.,0.729588848743,1.) + ,(1.,0.726340323999,1.) + ,(1.,0.72467756196,1.) + ,(1.,0.721289607927,1.) + ,(1.,0.71956441888,1.) + ,(1.,0.716067045082,1.) + ,(1.,0.714294863775,1.) + ,(1.,0.710719703808,1.) + ,(1.,0.708916738351,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#7610 = CARTESIAN_POINT('',(20.,135.22550344531,43.937429502394)); +#7611 = CARTESIAN_POINT('',(20.,136.03778244666,44.201354948769)); +#7612 = CARTESIAN_POINT('',(20.,135.90417479153,45.044920483729)); +#7613 = CARTESIAN_POINT('',(19.345501065925,135.22550344531, + 43.937429502392)); +#7614 = CARTESIAN_POINT('',(19.349927917337,136.03778244666, + 44.201354948787)); +#7615 = CARTESIAN_POINT('',(19.378226012629,135.90417479153, + 45.04492048374)); +#7616 = CARTESIAN_POINT('',(18.691004073583,135.2201686799, + 43.969504215684)); +#7617 = CARTESIAN_POINT('',(18.699717177364,136.03275668285, + 44.233086372596)); +#7618 = CARTESIAN_POINT('',(18.756453869903,135.89933682344, + 45.075466212072)); +#7619 = CARTESIAN_POINT('',(17.388310313235,135.19888096204, + 44.097494369712)); +#7620 = CARTESIAN_POINT('',(17.405723965371,136.01270923012, + 44.35966100777)); +#7621 = CARTESIAN_POINT('',(17.518894797573,135.88003151352, + 45.197355141842)); +#7622 = CARTESIAN_POINT('',(16.740116024311,135.18292804252, + 44.19340961256)); +#7623 = CARTESIAN_POINT('',(16.761667893977,135.99767893625, + 44.454558548414)); +#7624 = CARTESIAN_POINT('',(16.903110223095,135.86556420153, + 45.28869815481)); +#7625 = CARTESIAN_POINT('',(15.456271095044,135.14055761915, + 44.448157305467)); +#7626 = CARTESIAN_POINT('',(15.48606864504,135.95777131794, + 44.706525333935)); +#7627 = CARTESIAN_POINT('',(15.683457540292,135.82713950237, + 45.531302157325)); +#7628 = CARTESIAN_POINT('',(14.820622439761,135.11414018086, + 44.60698936165)); +#7629 = CARTESIAN_POINT('',(14.854266188703,135.93287706067, + 44.863701488462)); +#7630 = CARTESIAN_POINT('',(15.079591317772,135.80318217461, + 45.682562771766)); +#7631 = CARTESIAN_POINT('',(13.56799047006,135.05109510233, + 44.986041233896)); +#7632 = CARTESIAN_POINT('',(13.609136041423,135.87348215856, + 45.238706141611)); +#7633 = CARTESIAN_POINT('',(13.889590946559,135.74600813708, + 46.043545437868)); +#7634 = CARTESIAN_POINT('',(12.951009092449,135.01446755962, + 45.206260463884)); +#7635 = CARTESIAN_POINT('',(12.995573149226,135.83895680014, + 45.456690675659)); +#7636 = CARTESIAN_POINT('',(13.303458637827,135.7127915157, + 46.253266931378)); +#7637 = CARTESIAN_POINT('',(11.741653612947,134.93135498452, + 45.705966038732)); +#7638 = CARTESIAN_POINT('',(11.792707797069,135.76062972294, + 45.951228377957)); +#7639 = CARTESIAN_POINT('',(12.1545709323,135.63741875702, + 46.729151800652)); +#7640 = CARTESIAN_POINT('',(11.149281380949,134.88487008065, + 45.985451610957)); +#7641 = CARTESIAN_POINT('',(11.203202842053,135.71679631344, + 46.22798163363)); +#7642 = CARTESIAN_POINT('',(11.591817311901,135.59526273626, + 46.995314440605)); +#7643 = CARTESIAN_POINT('',(9.994849146011,134.78249042849, + 46.600998450548)); +#7644 = CARTESIAN_POINT('',(10.054010349216,135.62026938925, + 46.837428647327)); +#7645 = CARTESIAN_POINT('',(10.495106688711,135.50241713731, + 47.581518481615)); +#7646 = CARTESIAN_POINT('',(9.432790928045,134.72659583851, + 46.937058766168)); +#7647 = CARTESIAN_POINT('',(9.494160671525,135.56753824644, + 47.170359980222)); +#7648 = CARTESIAN_POINT('',(9.961151381643,135.45172770268, + 47.90155897629)); +#7649 = CARTESIAN_POINT('',(8.344399751171,134.60593508132, + 47.66251881795)); +#7650 = CARTESIAN_POINT('',(8.409556822254,135.453714427,47.889015292558 + )); +#7651 = CARTESIAN_POINT('',(8.927179763612,135.34230341733, + 48.592436723672)); +#7652 = CARTESIAN_POINT('',(7.818068475128,134.54116910067, + 48.051917432413)); +#7653 = CARTESIAN_POINT('',(7.884687287915,135.39257943382, + 48.275006448418)); +#7654 = CARTESIAN_POINT('',(8.427165051371,135.28356873579, + 48.963272908149)); +#7655 = CARTESIAN_POINT('',(6.806200158327,134.4033892675, + 48.880304119511)); +#7656 = CARTESIAN_POINT('',(6.874995393318,135.26252417776, + 49.096143018331)); +#7657 = CARTESIAN_POINT('',(7.46589015041,135.15861957973, + 49.752170831525)); +#7658 = CARTESIAN_POINT('',(6.320664682116,134.330375628,49.319290911296 + )); +#7659 = CARTESIAN_POINT('',(6.390109419655,135.19355833511, + 49.531576211783)); +#7660 = CARTESIAN_POINT('',(7.00463144801,135.09240529839, + 50.170231350629)); +#7661 = CARTESIAN_POINT('',(5.395064070422,134.17680361393, + 50.242626417064)); +#7662 = CARTESIAN_POINT('',(5.464965444014,135.04849005211, + 50.447501303337)); +#7663 = CARTESIAN_POINT('',(6.125310866901,134.95313460028, + 51.04955193174)); +#7664 = CARTESIAN_POINT('',(4.955000366102,134.09624547684, + 50.726973703392)); +#7665 = CARTESIAN_POINT('',(5.024698908555,134.97234033136, + 50.928291718066)); +#7666 = CARTESIAN_POINT('',(5.707250347796,134.88007839886, + 51.510810634138)); +#7667 = CARTESIAN_POINT('',(4.124581499389,133.92836026435, + 51.736365802172)); +#7668 = CARTESIAN_POINT('',(4.19296270376,134.8136194813,51.930415725477 + )); +#7669 = CARTESIAN_POINT('',(4.91835242442,134.72782741167, + 52.472085535101)); +#7670 = CARTESIAN_POINT('',(3.734227620993,133.84103344855, + 52.261409053901)); +#7671 = CARTESIAN_POINT('',(3.801541114186,134.73100102674, + 52.452048118189)); +#7672 = CARTESIAN_POINT('',(4.547516239944,134.64863286132, + 52.972100247339)); +#7673 = CARTESIAN_POINT('',(3.006987886906,133.66045186401, + 53.347136747986)); +#7674 = CARTESIAN_POINT('',(3.071214467665,134.56011797883, + 53.530961220711)); +#7675 = CARTESIAN_POINT('',(3.856638492559,134.48486784529, + 54.006071865374)); +#7676 = CARTESIAN_POINT('',(2.670103155673,133.56719737449, + 53.907819511587)); +#7677 = CARTESIAN_POINT('',(2.73241372689,134.47180771526, + 54.088530281091)); +#7678 = CARTESIAN_POINT('',(3.536597997889,134.40029763282, + 54.540027172436)); +#7679 = CARTESIAN_POINT('',(2.053046270392,133.37565851725, + 55.059426649766)); +#7680 = CARTESIAN_POINT('',(2.110565838484,134.29036947975, + 55.234086215345)); +#7681 = CARTESIAN_POINT('',(2.950393956874,134.22659573456, + 55.636737795635)); +#7682 = CARTESIAN_POINT('',(1.772875070447,133.27737444572, + 55.650349243722)); +#7683 = CARTESIAN_POINT('',(1.827676892291,134.19719918385, + 55.822340312222)); +#7684 = CARTESIAN_POINT('',(2.684231316924,134.13746431736, + 56.199491416023)); +#7685 = CARTESIAN_POINT('',(1.271943629101,133.0767229397, + 56.856745219724)); +#7686 = CARTESIAN_POINT('',(1.320377801633,134.00691513471, + 57.023746515716)); +#7687 = CARTESIAN_POINT('',(2.208346447648,133.95549838112, + 57.348379121561)); +#7688 = CARTESIAN_POINT('',(1.051184162252,132.97435581549, + 57.472216736425)); +#7689 = CARTESIAN_POINT('',(1.096175408845,133.90976403055, + 57.637134446754)); +#7690 = CARTESIAN_POINT('',(1.998624954139,133.86266414345, + 57.934511430282)); +#7691 = CARTESIAN_POINT('',(0.671202408459,132.76652404439, + 58.721783297516)); +#7692 = CARTESIAN_POINT('',(0.708437800827,133.71243073964, + 58.883047811128)); +#7693 = CARTESIAN_POINT('',(1.637642288037,133.67418660067, + 59.124511801506)); +#7694 = CARTESIAN_POINT('',(0.511980709051,132.66105971886, + 59.355876409806)); +#7695 = CARTESIAN_POINT('',(0.545153619571,133.61221767976, + 59.515768169774)); +#7696 = CARTESIAN_POINT('',(1.486381673598,133.57854358698, + 59.728378024015)); +#7697 = CARTESIAN_POINT('',(0.25660807482,132.44804921624, + 60.636579546919)); +#7698 = CARTESIAN_POINT('',(0.280883347261,133.40970298246, + 60.79439564654)); +#7699 = CARTESIAN_POINT('',(1.243777671079,133.38536957943, + 60.94803070683)); +#7700 = CARTESIAN_POINT('',(0.160457534857,132.34050336851, + 61.283187591497)); +#7701 = CARTESIAN_POINT('',(0.180183488116,133.30737827459, + 61.440448425872)); +#7702 = CARTESIAN_POINT('',(1.152434658114,133.28783888424, + 61.563815281295)); +#7703 = CARTESIAN_POINT('',(3.215339825469E-02,132.12436554194, + 62.582693433319)); +#7704 = CARTESIAN_POINT('',(4.213907471141E-02,133.10160468328, + 62.739651749694)); +#7705 = CARTESIAN_POINT('',(1.030545728342,133.0918287832,62.80137435364 + )); +#7706 = CARTESIAN_POINT('',(-2.562181150268E-15,132.01577397444, + 63.235588757504)); +#7707 = CARTESIAN_POINT('',(5.106242744493E-03,132.99814176271, + 63.392890921331)); +#7708 = CARTESIAN_POINT('',(1.000000000002,132.99334975036, + 63.423146496353)); +#7709 = CARTESIAN_POINT('',(-2.602085213965E-15,131.90718208477, + 63.888486018689)); +#7710 = CARTESIAN_POINT('',(-2.602085213965E-15,132.89487042536, + 64.044920483729)); +#7711 = CARTESIAN_POINT('',(1.,132.89487042536,64.044920483729)); +#7712 = ADVANCED_FACE('',(#7713),#7749,.T.); +#7713 = FACE_BOUND('',#7714,.T.); +#7714 = EDGE_LOOP('',(#7715,#7724,#7733,#7742)); +#7715 = ORIENTED_EDGE('',*,*,#7716,.T.); +#7716 = EDGE_CURVE('',#7717,#6239,#7719,.T.); +#7717 = VERTEX_POINT('',#7718); +#7718 = CARTESIAN_POINT('',(1.,122.42383528443,130.15643446504)); +#7719 = CIRCLE('',#7720,1.); +#7720 = AXIS2_PLACEMENT_3D('',#7721,#7722,#7723); +#7721 = CARTESIAN_POINT('',(1.,121.43614694383,130.)); +#7722 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7723 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#7724 = ORIENTED_EDGE('',*,*,#7725,.F.); +#7725 = EDGE_CURVE('',#7726,#6239,#7728,.T.); +#7726 = VERTEX_POINT('',#7727); +#7727 = CARTESIAN_POINT('',(20.,118.42684257767,150.)); +#7728 = ELLIPSE('',#7729,20.225130723143,20.); +#7729 = AXIS2_PLACEMENT_3D('',#7730,#7731,#7732); +#7730 = CARTESIAN_POINT('',(20.,121.43614694383,130.)); +#7731 = DIRECTION('',(0.,-0.988868763014,-0.148790354305)); +#7732 = DIRECTION('',(0.,0.148790354305,-0.988868763014)); +#7733 = ORIENTED_EDGE('',*,*,#7734,.T.); +#7734 = EDGE_CURVE('',#7726,#7735,#7737,.T.); +#7735 = VERTEX_POINT('',#7736); +#7736 = CARTESIAN_POINT('',(20.,119.41453091826,149.15643446504)); +#7737 = CIRCLE('',#7738,1.); +#7738 = AXIS2_PLACEMENT_3D('',#7739,#7740,#7741); +#7739 = CARTESIAN_POINT('',(20.,118.42684257767,149.)); +#7740 = DIRECTION('',(-1.,0.,0.)); +#7741 = DIRECTION('',(0.,0.,-1.)); +#7742 = ORIENTED_EDGE('',*,*,#7743,.F.); +#7743 = EDGE_CURVE('',#7717,#7735,#7744,.T.); +#7744 = ELLIPSE('',#7745,19.236837389972,19.); +#7745 = AXIS2_PLACEMENT_3D('',#7746,#7747,#7748); +#7746 = CARTESIAN_POINT('',(20.,122.42383528443,130.15643446504)); +#7747 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#7748 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#7749 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#7750,#7751,#7752) + ,(#7753,#7754,#7755) + ,(#7756,#7757,#7758) + ,(#7759,#7760,#7761) + ,(#7762,#7763,#7764) + ,(#7765,#7766,#7767) + ,(#7768,#7769,#7770) + ,(#7771,#7772,#7773) + ,(#7774,#7775,#7776) + ,(#7777,#7778,#7779) + ,(#7780,#7781,#7782) + ,(#7783,#7784,#7785) + ,(#7786,#7787,#7788) + ,(#7789,#7790,#7791) + ,(#7792,#7793,#7794) + ,(#7795,#7796,#7797) + ,(#7798,#7799,#7800) + ,(#7801,#7802,#7803) + ,(#7804,#7805,#7806) + ,(#7807,#7808,#7809) + ,(#7810,#7811,#7812) + ,(#7813,#7814,#7815) + ,(#7816,#7817,#7818) + ,(#7819,#7820,#7821) + ,(#7822,#7823,#7824) + ,(#7825,#7826,#7827) + ,(#7828,#7829,#7830) + ,(#7831,#7832,#7833) + ,(#7834,#7835,#7836) + ,(#7837,#7838,#7839) + ,(#7840,#7841,#7842) + ,(#7843,#7844,#7845) + ,(#7846,#7847,#7848) + ,(#7849,#7850,#7851 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.708916738351,1.) + ,(1.,0.710719703807,1.) + ,(1.,0.714294863776,1.) + ,(1.,0.716067045081,1.) + ,(1.,0.719564418881,1.) + ,(1.,0.721289607931,1.) + ,(1.,0.724677561956,1.) + ,(1.,0.726340324002,1.) + ,(1.,0.729588848741,1.) + ,(1.,0.731174608952,1.) + ,(1.,0.734255496067,1.) + ,(1.,0.735750620885,1.) + ,(1.,0.738637613058,1.) + ,(1.,0.740029478678,1.) + ,(1.,0.742698395231,1.) + ,(1.,0.743975444743,1.) + ,(1.,0.746404286091,1.) + ,(1.,0.747556076765,1.) + ,(1.,0.749725110416,1.) + ,(1.,0.750742352454,1.) + ,(1.,0.752634183213,1.) + ,(1.,0.753508771185,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.755833435755,1.) + ,(1.,0.757128295704,1.) + ,(1.,0.757698117207,1.) + ,(1.,0.758678122053,1.) + ,(1.,0.75908830508,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.759993245062,1.) + ,(1.,0.760323294566,1.) + ,(1.,0.760405985458,1.) +,(1.,0.7604059656,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#7750 = CARTESIAN_POINT('',(8.673617379884E-16,121.43614694383,130.)); +#7751 = CARTESIAN_POINT('',(1.452830911131E-14,122.42383528443, + 130.15643446504)); +#7752 = CARTESIAN_POINT('',(1.,122.42383528443,130.15643446504)); +#7753 = CARTESIAN_POINT('',(8.673617379884E-16,121.33766761884, + 130.65449893408)); +#7754 = CARTESIAN_POINT('',(5.106242723708E-03,122.32056394712, + 130.80846402744)); +#7755 = CARTESIAN_POINT('',(1.000000000002,122.32535595943, + 130.77820845241)); +#7756 = CARTESIAN_POINT('',(3.215339825469E-02,121.239188586, + 131.30899592641)); +#7757 = CARTESIAN_POINT('',(4.213907470908E-02,122.21710102652, + 131.46170319907)); +#7758 = CARTESIAN_POINT('',(1.030545728342,122.2268769266, + 131.39998059512)); +#7759 = CARTESIAN_POINT('',(0.160457534857,121.04317848496, + 132.61168968677)); +#7760 = CARTESIAN_POINT('',(0.180183488118,122.0113274352, + 132.76090652289)); +#7761 = CARTESIAN_POINT('',(1.152434658114,122.03086682555, + 132.63753966747)); +#7762 = CARTESIAN_POINT('',(0.256608074819,120.94564778977, + 133.25988397567)); +#7763 = CARTESIAN_POINT('',(0.280883347258,121.90900272733, + 133.40695930222)); +#7764 = CARTESIAN_POINT('',(1.243777671078,121.93333613037, + 133.25332424193)); +#7765 = CARTESIAN_POINT('',(0.511980709052,120.75247378221, + 134.54372890496)); +#7766 = CARTESIAN_POINT('',(0.545153619573,121.70648803004, + 134.68558677899)); +#7767 = CARTESIAN_POINT('',(1.486381673599,121.74016212281, + 134.47297692475)); +#7768 = CARTESIAN_POINT('',(0.67120240846,120.65683076853, + 135.17937756023)); +#7769 = CARTESIAN_POINT('',(0.708437800839,121.60627497015, + 135.31830713764)); +#7770 = CARTESIAN_POINT('',(1.637642288037,121.64451910913, + 135.07684314726)); +#7771 = CARTESIAN_POINT('',(1.051184162251,120.46835322575, + 136.43200952994)); +#7772 = CARTESIAN_POINT('',(1.096175408835,121.40894167924, + 136.56422050201)); +#7773 = CARTESIAN_POINT('',(1.998624954139,121.45604156634, + 136.26684351848)); +#7774 = CARTESIAN_POINT('',(1.271943629103,120.37551898808, + 137.04899090754)); +#7775 = CARTESIAN_POINT('',(1.320377801637,121.31179057509, + 137.17760843305)); +#7776 = CARTESIAN_POINT('',(2.208346447646,121.36320732867, + 136.8529758272)); +#7777 = CARTESIAN_POINT('',(1.772875070445,120.19355305184, + 138.25834638705)); +#7778 = CARTESIAN_POINT('',(1.827676892288,121.12150652594, + 138.37901463655)); +#7779 = CARTESIAN_POINT('',(2.684231316925,121.18124139243, + 138.00186353274)); +#7780 = CARTESIAN_POINT('',(2.053046270392,120.10442163463, + 138.85071861904)); +#7781 = CARTESIAN_POINT('',(2.110565838487,121.02833623004, + 138.96726873341)); +#7782 = CARTESIAN_POINT('',(2.950393956874,121.09210997523, + 138.56461715313)); +#7783 = CARTESIAN_POINT('',(2.670103155674,119.93071973638, + 140.00515085399)); +#7784 = CARTESIAN_POINT('',(2.732413726888,120.84689799453, + 140.11282466768)); +#7785 = CARTESIAN_POINT('',(3.536597997889,120.91840807697, + 139.66132777633)); +#7786 = CARTESIAN_POINT('',(3.006987886903,119.84614952391, + 140.56720907195)); +#7787 = CARTESIAN_POINT('',(3.071214467658,120.75858773096, + 140.67039372805)); +#7788 = CARTESIAN_POINT('',(3.856638492558,120.83383786451, + 140.19528308339)); +#7789 = CARTESIAN_POINT('',(3.734227620995,119.68238450787, + 141.65560024883)); +#7790 = CARTESIAN_POINT('',(3.801541114191,120.58770468306, + 141.74930683058)); +#7791 = CARTESIAN_POINT('',(4.547516239945,120.67007284847, + 141.22925470142)); +#7792 = CARTESIAN_POINT('',(4.12458149939,119.60318995752, + 142.18193152487)); +#7793 = CARTESIAN_POINT('',(4.192962703766,120.50508622848, + 142.27093922329)); +#7794 = CARTESIAN_POINT('',(4.91835242442,120.59087829812, + 141.72926941367)); +#7795 = CARTESIAN_POINT('',(4.9550003661,119.45093897034,143.19379984167 + )); +#7796 = CARTESIAN_POINT('',(5.024698908551,120.34636537843, + 143.2730632307)); +#7797 = CARTESIAN_POINT('',(5.707250347796,120.43862731093, + 142.69054431462)); +#7798 = CARTESIAN_POINT('',(5.39506407042,119.37788276891, + 143.67933531788)); +#7799 = CARTESIAN_POINT('',(5.464965444018,120.27021565768, + 143.75385364542)); +#7800 = CARTESIAN_POINT('',(6.125310866901,120.36557110951, + 143.15180301703)); +#7801 = CARTESIAN_POINT('',(6.320664682119,119.23861207081, + 144.60493592958)); +#7802 = CARTESIAN_POINT('',(6.390109419653,120.12514737468, + 144.66977873699)); +#7803 = CARTESIAN_POINT('',(7.00463144801,120.2263004114,144.03112359813 + )); +#7804 = CARTESIAN_POINT('',(6.806200158328,119.17239778947, + 145.0449996339)); +#7805 = CARTESIAN_POINT('',(6.874995393317,120.05618153203, + 145.10521193044)); +#7806 = CARTESIAN_POINT('',(7.465890150411,120.16008613006, + 144.44918411724)); +#7807 = CARTESIAN_POINT('',(7.818068475127,119.0474486334,145.8754185006 + )); +#7808 = CARTESIAN_POINT('',(7.884687287914,119.92612627598, + 145.92634850034)); +#7809 = CARTESIAN_POINT('',(8.427165051371,120.035136974,145.23808204061 + )); +#7810 = CARTESIAN_POINT('',(8.344399751169,118.98871395187,146.265772379 + )); +#7811 = CARTESIAN_POINT('',(8.409556822255,119.86499128279, + 146.3123396562)); +#7812 = CARTESIAN_POINT('',(8.927179763612,119.97640229247, + 145.60891822509)); +#7813 = CARTESIAN_POINT('',(9.432790928047,118.87928966652, + 146.99301211309)); +#7814 = CARTESIAN_POINT('',(9.494160671524,119.75116746336, + 147.03099496855)); +#7815 = CARTESIAN_POINT('',(9.961151381643,119.86697800711, + 146.29979597248)); +#7816 = CARTESIAN_POINT('',(9.994849146008,118.82860023189, + 147.32989684432)); +#7817 = CARTESIAN_POINT('',(10.054010349218,119.69843632053, + 147.36392630143)); +#7818 = CARTESIAN_POINT('',(10.495106688711,119.81628857248, + 146.61983646715)); +#7819 = CARTESIAN_POINT('',(11.149281380952,118.73575463294, + 147.9469537296)); +#7820 = CARTESIAN_POINT('',(11.203202842052,119.60190939636, + 147.97337331514)); +#7821 = CARTESIAN_POINT('',(11.591817311901,119.72344297353, + 147.20604050816)); +#7822 = CARTESIAN_POINT('',(11.741653612947,118.69359861217, + 148.22712492955)); +#7823 = CARTESIAN_POINT('',(11.792707797065,119.55807598685, + 148.2501265708)); +#7824 = CARTESIAN_POINT('',(12.154570932299,119.68128695277, + 147.47220314811)); +#7825 = CARTESIAN_POINT('',(12.951009092449,118.6182258535, + 148.72805637089)); +#7826 = CARTESIAN_POINT('',(12.995573149228,119.47974890965, + 148.74466427311)); +#7827 = CARTESIAN_POINT('',(13.303458637827,119.60591419409, + 147.94808801739)); +#7828 = CARTESIAN_POINT('',(13.56799047006,118.58500923212, + 148.94881583774)); +#7829 = CARTESIAN_POINT('',(13.609136041422,119.44522355123, + 148.96264880716)); +#7830 = CARTESIAN_POINT('',(13.889590946558,119.57269757272, + 148.1578095109)); +#7831 = CARTESIAN_POINT('',(14.820622439762,118.52783519458, + 149.32879759153)); +#7832 = CARTESIAN_POINT('',(14.854266188703,119.38582864912, + 149.3376534603)); +#7833 = CARTESIAN_POINT('',(15.079591317772,119.51552353518, + 148.518792177)); +#7834 = CARTESIAN_POINT('',(15.456271095041,118.50387786682, + 149.48801929095)); +#7835 = CARTESIAN_POINT('',(15.486068645041,119.36093439185, + 149.49482961482)); +#7836 = CARTESIAN_POINT('',(15.683457540291,119.49156620742, + 148.67005279143)); +#7837 = CARTESIAN_POINT('',(16.740116024314,118.46545316767, + 149.74339192518)); +#7838 = CARTESIAN_POINT('',(16.761667893977,119.32102677355, + 149.74679640036)); +#7839 = CARTESIAN_POINT('',(16.903110223096,119.45314150826, + 148.91265679396)); +#7840 = CARTESIAN_POINT('',(17.388310313237,118.45098585568, + 149.83954246514)); +#7841 = CARTESIAN_POINT('',(17.405723965374,119.30599647969, + 149.841693941)); +#7842 = CARTESIAN_POINT('',(17.518894797574,119.43867419627, + 149.00399980693)); +#7843 = CARTESIAN_POINT('',(18.691004073581,118.43168054575, + 149.96784660174)); +#7844 = CARTESIAN_POINT('',(18.699717177365,119.28594902693, + 149.96826857617)); +#7845 = CARTESIAN_POINT('',(18.756453869903,119.41936888635, + 149.12588873669)); +#7846 = CARTESIAN_POINT('',(19.345501065926,118.42684257767,150.)); +#7847 = CARTESIAN_POINT('',(19.349927917339,119.28092326314, + 150.00000000003)); +#7848 = CARTESIAN_POINT('',(19.378226012629,119.41453091826, + 149.15643446504)); +#7849 = CARTESIAN_POINT('',(20.,118.42684257767,150.)); +#7850 = CARTESIAN_POINT('',(20.,119.28092326313,150.)); +#7851 = CARTESIAN_POINT('',(20.,119.41453091826,149.15643446504)); +#7852 = ADVANCED_FACE('',(#7853),#7864,.T.); +#7853 = FACE_BOUND('',#7854,.T.); +#7854 = EDGE_LOOP('',(#7855,#7856,#7857,#7858)); +#7855 = ORIENTED_EDGE('',*,*,#7594,.T.); +#7856 = ORIENTED_EDGE('',*,*,#6246,.F.); +#7857 = ORIENTED_EDGE('',*,*,#7716,.F.); +#7858 = ORIENTED_EDGE('',*,*,#7859,.F.); +#7859 = EDGE_CURVE('',#7595,#7717,#7860,.T.); +#7860 = LINE('',#7861,#7862); +#7861 = CARTESIAN_POINT('',(1.,143.30281489055,-1.668254647991)); +#7862 = VECTOR('',#7863,1.); +#7863 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7864 = CYLINDRICAL_SURFACE('',#7865,1.); +#7865 = AXIS2_PLACEMENT_3D('',#7866,#7867,#7868); +#7866 = CARTESIAN_POINT('',(1.,142.31512654996,-1.824689113031)); +#7867 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#7868 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#7869 = ADVANCED_FACE('',(#7870),#7904,.F.); +#7870 = FACE_BOUND('',#7871,.T.); +#7871 = EDGE_LOOP('',(#7872,#7882,#7890,#7898)); +#7872 = ORIENTED_EDGE('',*,*,#7873,.F.); +#7873 = EDGE_CURVE('',#7874,#7876,#7878,.T.); +#7874 = VERTEX_POINT('',#7875); +#7875 = CARTESIAN_POINT('',(32.,118.106486152,38.375123603644)); +#7876 = VERTEX_POINT('',#7877); +#7877 = CARTESIAN_POINT('',(32.,116.82240710816,35.854976582304)); +#7878 = LINE('',#7879,#7880); +#7879 = CARTESIAN_POINT('',(32.,116.82240710816,35.854976582304)); +#7880 = VECTOR('',#7881,1.); +#7881 = DIRECTION('',(0.,-0.45399049974,-0.891006524188)); +#7882 = ORIENTED_EDGE('',*,*,#7883,.F.); +#7883 = EDGE_CURVE('',#7884,#7874,#7886,.T.); +#7884 = VERTEX_POINT('',#7885); +#7885 = CARTESIAN_POINT('',(35.,118.106486152,38.375123603644)); +#7886 = LINE('',#7887,#7888); +#7887 = CARTESIAN_POINT('',(75.,118.106486152,38.375123603644)); +#7888 = VECTOR('',#7889,1.); +#7889 = DIRECTION('',(-1.,0.,0.)); +#7890 = ORIENTED_EDGE('',*,*,#7891,.F.); +#7891 = EDGE_CURVE('',#7892,#7884,#7894,.T.); +#7892 = VERTEX_POINT('',#7893); +#7893 = CARTESIAN_POINT('',(35.,116.82240710816,35.854976582304)); +#7894 = LINE('',#7895,#7896); +#7895 = CARTESIAN_POINT('',(35.,123.88484184928,49.715785199676)); +#7896 = VECTOR('',#7897,1.); +#7897 = DIRECTION('',(0.,0.45399049974,0.891006524188)); +#7898 = ORIENTED_EDGE('',*,*,#7899,.F.); +#7899 = EDGE_CURVE('',#7876,#7892,#7900,.T.); +#7900 = LINE('',#7901,#7902); +#7901 = CARTESIAN_POINT('',(35.,116.82240710816,35.854976582304)); +#7902 = VECTOR('',#7903,1.); +#7903 = DIRECTION('',(1.,0.,0.)); +#7904 = PLANE('',#7905); +#7905 = AXIS2_PLACEMENT_3D('',#7906,#7907,#7908); +#7906 = CARTESIAN_POINT('',(35.,116.82240710816,35.854976582304)); +#7907 = DIRECTION('',(0.,-0.891006524188,0.45399049974)); +#7908 = DIRECTION('',(1.,0.,0.)); +#7909 = ADVANCED_FACE('',(#7910),#7944,.F.); +#7910 = FACE_BOUND('',#7911,.T.); +#7911 = EDGE_LOOP('',(#7912,#7922,#7930,#7938)); +#7912 = ORIENTED_EDGE('',*,*,#7913,.F.); +#7913 = EDGE_CURVE('',#7914,#7916,#7918,.T.); +#7914 = VERTEX_POINT('',#7915); +#7915 = CARTESIAN_POINT('',(115.,118.106486152,38.375123603644)); +#7916 = VERTEX_POINT('',#7917); +#7917 = CARTESIAN_POINT('',(115.,116.82240710816,35.854976582304)); +#7918 = LINE('',#7919,#7920); +#7919 = CARTESIAN_POINT('',(115.,123.88484184928,49.715785199676)); +#7920 = VECTOR('',#7921,1.); +#7921 = DIRECTION('',(0.,-0.45399049974,-0.891006524188)); +#7922 = ORIENTED_EDGE('',*,*,#7923,.F.); +#7923 = EDGE_CURVE('',#7924,#7914,#7926,.T.); +#7924 = VERTEX_POINT('',#7925); +#7925 = CARTESIAN_POINT('',(118.,118.106486152,38.375123603644)); +#7926 = LINE('',#7927,#7928); +#7927 = CARTESIAN_POINT('',(75.,118.106486152,38.375123603644)); +#7928 = VECTOR('',#7929,1.); +#7929 = DIRECTION('',(-1.,0.,0.)); +#7930 = ORIENTED_EDGE('',*,*,#7931,.F.); +#7931 = EDGE_CURVE('',#7932,#7924,#7934,.T.); +#7932 = VERTEX_POINT('',#7933); +#7933 = CARTESIAN_POINT('',(118.,116.82240710816,35.854976582304)); +#7934 = LINE('',#7935,#7936); +#7935 = CARTESIAN_POINT('',(118.,116.82240710816,35.854976582304)); +#7936 = VECTOR('',#7937,1.); +#7937 = DIRECTION('',(0.,0.45399049974,0.891006524188)); +#7938 = ORIENTED_EDGE('',*,*,#7939,.F.); +#7939 = EDGE_CURVE('',#7916,#7932,#7940,.T.); +#7940 = LINE('',#7941,#7942); +#7941 = CARTESIAN_POINT('',(115.,116.82240710816,35.854976582304)); +#7942 = VECTOR('',#7943,1.); +#7943 = DIRECTION('',(1.,0.,0.)); +#7944 = PLANE('',#7945); +#7945 = AXIS2_PLACEMENT_3D('',#7946,#7947,#7948); +#7946 = CARTESIAN_POINT('',(115.,116.82240710816,35.854976582304)); +#7947 = DIRECTION('',(0.,-0.891006524188,0.45399049974)); +#7948 = DIRECTION('',(1.,0.,0.)); +#7949 = ADVANCED_FACE('',(#7950),#7976,.T.); +#7950 = FACE_BOUND('',#7951,.T.); +#7951 = EDGE_LOOP('',(#7952,#7963,#7969,#7970)); +#7952 = ORIENTED_EDGE('',*,*,#7953,.T.); +#7953 = EDGE_CURVE('',#7954,#7956,#7958,.T.); +#7954 = VERTEX_POINT('',#7955); +#7955 = CARTESIAN_POINT('',(130.,135.90417479153,45.044920483729)); +#7956 = VERTEX_POINT('',#7957); +#7957 = CARTESIAN_POINT('',(130.,135.22550344531,43.937429502394)); +#7958 = CIRCLE('',#7959,1.); +#7959 = AXIS2_PLACEMENT_3D('',#7960,#7961,#7962); +#7960 = CARTESIAN_POINT('',(130.,134.91648645094,44.888486018689)); +#7961 = DIRECTION('',(-1.,0.,0.)); +#7962 = DIRECTION('',(0.,0.,1.)); +#7963 = ORIENTED_EDGE('',*,*,#7964,.F.); +#7964 = EDGE_CURVE('',#7579,#7956,#7965,.T.); +#7965 = LINE('',#7966,#7967); +#7966 = CARTESIAN_POINT('',(75.,135.22550344531,43.937429502394)); +#7967 = VECTOR('',#7968,1.); +#7968 = DIRECTION('',(1.,0.,0.)); +#7969 = ORIENTED_EDGE('',*,*,#7576,.F.); +#7970 = ORIENTED_EDGE('',*,*,#7971,.F.); +#7971 = EDGE_CURVE('',#7954,#7577,#7972,.T.); +#7972 = LINE('',#7973,#7974); +#7973 = CARTESIAN_POINT('',(75.,135.90417479153,45.044920483729)); +#7974 = VECTOR('',#7975,1.); +#7975 = DIRECTION('',(-1.,0.,0.)); +#7976 = CYLINDRICAL_SURFACE('',#7977,1.); +#7977 = AXIS2_PLACEMENT_3D('',#7978,#7979,#7980); +#7978 = CARTESIAN_POINT('',(75.,134.91648645094,44.888486018689)); +#7979 = DIRECTION('',(-1.,0.,0.)); +#7980 = DIRECTION('',(0.,0.,1.)); +#7981 = ADVANCED_FACE('',(#7982),#8008,.T.); +#7982 = FACE_BOUND('',#7983,.T.); +#7983 = EDGE_LOOP('',(#7984,#7995,#8001,#8002)); +#7984 = ORIENTED_EDGE('',*,*,#7985,.T.); +#7985 = EDGE_CURVE('',#7986,#7988,#7990,.T.); +#7986 = VERTEX_POINT('',#7987); +#7987 = CARTESIAN_POINT('',(130.,118.42684257767,150.)); +#7988 = VERTEX_POINT('',#7989); +#7989 = CARTESIAN_POINT('',(130.,119.41453091826,149.15643446504)); +#7990 = CIRCLE('',#7991,1.); +#7991 = AXIS2_PLACEMENT_3D('',#7992,#7993,#7994); +#7992 = CARTESIAN_POINT('',(130.,118.42684257767,149.)); +#7993 = DIRECTION('',(-1.,0.,0.)); +#7994 = DIRECTION('',(0.,0.,1.)); +#7995 = ORIENTED_EDGE('',*,*,#7996,.F.); +#7996 = EDGE_CURVE('',#7735,#7988,#7997,.T.); +#7997 = LINE('',#7998,#7999); +#7998 = CARTESIAN_POINT('',(75.,119.41453091826,149.15643446504)); +#7999 = VECTOR('',#8000,1.); +#8000 = DIRECTION('',(1.,0.,0.)); +#8001 = ORIENTED_EDGE('',*,*,#7734,.F.); +#8002 = ORIENTED_EDGE('',*,*,#8003,.F.); +#8003 = EDGE_CURVE('',#7986,#7726,#8004,.T.); +#8004 = LINE('',#8005,#8006); +#8005 = CARTESIAN_POINT('',(75.,118.42684257767,150.)); +#8006 = VECTOR('',#8007,1.); +#8007 = DIRECTION('',(-1.,0.,0.)); +#8008 = CYLINDRICAL_SURFACE('',#8009,1.); +#8009 = AXIS2_PLACEMENT_3D('',#8010,#8011,#8012); +#8010 = CARTESIAN_POINT('',(75.,118.42684257767,149.)); +#8011 = DIRECTION('',(-1.,0.,0.)); +#8012 = DIRECTION('',(0.,0.,1.)); +#8013 = ADVANCED_FACE('',(#8014),#8040,.T.); +#8014 = FACE_BOUND('',#8015,.T.); +#8015 = EDGE_LOOP('',(#8016,#8025,#8032,#8033)); +#8016 = ORIENTED_EDGE('',*,*,#8017,.F.); +#8017 = EDGE_CURVE('',#6611,#8018,#8020,.T.); +#8018 = VERTEX_POINT('',#8019); +#8019 = CARTESIAN_POINT('',(149.,132.89487042536,64.044920483729)); +#8020 = CIRCLE('',#8021,1.); +#8021 = AXIS2_PLACEMENT_3D('',#8022,#8023,#8024); +#8022 = CARTESIAN_POINT('',(149.,131.90718208477,63.888486018689)); +#8023 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8024 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8025 = ORIENTED_EDGE('',*,*,#8026,.F.); +#8026 = EDGE_CURVE('',#7956,#6611,#8027,.T.); +#8027 = ELLIPSE('',#8028,20.225130723143,20.); +#8028 = AXIS2_PLACEMENT_3D('',#8029,#8030,#8031); +#8029 = CARTESIAN_POINT('',(130.,131.90718208477,63.888486018689)); +#8030 = DIRECTION('',(0.,-0.986448828905,-0.164069216954)); +#8031 = DIRECTION('',(0.,-0.164069216954,0.986448828905)); +#8032 = ORIENTED_EDGE('',*,*,#7953,.F.); +#8033 = ORIENTED_EDGE('',*,*,#8034,.F.); +#8034 = EDGE_CURVE('',#8018,#7954,#8035,.T.); +#8035 = ELLIPSE('',#8036,19.236837389972,19.); +#8036 = AXIS2_PLACEMENT_3D('',#8037,#8038,#8039); +#8037 = CARTESIAN_POINT('',(130.,132.89487042536,64.044920483729)); +#8038 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8039 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8040 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#8041,#8042,#8043) + ,(#8044,#8045,#8046) + ,(#8047,#8048,#8049) + ,(#8050,#8051,#8052) + ,(#8053,#8054,#8055) + ,(#8056,#8057,#8058) + ,(#8059,#8060,#8061) + ,(#8062,#8063,#8064) + ,(#8065,#8066,#8067) + ,(#8068,#8069,#8070) + ,(#8071,#8072,#8073) + ,(#8074,#8075,#8076) + ,(#8077,#8078,#8079) + ,(#8080,#8081,#8082) + ,(#8083,#8084,#8085) + ,(#8086,#8087,#8088) + ,(#8089,#8090,#8091) + ,(#8092,#8093,#8094) + ,(#8095,#8096,#8097) + ,(#8098,#8099,#8100) + ,(#8101,#8102,#8103) + ,(#8104,#8105,#8106) + ,(#8107,#8108,#8109) + ,(#8110,#8111,#8112) + ,(#8113,#8114,#8115) + ,(#8116,#8117,#8118) + ,(#8119,#8120,#8121) + ,(#8122,#8123,#8124) + ,(#8125,#8126,#8127) + ,(#8128,#8129,#8130) + ,(#8131,#8132,#8133) + ,(#8134,#8135,#8136) + ,(#8137,#8138,#8139) + ,(#8140,#8141,#8142 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.708916738351,1.) + ,(1.,0.710719703808,1.) + ,(1.,0.714294863775,1.) + ,(1.,0.716067045082,1.) + ,(1.,0.71956441888,1.) + ,(1.,0.721289607927,1.) + ,(1.,0.724677561961,1.) + ,(1.,0.726340323999,1.) + ,(1.,0.729588848743,1.) + ,(1.,0.73117460895,1.) + ,(1.,0.734255496068,1.) + ,(1.,0.735750620888,1.) + ,(1.,0.738637613055,1.) + ,(1.,0.740029478676,1.) + ,(1.,0.742698395233,1.) + ,(1.,0.743975444743,1.) + ,(1.,0.746404286092,1.) + ,(1.,0.747556076766,1.) + ,(1.,0.749725110414,1.) + ,(1.,0.750742352454,1.) + ,(1.,0.752634183213,1.) + ,(1.,0.753508771184,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.755833435757,1.) + ,(1.,0.757128295703,1.) + ,(1.,0.757698117207,1.) + ,(1.,0.758678122052,1.) + ,(1.,0.759088305079,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.75999324506,1.) + ,(1.,0.760323294568,1.) + ,(1.,0.760405985456,1.) +,(1.,0.7604059656,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#8041 = CARTESIAN_POINT('',(150.,131.90718208477,63.888486018689)); +#8042 = CARTESIAN_POINT('',(150.,132.89487042536,64.044920483729)); +#8043 = CARTESIAN_POINT('',(149.,132.89487042536,64.044920483729)); +#8044 = CARTESIAN_POINT('',(150.,132.01577397444,63.235588757505)); +#8045 = CARTESIAN_POINT('',(149.99489375726,132.99814176271, + 63.392890921331)); +#8046 = CARTESIAN_POINT('',(148.99999999999,132.99334975036, + 63.423146496354)); +#8047 = CARTESIAN_POINT('',(149.96784660174,132.12436554195, + 62.582693433319)); +#8048 = CARTESIAN_POINT('',(149.95786092529,133.10160468329, + 62.739651749696)); +#8049 = CARTESIAN_POINT('',(148.96945427165,133.0918287832, + 62.801374353638)); +#8050 = CARTESIAN_POINT('',(149.83954246514,132.3405033685, + 61.283187591497)); +#8051 = CARTESIAN_POINT('',(149.81981651188,133.30737827458, + 61.44044842587)); +#8052 = CARTESIAN_POINT('',(148.84756534188,133.28783888424, + 61.563815281296)); +#8053 = CARTESIAN_POINT('',(149.74339192518,132.44804921624, + 60.63657954692)); +#8054 = CARTESIAN_POINT('',(149.71911665274,133.40970298246, + 60.79439564654)); +#8055 = CARTESIAN_POINT('',(148.75622232892,133.38536957943, + 60.94803070683)); +#8056 = CARTESIAN_POINT('',(149.48801929094,132.66105971886, + 59.355876409805)); +#8057 = CARTESIAN_POINT('',(149.45484638042,133.61221767976, + 59.515768169774)); +#8058 = CARTESIAN_POINT('',(148.51361832639,133.57854358698, + 59.728378024015)); +#8059 = CARTESIAN_POINT('',(149.32879759154,132.76652404439, + 58.721783297514)); +#8060 = CARTESIAN_POINT('',(149.29156219917,133.71243073964, + 58.883047811126)); +#8061 = CARTESIAN_POINT('',(148.36235771196,133.67418660067, + 59.124511801506)); +#8062 = CARTESIAN_POINT('',(148.94881583774,132.97435581549, + 57.472216736427)); +#8063 = CARTESIAN_POINT('',(148.90382459115,133.90976403055, + 57.637134446756)); +#8064 = CARTESIAN_POINT('',(148.00137504586,133.86266414345, + 57.934511430282)); +#8065 = CARTESIAN_POINT('',(148.7280563709,133.0767229397, + 56.856745219725)); +#8066 = CARTESIAN_POINT('',(148.67962219837,134.00691513471, + 57.023746515716)); +#8067 = CARTESIAN_POINT('',(147.79165355235,133.95549838112, + 57.348379121561)); +#8068 = CARTESIAN_POINT('',(148.22712492955,133.27737444572, + 55.65034924372)); +#8069 = CARTESIAN_POINT('',(148.1723231077,134.19719918385, + 55.822340312222)); +#8070 = CARTESIAN_POINT('',(147.31576868307,134.13746431736, + 56.199491416023)); +#8071 = CARTESIAN_POINT('',(147.9469537296,133.37565851725, + 55.059426649767)); +#8072 = CARTESIAN_POINT('',(147.88943416151,134.29036947975, + 55.234086215348)); +#8073 = CARTESIAN_POINT('',(147.04960604313,134.22659573456, + 55.636737795635)); +#8074 = CARTESIAN_POINT('',(147.32989684432,133.56719737449, + 53.907819511585)); +#8075 = CARTESIAN_POINT('',(147.2675862731,134.47180771526, + 54.088530281089)); +#8076 = CARTESIAN_POINT('',(146.4634020021,134.40029763282, + 54.540027172436)); +#8077 = CARTESIAN_POINT('',(146.99301211309,133.66045186401, + 53.347136747985)); +#8078 = CARTESIAN_POINT('',(146.92878553232,134.56011797883, + 53.530961220709)); +#8079 = CARTESIAN_POINT('',(146.14336150743,134.48486784529, + 54.006071865373)); +#8080 = CARTESIAN_POINT('',(146.265772379,133.84103344854, + 52.261409053902)); +#8081 = CARTESIAN_POINT('',(146.19845888582,134.73100102674, + 52.45204811819)); +#8082 = CARTESIAN_POINT('',(145.45248376005,134.64863286132, + 52.97210024734)); +#8083 = CARTESIAN_POINT('',(145.8754185006,133.92836026435, + 51.736365802169)); +#8084 = CARTESIAN_POINT('',(145.80703729623,134.81361948131, + 51.930415725477)); +#8085 = CARTESIAN_POINT('',(145.08164757558,134.72782741167, + 52.472085535099)); +#8086 = CARTESIAN_POINT('',(145.0449996339,134.09624547684, + 50.726973703394)); +#8087 = CARTESIAN_POINT('',(144.97530109144,134.97234033135, + 50.928291718066)); +#8088 = CARTESIAN_POINT('',(144.2927496522,134.88007839886, + 51.51081063414)); +#8089 = CARTESIAN_POINT('',(144.60493592958,134.17680361393, + 50.242626417067)); +#8090 = CARTESIAN_POINT('',(144.53503455598,135.04849005211, + 50.447501303332)); +#8091 = CARTESIAN_POINT('',(143.87468913309,134.95313460028, + 51.049551931739)); +#8092 = CARTESIAN_POINT('',(143.67933531788,134.330375628, + 49.319290911294)); +#8093 = CARTESIAN_POINT('',(143.60989058034,135.19355833512, + 49.531576211787)); +#8094 = CARTESIAN_POINT('',(142.99536855199,135.09240529839, + 50.17023135063)); +#8095 = CARTESIAN_POINT('',(143.19379984167,134.4033892675, + 48.88030411951)); +#8096 = CARTESIAN_POINT('',(143.12500460668,135.26252417776, + 49.096143018324)); +#8097 = CARTESIAN_POINT('',(142.53410984958,135.15861957973, + 49.752170831524)); +#8098 = CARTESIAN_POINT('',(142.18193152487,134.54116910067, + 48.051917432413)); +#8099 = CARTESIAN_POINT('',(142.11531271208,135.39257943382, + 48.275006448423)); +#8100 = CARTESIAN_POINT('',(141.57283494863,135.28356873579, + 48.96327290815)); +#8101 = CARTESIAN_POINT('',(141.65560024882,134.60593508132, + 47.662518817945)); +#8102 = CARTESIAN_POINT('',(141.59044317774,135.453714427, + 47.889015292557)); +#8103 = CARTESIAN_POINT('',(141.07282023638,135.34230341733, + 48.592436723671)); +#8104 = CARTESIAN_POINT('',(140.56720907196,134.72659583851, + 46.937058766172)); +#8105 = CARTESIAN_POINT('',(140.50583932847,135.56753824644, + 47.170359980223)); +#8106 = CARTESIAN_POINT('',(140.03884861836,135.45172770268, + 47.90155897629)); +#8107 = CARTESIAN_POINT('',(140.00515085398,134.78249042849, + 46.600998450548)); +#8108 = CARTESIAN_POINT('',(139.94598965078,135.62026938925, + 46.837428647328)); +#8109 = CARTESIAN_POINT('',(139.50489331128,135.50241713731, + 47.581518481616)); +#8110 = CARTESIAN_POINT('',(138.85071861905,134.88487008065, + 45.985451610957)); +#8111 = CARTESIAN_POINT('',(138.79679715794,135.71679631344, + 46.227981633629)); +#8112 = CARTESIAN_POINT('',(138.40818268809,135.59526273626, + 46.995314440605)); +#8113 = CARTESIAN_POINT('',(138.25834638705,134.93135498452, + 45.705966038731)); +#8114 = CARTESIAN_POINT('',(138.20729220292,135.76062972292, + 45.951228377955)); +#8115 = CARTESIAN_POINT('',(137.84542906769,135.63741875702, + 46.729151800652)); +#8116 = CARTESIAN_POINT('',(137.04899090755,135.01446755962, + 45.206260463884)); +#8117 = CARTESIAN_POINT('',(137.00442685078,135.83895680016, + 45.45669067566)); +#8118 = CARTESIAN_POINT('',(136.69654136217,135.7127915157, + 46.253266931377)); +#8119 = CARTESIAN_POINT('',(136.43200952994,135.05109510233, + 44.986041233896)); +#8120 = CARTESIAN_POINT('',(136.39086395857,135.87348215856, + 45.238706141606)); +#8121 = CARTESIAN_POINT('',(136.11040905344,135.74600813708, + 46.043545437866)); +#8122 = CARTESIAN_POINT('',(135.17937756023,135.11414018086, + 44.60698936165)); +#8123 = CARTESIAN_POINT('',(135.14573381129,135.93287706067, + 44.863701488466)); +#8124 = CARTESIAN_POINT('',(134.92040868222,135.80318217461, + 45.682562771768)); +#8125 = CARTESIAN_POINT('',(134.54372890495,135.14055761916, + 44.448157305467)); +#8126 = CARTESIAN_POINT('',(134.51393135495,135.95777131794, + 44.706525333938)); +#8127 = CARTESIAN_POINT('',(134.3165424597,135.82713950237, + 45.531302157327)); +#8128 = CARTESIAN_POINT('',(133.25988397569,135.18292804252, + 44.19340961256)); +#8129 = CARTESIAN_POINT('',(133.23833210602,135.99767893625, + 44.454558548412)); +#8130 = CARTESIAN_POINT('',(133.0968897769,135.86556420153, + 45.288698154808)); +#8131 = CARTESIAN_POINT('',(132.61168968676,135.19888096204, + 44.097494369712)); +#8132 = CARTESIAN_POINT('',(132.59427603463,136.01270923012, + 44.35966100777)); +#8133 = CARTESIAN_POINT('',(132.48110520242,135.88003151352, + 45.197355141842)); +#8134 = CARTESIAN_POINT('',(131.30899592641,135.2201686799, + 43.969504215684)); +#8135 = CARTESIAN_POINT('',(131.30028282263,136.03275668285, + 44.233086372596)); +#8136 = CARTESIAN_POINT('',(131.24354613009,135.89933682344, + 45.075466212072)); +#8137 = CARTESIAN_POINT('',(130.65449893407,135.22550344531, + 43.937429502392)); +#8138 = CARTESIAN_POINT('',(130.65007208266,136.03778244666, + 44.201354948787)); +#8139 = CARTESIAN_POINT('',(130.62177398737,135.90417479153, + 45.04492048374)); +#8140 = CARTESIAN_POINT('',(130.,135.22550344531,43.937429502394)); +#8141 = CARTESIAN_POINT('',(130.,136.03778244666,44.201354948769)); +#8142 = CARTESIAN_POINT('',(130.,135.90417479153,45.044920483729)); +#8143 = ADVANCED_FACE('',(#8144),#8170,.T.); +#8144 = FACE_BOUND('',#8145,.T.); +#8145 = EDGE_LOOP('',(#8146,#8155,#8162,#8163)); +#8146 = ORIENTED_EDGE('',*,*,#8147,.T.); +#8147 = EDGE_CURVE('',#6593,#8148,#8150,.T.); +#8148 = VERTEX_POINT('',#8149); +#8149 = CARTESIAN_POINT('',(149.,122.42383528443,130.15643446504)); +#8150 = CIRCLE('',#8151,1.); +#8151 = AXIS2_PLACEMENT_3D('',#8152,#8153,#8154); +#8152 = CARTESIAN_POINT('',(149.,121.43614694383,130.)); +#8153 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8154 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8155 = ORIENTED_EDGE('',*,*,#8156,.F.); +#8156 = EDGE_CURVE('',#7988,#8148,#8157,.T.); +#8157 = ELLIPSE('',#8158,19.236837389972,19.); +#8158 = AXIS2_PLACEMENT_3D('',#8159,#8160,#8161); +#8159 = CARTESIAN_POINT('',(130.,122.42383528443,130.15643446504)); +#8160 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8161 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8162 = ORIENTED_EDGE('',*,*,#7985,.F.); +#8163 = ORIENTED_EDGE('',*,*,#8164,.F.); +#8164 = EDGE_CURVE('',#6593,#7986,#8165,.T.); +#8165 = ELLIPSE('',#8166,20.225130723143,20.); +#8166 = AXIS2_PLACEMENT_3D('',#8167,#8168,#8169); +#8167 = CARTESIAN_POINT('',(130.,121.43614694383,130.)); +#8168 = DIRECTION('',(0.,-0.988868763014,-0.148790354305)); +#8169 = DIRECTION('',(0.,-0.148790354305,0.988868763014)); +#8170 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#8171,#8172,#8173) + ,(#8174,#8175,#8176) + ,(#8177,#8178,#8179) + ,(#8180,#8181,#8182) + ,(#8183,#8184,#8185) + ,(#8186,#8187,#8188) + ,(#8189,#8190,#8191) + ,(#8192,#8193,#8194) + ,(#8195,#8196,#8197) + ,(#8198,#8199,#8200) + ,(#8201,#8202,#8203) + ,(#8204,#8205,#8206) + ,(#8207,#8208,#8209) + ,(#8210,#8211,#8212) + ,(#8213,#8214,#8215) + ,(#8216,#8217,#8218) + ,(#8219,#8220,#8221) + ,(#8222,#8223,#8224) + ,(#8225,#8226,#8227) + ,(#8228,#8229,#8230) + ,(#8231,#8232,#8233) + ,(#8234,#8235,#8236) + ,(#8237,#8238,#8239) + ,(#8240,#8241,#8242) + ,(#8243,#8244,#8245) + ,(#8246,#8247,#8248) + ,(#8249,#8250,#8251) + ,(#8252,#8253,#8254) + ,(#8255,#8256,#8257) + ,(#8258,#8259,#8260) + ,(#8261,#8262,#8263) + ,(#8264,#8265,#8266) + ,(#8267,#8268,#8269) + ,(#8270,#8271,#8272 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.7604059656,1.) + ,(1.,0.760405985458,1.) + ,(1.,0.760323294566,1.) + ,(1.,0.759993245062,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.75908830508,1.) + ,(1.,0.758678122053,1.) + ,(1.,0.757698117207,1.) + ,(1.,0.757128295704,1.) + ,(1.,0.755833435755,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.753508771185,1.) + ,(1.,0.752634183213,1.) + ,(1.,0.750742352454,1.) + ,(1.,0.749725110416,1.) + ,(1.,0.747556076765,1.) + ,(1.,0.746404286091,1.) + ,(1.,0.743975444743,1.) + ,(1.,0.742698395231,1.) + ,(1.,0.740029478678,1.) + ,(1.,0.738637613058,1.) + ,(1.,0.735750620885,1.) + ,(1.,0.734255496066,1.) + ,(1.,0.731174608952,1.) + ,(1.,0.72958884874,1.) + ,(1.,0.726340324003,1.) + ,(1.,0.724677561956,1.) + ,(1.,0.721289607931,1.) + ,(1.,0.719564418881,1.) + ,(1.,0.716067045081,1.) + ,(1.,0.714294863778,1.) + ,(1.,0.710719703805,1.) + ,(1.,0.708916738352,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#8171 = CARTESIAN_POINT('',(130.,118.42684257767,150.)); +#8172 = CARTESIAN_POINT('',(130.,119.28092326313,150.)); +#8173 = CARTESIAN_POINT('',(130.,119.41453091826,149.15643446504)); +#8174 = CARTESIAN_POINT('',(130.65449893407,118.42684257767,150.)); +#8175 = CARTESIAN_POINT('',(130.65007208266,119.28092326314, + 150.00000000003)); +#8176 = CARTESIAN_POINT('',(130.62177398737,119.41453091826, + 149.15643446504)); +#8177 = CARTESIAN_POINT('',(131.30899592641,118.43168054575, + 149.96784660174)); +#8178 = CARTESIAN_POINT('',(131.30028282263,119.28594902693, + 149.96826857616)); +#8179 = CARTESIAN_POINT('',(131.24354613009,119.41936888635, + 149.12588873669)); +#8180 = CARTESIAN_POINT('',(132.61168968676,118.45098585568, + 149.83954246514)); +#8181 = CARTESIAN_POINT('',(132.59427603462,119.30599647969, + 149.841693941)); +#8182 = CARTESIAN_POINT('',(132.48110520242,119.43867419627, + 149.00399980693)); +#8183 = CARTESIAN_POINT('',(133.25988397569,118.46545316767, + 149.74339192517)); +#8184 = CARTESIAN_POINT('',(133.23833210602,119.32102677355, + 149.74679640036)); +#8185 = CARTESIAN_POINT('',(133.0968897769,119.45314150826, + 148.91265679396)); +#8186 = CARTESIAN_POINT('',(134.54372890495,118.50387786682, + 149.48801929095)); +#8187 = CARTESIAN_POINT('',(134.51393135495,119.36093439185, + 149.49482961482)); +#8188 = CARTESIAN_POINT('',(134.3165424597,119.49156620742, + 148.67005279143)); +#8189 = CARTESIAN_POINT('',(135.17937756023,118.52783519458, + 149.32879759154)); +#8190 = CARTESIAN_POINT('',(135.14573381129,119.38582864912, + 149.3376534603)); +#8191 = CARTESIAN_POINT('',(134.92040868222,119.51552353518, + 148.518792177)); +#8192 = CARTESIAN_POINT('',(136.43200952994,118.58500923212, + 148.94881583774)); +#8193 = CARTESIAN_POINT('',(136.39086395858,119.44522355123, + 148.96264880716)); +#8194 = CARTESIAN_POINT('',(136.11040905344,119.57269757272, + 148.1578095109)); +#8195 = CARTESIAN_POINT('',(137.04899090756,118.6182258535, + 148.72805637089)); +#8196 = CARTESIAN_POINT('',(137.00442685078,119.47974890965, + 148.74466427311)); +#8197 = CARTESIAN_POINT('',(136.69654136218,119.60591419409, + 147.94808801739)); +#8198 = CARTESIAN_POINT('',(138.25834638704,118.69359861217, + 148.22712492956)); +#8199 = CARTESIAN_POINT('',(138.20729220292,119.55807598685, + 148.2501265708)); +#8200 = CARTESIAN_POINT('',(137.84542906769,119.68128695277, + 147.47220314811)); +#8201 = CARTESIAN_POINT('',(138.85071861904,118.73575463294, + 147.9469537296)); +#8202 = CARTESIAN_POINT('',(138.79679715794,119.60190939636, + 147.97337331514)); +#8203 = CARTESIAN_POINT('',(138.40818268809,119.72344297353, + 147.20604050816)); +#8204 = CARTESIAN_POINT('',(140.00515085399,118.82860023189, + 147.32989684432)); +#8205 = CARTESIAN_POINT('',(139.94598965078,119.69843632053, + 147.36392630143)); +#8206 = CARTESIAN_POINT('',(139.50489331129,119.81628857249, + 146.61983646714)); +#8207 = CARTESIAN_POINT('',(140.56720907195,118.87928966652, + 146.99301211309)); +#8208 = CARTESIAN_POINT('',(140.50583932847,119.75116746336, + 147.03099496855)); +#8209 = CARTESIAN_POINT('',(140.03884861835,119.86697800711, + 146.29979597248)); +#8210 = CARTESIAN_POINT('',(141.65560024883,118.98871395187, + 146.265772379)); +#8211 = CARTESIAN_POINT('',(141.59044317774,119.86499128279, + 146.3123396562)); +#8212 = CARTESIAN_POINT('',(141.07282023639,119.97640229247, + 145.60891822509)); +#8213 = CARTESIAN_POINT('',(142.18193152487,119.0474486334, + 145.8754185006)); +#8214 = CARTESIAN_POINT('',(142.11531271208,119.92612627598, + 145.92634850033)); +#8215 = CARTESIAN_POINT('',(141.57283494863,120.035136974, + 145.23808204061)); +#8216 = CARTESIAN_POINT('',(143.19379984167,119.17239778947, + 145.0449996339)); +#8217 = CARTESIAN_POINT('',(143.12500460668,120.05618153203, + 145.10521193045)); +#8218 = CARTESIAN_POINT('',(142.53410984958,120.16008613006, + 144.44918411725)); +#8219 = CARTESIAN_POINT('',(143.67933531787,119.23861207081, + 144.60493592958)); +#8220 = CARTESIAN_POINT('',(143.60989058034,120.12514737468, + 144.669778737)); +#8221 = CARTESIAN_POINT('',(142.99536855199,120.2263004114, + 144.03112359814)); +#8222 = CARTESIAN_POINT('',(144.60493592958,119.37788276891, + 143.67933531787)); +#8223 = CARTESIAN_POINT('',(144.53503455598,120.27021565768, + 143.75385364542)); +#8224 = CARTESIAN_POINT('',(143.87468913309,120.36557110951, + 143.15180301702)); +#8225 = CARTESIAN_POINT('',(145.04499963389,119.45093897034, + 143.19379984167)); +#8226 = CARTESIAN_POINT('',(144.97530109145,120.34636537843, + 143.2730632307)); +#8227 = CARTESIAN_POINT('',(144.2927496522,120.43862731093, + 142.69054431463)); +#8228 = CARTESIAN_POINT('',(145.87541850061,119.60318995752, + 142.18193152487)); +#8229 = CARTESIAN_POINT('',(145.80703729623,120.50508622848, + 142.27093922329)); +#8230 = CARTESIAN_POINT('',(145.08164757558,120.59087829812, + 141.72926941366)); +#8231 = CARTESIAN_POINT('',(146.265772379,119.68238450788, + 141.65560024883)); +#8232 = CARTESIAN_POINT('',(146.19845888581,120.58770468306, + 141.74930683058)); +#8233 = CARTESIAN_POINT('',(145.45248376005,120.67007284847, + 141.22925470142)); +#8234 = CARTESIAN_POINT('',(146.99301211309,119.84614952391, + 140.56720907195)); +#8235 = CARTESIAN_POINT('',(146.92878553233,120.75858773096, + 140.67039372805)); +#8236 = CARTESIAN_POINT('',(146.14336150744,120.83383786451, + 140.19528308339)); +#8237 = CARTESIAN_POINT('',(147.32989684432,119.93071973638, + 140.00515085399)); +#8238 = CARTESIAN_POINT('',(147.26758627311,120.84689799453, + 140.11282466768)); +#8239 = CARTESIAN_POINT('',(146.46340200211,120.91840807697, + 139.66132777633)); +#8240 = CARTESIAN_POINT('',(147.9469537296,120.10442163463, + 138.85071861904)); +#8241 = CARTESIAN_POINT('',(147.8894341615,121.02833623004, + 138.96726873341)); +#8242 = CARTESIAN_POINT('',(147.04960604312,121.09210997523, + 138.56461715313)); +#8243 = CARTESIAN_POINT('',(148.22712492955,120.19355305184, + 138.25834638705)); +#8244 = CARTESIAN_POINT('',(148.17232310771,121.12150652594, + 138.37901463655)); +#8245 = CARTESIAN_POINT('',(147.31576868307,121.18124139243, + 138.00186353274)); +#8246 = CARTESIAN_POINT('',(148.72805637089,120.37551898807, + 137.04899090754)); +#8247 = CARTESIAN_POINT('',(148.67962219835,121.31179057508, + 137.17760843305)); +#8248 = CARTESIAN_POINT('',(147.79165355235,121.36320732867, + 136.8529758272)); +#8249 = CARTESIAN_POINT('',(148.94881583774,120.46835322575, + 136.43200952994)); +#8250 = CARTESIAN_POINT('',(148.90382459115,121.40894167924, + 136.56422050201)); +#8251 = CARTESIAN_POINT('',(148.00137504586,121.45604156634, + 136.26684351848)); +#8252 = CARTESIAN_POINT('',(149.32879759154,120.65683076853, + 135.17937756023)); +#8253 = CARTESIAN_POINT('',(149.29156219916,121.60627497015, + 135.31830713764)); +#8254 = CARTESIAN_POINT('',(148.36235771196,121.64451910913, + 135.07684314726)); +#8255 = CARTESIAN_POINT('',(149.48801929094,120.75247378221, + 134.54372890496)); +#8256 = CARTESIAN_POINT('',(149.45484638042,121.70648803003, + 134.68558677899)); +#8257 = CARTESIAN_POINT('',(148.5136183264,121.74016212281, + 134.47297692475)); +#8258 = CARTESIAN_POINT('',(149.74339192518,120.94564778977, + 133.25988397567)); +#8259 = CARTESIAN_POINT('',(149.71911665274,121.90900272733, + 133.40695930222)); +#8260 = CARTESIAN_POINT('',(148.75622232891,121.93333613037, + 133.25332424193)); +#8261 = CARTESIAN_POINT('',(149.83954246514,121.04317848496, + 132.61168968677)); +#8262 = CARTESIAN_POINT('',(149.81981651187,122.0113274352, + 132.76090652289)); +#8263 = CARTESIAN_POINT('',(148.84756534188,122.03086682555, + 132.63753966747)); +#8264 = CARTESIAN_POINT('',(149.96784660174,121.239188586, + 131.30899592641)); +#8265 = CARTESIAN_POINT('',(149.9578609253,122.21710102651, + 131.46170319907)); +#8266 = CARTESIAN_POINT('',(148.96945427165,122.2268769266, + 131.39998059512)); +#8267 = CARTESIAN_POINT('',(150.,121.33766761883,130.65449893408)); +#8268 = CARTESIAN_POINT('',(149.99489375726,122.32056394712, + 130.80846402744)); +#8269 = CARTESIAN_POINT('',(148.99999999999,122.32535595943, + 130.77820845241)); +#8270 = CARTESIAN_POINT('',(150.,121.43614694383,130.)); +#8271 = CARTESIAN_POINT('',(150.,122.42383528443,130.15643446504)); +#8272 = CARTESIAN_POINT('',(149.,122.42383528443,130.15643446504)); +#8273 = ADVANCED_FACE('',(#8274,#8289),#8341,.T.); +#8274 = FACE_BOUND('',#8275,.T.); +#8275 = EDGE_LOOP('',(#8276,#8277,#8278,#8279,#8280,#8286,#8287,#8288)); +#8276 = ORIENTED_EDGE('',*,*,#7859,.T.); +#8277 = ORIENTED_EDGE('',*,*,#7743,.T.); +#8278 = ORIENTED_EDGE('',*,*,#7996,.T.); +#8279 = ORIENTED_EDGE('',*,*,#8156,.T.); +#8280 = ORIENTED_EDGE('',*,*,#8281,.T.); +#8281 = EDGE_CURVE('',#8148,#8018,#8282,.T.); +#8282 = LINE('',#8283,#8284); +#8283 = CARTESIAN_POINT('',(149.,143.30281489055,-1.668254647991)); +#8284 = VECTOR('',#8285,1.); +#8285 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#8286 = ORIENTED_EDGE('',*,*,#8034,.T.); +#8287 = ORIENTED_EDGE('',*,*,#7971,.T.); +#8288 = ORIENTED_EDGE('',*,*,#7603,.T.); +#8289 = FACE_BOUND('',#8290,.T.); +#8290 = EDGE_LOOP('',(#8291,#8301,#8308,#8309,#8318,#8326,#8333,#8334)); +#8291 = ORIENTED_EDGE('',*,*,#8292,.F.); +#8292 = EDGE_CURVE('',#8293,#8295,#8297,.T.); +#8293 = VERTEX_POINT('',#8294); +#8294 = CARTESIAN_POINT('',(130.,135.64182134585,46.701354948769)); +#8295 = VERTEX_POINT('',#8296); +#8296 = CARTESIAN_POINT('',(20.,135.64182134585,46.701354948769)); +#8297 = LINE('',#8298,#8299); +#8298 = CARTESIAN_POINT('',(75.,135.64182134585,46.701354948769)); +#8299 = VECTOR('',#8300,1.); +#8300 = DIRECTION('',(-1.,0.,0.)); +#8301 = ORIENTED_EDGE('',*,*,#8302,.T.); +#8302 = EDGE_CURVE('',#8293,#7083,#8303,.T.); +#8303 = ELLIPSE('',#8304,17.71813970129,17.5); +#8304 = AXIS2_PLACEMENT_3D('',#8305,#8306,#8307); +#8305 = CARTESIAN_POINT('',(130.,132.87009364017,64.201354948769)); +#8306 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#8307 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8308 = ORIENTED_EDGE('',*,*,#7082,.F.); +#8309 = ORIENTED_EDGE('',*,*,#8310,.F.); +#8310 = EDGE_CURVE('',#8311,#7075,#8313,.T.); +#8311 = VERTEX_POINT('',#8312); +#8312 = CARTESIAN_POINT('',(130.,119.67688436394,147.5)); +#8313 = ELLIPSE('',#8314,17.71813970129,17.5); +#8314 = AXIS2_PLACEMENT_3D('',#8315,#8316,#8317); +#8315 = CARTESIAN_POINT('',(130.,122.44861206962,130.)); +#8316 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8317 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8318 = ORIENTED_EDGE('',*,*,#8319,.F.); +#8319 = EDGE_CURVE('',#8320,#8311,#8322,.T.); +#8320 = VERTEX_POINT('',#8321); +#8321 = CARTESIAN_POINT('',(20.,119.67688436394,147.5)); +#8322 = LINE('',#8323,#8324); +#8323 = CARTESIAN_POINT('',(75.,119.67688436394,147.5)); +#8324 = VECTOR('',#8325,1.); +#8325 = DIRECTION('',(1.,0.,0.)); +#8326 = ORIENTED_EDGE('',*,*,#8327,.F.); +#8327 = EDGE_CURVE('',#7323,#8320,#8328,.T.); +#8328 = ELLIPSE('',#8329,17.71813970129,17.5); +#8329 = AXIS2_PLACEMENT_3D('',#8330,#8331,#8332); +#8330 = CARTESIAN_POINT('',(20.,122.44861206962,130.)); +#8331 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8332 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#8333 = ORIENTED_EDGE('',*,*,#7346,.F.); +#8334 = ORIENTED_EDGE('',*,*,#8335,.F.); +#8335 = EDGE_CURVE('',#8295,#7339,#8336,.T.); +#8336 = ELLIPSE('',#8337,17.71813970129,17.5); +#8337 = AXIS2_PLACEMENT_3D('',#8338,#8339,#8340); +#8338 = CARTESIAN_POINT('',(20.,132.87009364017,64.201354948769)); +#8339 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8340 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#8341 = PLANE('',#8342); +#8342 = AXIS2_PLACEMENT_3D('',#8343,#8344,#8345); +#8343 = CARTESIAN_POINT('',(75.,143.30281489055,-1.668254647991)); +#8344 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8345 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#8346 = ADVANCED_FACE('',(#8347),#8353,.T.); +#8347 = FACE_BOUND('',#8348,.T.); +#8348 = EDGE_LOOP('',(#8349,#8350,#8351,#8352)); +#8349 = ORIENTED_EDGE('',*,*,#8017,.T.); +#8350 = ORIENTED_EDGE('',*,*,#8281,.F.); +#8351 = ORIENTED_EDGE('',*,*,#8147,.F.); +#8352 = ORIENTED_EDGE('',*,*,#6618,.F.); +#8353 = CYLINDRICAL_SURFACE('',#8354,1.); +#8354 = AXIS2_PLACEMENT_3D('',#8355,#8356,#8357); +#8355 = CARTESIAN_POINT('',(149.,140.38587817757,10.356105720284)); +#8356 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#8357 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#8358 = ADVANCED_FACE('',(#8359),#8378,.F.); +#8359 = FACE_BOUND('',#8360,.F.); +#8360 = EDGE_LOOP('',(#8361,#8362,#8363,#8372)); +#8361 = ORIENTED_EDGE('',*,*,#8302,.T.); +#8362 = ORIENTED_EDGE('',*,*,#7090,.F.); +#8363 = ORIENTED_EDGE('',*,*,#8364,.T.); +#8364 = EDGE_CURVE('',#7067,#8365,#8367,.T.); +#8365 = VERTEX_POINT('',#8366); +#8366 = CARTESIAN_POINT('',(130.,12.317627457812,6.630895332498)); +#8367 = ELLIPSE('',#8368,17.799080900429,17.5); +#8368 = AXIS2_PLACEMENT_3D('',#8369,#8370,#8371); +#8369 = CARTESIAN_POINT('',(130.,10.,24.278441447094)); +#8370 = DIRECTION('',(0.,0.991486370185,0.130210513159)); +#8371 = DIRECTION('',(0.,-0.130210513159,0.991486370185)); +#8372 = ORIENTED_EDGE('',*,*,#8373,.F.); +#8373 = EDGE_CURVE('',#8293,#8365,#8374,.T.); +#8374 = LINE('',#8375,#8376); +#8375 = CARTESIAN_POINT('',(130.,70.556696236199,25.553915868859)); +#8376 = VECTOR('',#8377,1.); +#8377 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8378 = CYLINDRICAL_SURFACE('',#8379,17.5); +#8379 = AXIS2_PLACEMENT_3D('',#8380,#8381,#8382); +#8380 = CARTESIAN_POINT('',(130.,65.148898834638,42.197404904024)); +#8381 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8382 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#8383 = ADVANCED_FACE('',(#8384),#8403,.F.); +#8384 = FACE_BOUND('',#8385,.F.); +#8385 = EDGE_LOOP('',(#8386,#8387,#8395,#8402)); +#8386 = ORIENTED_EDGE('',*,*,#8310,.F.); +#8387 = ORIENTED_EDGE('',*,*,#8388,.F.); +#8388 = EDGE_CURVE('',#8389,#8311,#8391,.T.); +#8389 = VERTEX_POINT('',#8390); +#8390 = CARTESIAN_POINT('',(130.,10.,147.5)); +#8391 = LINE('',#8392,#8393); +#8392 = CARTESIAN_POINT('',(130.,75.,147.5)); +#8393 = VECTOR('',#8394,1.); +#8394 = DIRECTION('',(0.,1.,0.)); +#8395 = ORIENTED_EDGE('',*,*,#8396,.T.); +#8396 = EDGE_CURVE('',#8389,#7065,#8397,.T.); +#8397 = CIRCLE('',#8398,17.5); +#8398 = AXIS2_PLACEMENT_3D('',#8399,#8400,#8401); +#8399 = CARTESIAN_POINT('',(130.,10.,130.)); +#8400 = DIRECTION('',(0.,1.,0.)); +#8401 = DIRECTION('',(0.,0.,-1.)); +#8402 = ORIENTED_EDGE('',*,*,#7074,.F.); +#8403 = CYLINDRICAL_SURFACE('',#8404,17.5); +#8404 = AXIS2_PLACEMENT_3D('',#8405,#8406,#8407); +#8405 = CARTESIAN_POINT('',(130.,75.,130.)); +#8406 = DIRECTION('',(0.,-1.,0.)); +#8407 = DIRECTION('',(0.,0.,-1.)); +#8408 = ADVANCED_FACE('',(#8409),#8428,.T.); +#8409 = FACE_BOUND('',#8410,.T.); +#8410 = EDGE_LOOP('',(#8411,#8419,#8426,#8427)); +#8411 = ORIENTED_EDGE('',*,*,#8412,.F.); +#8412 = EDGE_CURVE('',#8413,#7986,#8415,.T.); +#8413 = VERTEX_POINT('',#8414); +#8414 = CARTESIAN_POINT('',(130.,10.,150.)); +#8415 = LINE('',#8416,#8417); +#8416 = CARTESIAN_POINT('',(130.,75.,150.)); +#8417 = VECTOR('',#8418,1.); +#8418 = DIRECTION('',(0.,1.,0.)); +#8419 = ORIENTED_EDGE('',*,*,#8420,.T.); +#8420 = EDGE_CURVE('',#8413,#6595,#8421,.T.); +#8421 = CIRCLE('',#8422,20.); +#8422 = AXIS2_PLACEMENT_3D('',#8423,#8424,#8425); +#8423 = CARTESIAN_POINT('',(130.,10.,130.)); +#8424 = DIRECTION('',(0.,1.,0.)); +#8425 = DIRECTION('',(0.,0.,-1.)); +#8426 = ORIENTED_EDGE('',*,*,#6592,.F.); +#8427 = ORIENTED_EDGE('',*,*,#8164,.T.); +#8428 = CYLINDRICAL_SURFACE('',#8429,20.); +#8429 = AXIS2_PLACEMENT_3D('',#8430,#8431,#8432); +#8430 = CARTESIAN_POINT('',(130.,75.,130.)); +#8431 = DIRECTION('',(0.,-1.,0.)); +#8432 = DIRECTION('',(0.,0.,-1.)); +#8433 = ADVANCED_FACE('',(#8434),#8453,.T.); +#8434 = FACE_BOUND('',#8435,.T.); +#8435 = EDGE_LOOP('',(#8436,#8437,#8446,#8452)); +#8436 = ORIENTED_EDGE('',*,*,#6610,.F.); +#8437 = ORIENTED_EDGE('',*,*,#8438,.T.); +#8438 = EDGE_CURVE('',#6603,#8439,#8441,.T.); +#8439 = VERTEX_POINT('',#8440); +#8440 = CARTESIAN_POINT('',(130.,13.090169943749,4.25325404176)); +#8441 = ELLIPSE('',#8442,20.26221312937,20.); +#8442 = AXIS2_PLACEMENT_3D('',#8443,#8444,#8445); +#8443 = CARTESIAN_POINT('',(130.,10.,24.278441447094)); +#8444 = DIRECTION('',(0.,0.988302081193,0.152509004027)); +#8445 = DIRECTION('',(0.,-0.152509004027,0.988302081193)); +#8446 = ORIENTED_EDGE('',*,*,#8447,.F.); +#8447 = EDGE_CURVE('',#7956,#8439,#8448,.T.); +#8448 = LINE('',#8449,#8450); +#8449 = CARTESIAN_POINT('',(130.,71.329238722136,23.176274578121)); +#8450 = VECTOR('',#8451,1.); +#8451 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8452 = ORIENTED_EDGE('',*,*,#8026,.T.); +#8453 = CYLINDRICAL_SURFACE('',#8454,20.); +#8454 = AXIS2_PLACEMENT_3D('',#8455,#8456,#8457); +#8455 = CARTESIAN_POINT('',(130.,65.148898834638,42.197404904024)); +#8456 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8457 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#8458 = ADVANCED_FACE('',(#8459),#8477,.F.); +#8459 = FACE_BOUND('',#8460,.T.); +#8460 = EDGE_LOOP('',(#8461,#8469,#8475,#8476)); +#8461 = ORIENTED_EDGE('',*,*,#8462,.F.); +#8462 = EDGE_CURVE('',#8463,#8295,#8465,.T.); +#8463 = VERTEX_POINT('',#8464); +#8464 = CARTESIAN_POINT('',(20.,12.317627457812,6.630895332498)); +#8465 = LINE('',#8466,#8467); +#8466 = CARTESIAN_POINT('',(20.,70.556696236199,25.553915868859)); +#8467 = VECTOR('',#8468,1.); +#8468 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8469 = ORIENTED_EDGE('',*,*,#8470,.F.); +#8470 = EDGE_CURVE('',#8365,#8463,#8471,.T.); +#8471 = LINE('',#8472,#8473); +#8472 = CARTESIAN_POINT('',(75.,12.317627457812,6.630895332498)); +#8473 = VECTOR('',#8474,1.); +#8474 = DIRECTION('',(-1.,0.,0.)); +#8475 = ORIENTED_EDGE('',*,*,#8373,.F.); +#8476 = ORIENTED_EDGE('',*,*,#8292,.T.); +#8477 = PLANE('',#8478); +#8478 = AXIS2_PLACEMENT_3D('',#8479,#8480,#8481); +#8479 = CARTESIAN_POINT('',(75.,70.556696236199,25.553915868859)); +#8480 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#8481 = DIRECTION('',(-1.,0.,0.)); +#8482 = ADVANCED_FACE('',(#8483),#8501,.T.); +#8483 = FACE_BOUND('',#8484,.T.); +#8484 = EDGE_LOOP('',(#8485,#8486,#8494,#8500)); +#8485 = ORIENTED_EDGE('',*,*,#8388,.F.); +#8486 = ORIENTED_EDGE('',*,*,#8487,.F.); +#8487 = EDGE_CURVE('',#8488,#8389,#8490,.T.); +#8488 = VERTEX_POINT('',#8489); +#8489 = CARTESIAN_POINT('',(20.,10.,147.5)); +#8490 = LINE('',#8491,#8492); +#8491 = CARTESIAN_POINT('',(75.,10.,147.5)); +#8492 = VECTOR('',#8493,1.); +#8493 = DIRECTION('',(1.,0.,0.)); +#8494 = ORIENTED_EDGE('',*,*,#8495,.F.); +#8495 = EDGE_CURVE('',#8320,#8488,#8496,.T.); +#8496 = LINE('',#8497,#8498); +#8497 = CARTESIAN_POINT('',(20.,75.,147.5)); +#8498 = VECTOR('',#8499,1.); +#8499 = DIRECTION('',(0.,-1.,0.)); +#8500 = ORIENTED_EDGE('',*,*,#8319,.T.); +#8501 = PLANE('',#8502); +#8502 = AXIS2_PLACEMENT_3D('',#8503,#8504,#8505); +#8503 = CARTESIAN_POINT('',(75.,75.,147.5)); +#8504 = DIRECTION('',(0.,0.,-1.)); +#8505 = DIRECTION('',(-1.,0.,0.)); +#8506 = ADVANCED_FACE('',(#8507),#8519,.F.); +#8507 = FACE_BOUND('',#8508,.F.); +#8508 = EDGE_LOOP('',(#8509,#8510,#8511,#8518)); +#8509 = ORIENTED_EDGE('',*,*,#8327,.F.); +#8510 = ORIENTED_EDGE('',*,*,#7320,.F.); +#8511 = ORIENTED_EDGE('',*,*,#8512,.T.); +#8512 = EDGE_CURVE('',#7321,#8488,#8513,.T.); +#8513 = CIRCLE('',#8514,17.5); +#8514 = AXIS2_PLACEMENT_3D('',#8515,#8516,#8517); +#8515 = CARTESIAN_POINT('',(20.,10.,130.)); +#8516 = DIRECTION('',(0.,1.,0.)); +#8517 = DIRECTION('',(0.,-0.,1.)); +#8518 = ORIENTED_EDGE('',*,*,#8495,.F.); +#8519 = CYLINDRICAL_SURFACE('',#8520,17.5); +#8520 = AXIS2_PLACEMENT_3D('',#8521,#8522,#8523); +#8521 = CARTESIAN_POINT('',(20.,75.,130.)); +#8522 = DIRECTION('',(0.,1.,0.)); +#8523 = DIRECTION('',(0.,-0.,1.)); +#8524 = ADVANCED_FACE('',(#8525),#8537,.F.); +#8525 = FACE_BOUND('',#8526,.F.); +#8526 = EDGE_LOOP('',(#8527,#8528,#8529,#8536)); +#8527 = ORIENTED_EDGE('',*,*,#8335,.F.); +#8528 = ORIENTED_EDGE('',*,*,#8462,.F.); +#8529 = ORIENTED_EDGE('',*,*,#8530,.T.); +#8530 = EDGE_CURVE('',#8463,#7331,#8531,.T.); +#8531 = ELLIPSE('',#8532,17.799080900429,17.5); +#8532 = AXIS2_PLACEMENT_3D('',#8533,#8534,#8535); +#8533 = CARTESIAN_POINT('',(20.,10.,24.278441447094)); +#8534 = DIRECTION('',(0.,0.991486370185,0.130210513159)); +#8535 = DIRECTION('',(0.,0.130210513159,-0.991486370185)); +#8536 = ORIENTED_EDGE('',*,*,#7338,.F.); +#8537 = CYLINDRICAL_SURFACE('',#8538,17.5); +#8538 = AXIS2_PLACEMENT_3D('',#8539,#8540,#8541); +#8539 = CARTESIAN_POINT('',(20.,61.657797401562,41.063077286871)); +#8540 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8541 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#8542 = ADVANCED_FACE('',(#8543),#8561,.F.); +#8543 = FACE_BOUND('',#8544,.T.); +#8544 = EDGE_LOOP('',(#8545,#8553,#8559,#8560)); +#8545 = ORIENTED_EDGE('',*,*,#8546,.T.); +#8546 = EDGE_CURVE('',#7726,#8547,#8549,.T.); +#8547 = VERTEX_POINT('',#8548); +#8548 = CARTESIAN_POINT('',(20.,10.,150.)); +#8549 = LINE('',#8550,#8551); +#8550 = CARTESIAN_POINT('',(20.,75.,150.)); +#8551 = VECTOR('',#8552,1.); +#8552 = DIRECTION('',(0.,-1.,0.)); +#8553 = ORIENTED_EDGE('',*,*,#8554,.T.); +#8554 = EDGE_CURVE('',#8547,#8413,#8555,.T.); +#8555 = LINE('',#8556,#8557); +#8556 = CARTESIAN_POINT('',(75.,10.,150.)); +#8557 = VECTOR('',#8558,1.); +#8558 = DIRECTION('',(1.,0.,0.)); +#8559 = ORIENTED_EDGE('',*,*,#8412,.T.); +#8560 = ORIENTED_EDGE('',*,*,#8003,.T.); +#8561 = PLANE('',#8562); +#8562 = AXIS2_PLACEMENT_3D('',#8563,#8564,#8565); +#8563 = CARTESIAN_POINT('',(75.,75.,150.)); +#8564 = DIRECTION('',(0.,0.,-1.)); +#8565 = DIRECTION('',(-1.,0.,0.)); +#8566 = ADVANCED_FACE('',(#8567,#8592,#8610),#8635,.T.); +#8567 = FACE_BOUND('',#8568,.T.); +#8568 = EDGE_LOOP('',(#8569,#8577,#8585,#8591)); +#8569 = ORIENTED_EDGE('',*,*,#8570,.T.); +#8570 = EDGE_CURVE('',#7874,#8571,#8573,.T.); +#8571 = VERTEX_POINT('',#8572); +#8572 = CARTESIAN_POINT('',(32.,30.209187237062,9.815559940509)); +#8573 = LINE('',#8574,#8575); +#8574 = CARTESIAN_POINT('',(32.,135.22550344531,43.937429502394)); +#8575 = VECTOR('',#8576,1.); +#8576 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8577 = ORIENTED_EDGE('',*,*,#8578,.T.); +#8578 = EDGE_CURVE('',#8571,#8579,#8581,.T.); +#8579 = VERTEX_POINT('',#8580); +#8580 = CARTESIAN_POINT('',(35.,30.209187237062,9.815559940509)); +#8581 = LINE('',#8582,#8583); +#8582 = CARTESIAN_POINT('',(75.,30.209187237062,9.815559940509)); +#8583 = VECTOR('',#8584,1.); +#8584 = DIRECTION('',(1.,0.,0.)); +#8585 = ORIENTED_EDGE('',*,*,#8586,.F.); +#8586 = EDGE_CURVE('',#7884,#8579,#8587,.T.); +#8587 = LINE('',#8588,#8589); +#8588 = CARTESIAN_POINT('',(35.,135.22550344531,43.937429502394)); +#8589 = VECTOR('',#8590,1.); +#8590 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8591 = ORIENTED_EDGE('',*,*,#7883,.T.); +#8592 = FACE_BOUND('',#8593,.T.); +#8593 = EDGE_LOOP('',(#8594,#8595,#8603,#8609)); +#8594 = ORIENTED_EDGE('',*,*,#8447,.T.); +#8595 = ORIENTED_EDGE('',*,*,#8596,.T.); +#8596 = EDGE_CURVE('',#8439,#8597,#8599,.T.); +#8597 = VERTEX_POINT('',#8598); +#8598 = CARTESIAN_POINT('',(20.,13.090169943749,4.25325404176)); +#8599 = LINE('',#8600,#8601); +#8600 = CARTESIAN_POINT('',(75.,13.090169943749,4.25325404176)); +#8601 = VECTOR('',#8602,1.); +#8602 = DIRECTION('',(-1.,0.,0.)); +#8603 = ORIENTED_EDGE('',*,*,#8604,.T.); +#8604 = EDGE_CURVE('',#8597,#7579,#8605,.T.); +#8605 = LINE('',#8606,#8607); +#8606 = CARTESIAN_POINT('',(20.,71.329238722136,23.176274578121)); +#8607 = VECTOR('',#8608,1.); +#8608 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8609 = ORIENTED_EDGE('',*,*,#7964,.T.); +#8610 = FACE_BOUND('',#8611,.T.); +#8611 = EDGE_LOOP('',(#8612,#8622,#8628,#8629)); +#8612 = ORIENTED_EDGE('',*,*,#8613,.T.); +#8613 = EDGE_CURVE('',#8614,#8616,#8618,.T.); +#8614 = VERTEX_POINT('',#8615); +#8615 = CARTESIAN_POINT('',(115.,30.209187237062,9.815559940509)); +#8616 = VERTEX_POINT('',#8617); +#8617 = CARTESIAN_POINT('',(118.,30.209187237062,9.815559940509)); +#8618 = LINE('',#8619,#8620); +#8619 = CARTESIAN_POINT('',(75.,30.209187237062,9.815559940509)); +#8620 = VECTOR('',#8621,1.); +#8621 = DIRECTION('',(1.,0.,0.)); +#8622 = ORIENTED_EDGE('',*,*,#8623,.T.); +#8623 = EDGE_CURVE('',#8616,#7924,#8624,.T.); +#8624 = LINE('',#8625,#8626); +#8625 = CARTESIAN_POINT('',(118.,135.22550344531,43.937429502394)); +#8626 = VECTOR('',#8627,1.); +#8627 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8628 = ORIENTED_EDGE('',*,*,#7923,.T.); +#8629 = ORIENTED_EDGE('',*,*,#8630,.F.); +#8630 = EDGE_CURVE('',#8614,#7914,#8631,.T.); +#8631 = LINE('',#8632,#8633); +#8632 = CARTESIAN_POINT('',(115.,135.22550344531,43.937429502394)); +#8633 = VECTOR('',#8634,1.); +#8634 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8635 = PLANE('',#8636); +#8636 = AXIS2_PLACEMENT_3D('',#8637,#8638,#8639); +#8637 = CARTESIAN_POINT('',(75.,71.329238722136,23.176274578121)); +#8638 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#8639 = DIRECTION('',(-1.,0.,0.)); +#8640 = ADVANCED_FACE('',(#8641),#8653,.T.); +#8641 = FACE_BOUND('',#8642,.T.); +#8642 = EDGE_LOOP('',(#8643,#8644,#8651,#8652)); +#8643 = ORIENTED_EDGE('',*,*,#6238,.F.); +#8644 = ORIENTED_EDGE('',*,*,#8645,.T.); +#8645 = EDGE_CURVE('',#6231,#8547,#8646,.T.); +#8646 = CIRCLE('',#8647,20.); +#8647 = AXIS2_PLACEMENT_3D('',#8648,#8649,#8650); +#8648 = CARTESIAN_POINT('',(20.,10.,130.)); +#8649 = DIRECTION('',(0.,1.,0.)); +#8650 = DIRECTION('',(0.,0.,-1.)); +#8651 = ORIENTED_EDGE('',*,*,#8546,.F.); +#8652 = ORIENTED_EDGE('',*,*,#7725,.T.); +#8653 = CYLINDRICAL_SURFACE('',#8654,20.); +#8654 = AXIS2_PLACEMENT_3D('',#8655,#8656,#8657); +#8655 = CARTESIAN_POINT('',(20.,75.,130.)); +#8656 = DIRECTION('',(0.,1.,0.)); +#8657 = DIRECTION('',(0.,-0.,1.)); +#8658 = ADVANCED_FACE('',(#8659),#8671,.T.); +#8659 = FACE_BOUND('',#8660,.T.); +#8660 = EDGE_LOOP('',(#8661,#8662,#8669,#8670)); +#8661 = ORIENTED_EDGE('',*,*,#8604,.F.); +#8662 = ORIENTED_EDGE('',*,*,#8663,.T.); +#8663 = EDGE_CURVE('',#8597,#6229,#8664,.T.); +#8664 = ELLIPSE('',#8665,20.26221312937,20.); +#8665 = AXIS2_PLACEMENT_3D('',#8666,#8667,#8668); +#8666 = CARTESIAN_POINT('',(20.,10.,24.278441447094)); +#8667 = DIRECTION('',(0.,0.988302081193,0.152509004027)); +#8668 = DIRECTION('',(0.,0.152509004027,-0.988302081193)); +#8669 = ORIENTED_EDGE('',*,*,#6254,.F.); +#8670 = ORIENTED_EDGE('',*,*,#7587,.T.); +#8671 = CYLINDRICAL_SURFACE('',#8672,20.); +#8672 = AXIS2_PLACEMENT_3D('',#8673,#8674,#8675); +#8673 = CARTESIAN_POINT('',(20.,61.657797401562,41.063077286871)); +#8674 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8675 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#8676 = ADVANCED_FACE('',(#8677),#8695,.F.); +#8677 = FACE_BOUND('',#8678,.T.); +#8678 = EDGE_LOOP('',(#8679,#8680,#8688,#8694)); +#8679 = ORIENTED_EDGE('',*,*,#8586,.T.); +#8680 = ORIENTED_EDGE('',*,*,#8681,.T.); +#8681 = EDGE_CURVE('',#8579,#8682,#8684,.T.); +#8682 = VERTEX_POINT('',#8683); +#8683 = CARTESIAN_POINT('',(35.,32.729334258402,8.531480896669)); +#8684 = LINE('',#8685,#8686); +#8685 = CARTESIAN_POINT('',(35.,99.778280122131,-25.63166338267)); +#8686 = VECTOR('',#8687,1.); +#8687 = DIRECTION('',(0.,0.891006524188,-0.45399049974)); +#8688 = ORIENTED_EDGE('',*,*,#8689,.T.); +#8689 = EDGE_CURVE('',#8682,#7892,#8690,.T.); +#8690 = LINE('',#8691,#8692); +#8691 = CARTESIAN_POINT('',(35.,135.84353743406,42.035316469803)); +#8692 = VECTOR('',#8693,1.); +#8693 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8694 = ORIENTED_EDGE('',*,*,#7891,.T.); +#8695 = PLANE('',#8696); +#8696 = AXIS2_PLACEMENT_3D('',#8697,#8698,#8699); +#8697 = CARTESIAN_POINT('',(35.,135.22550344531,43.937429502394)); +#8698 = DIRECTION('',(-1.,0.,0.)); +#8699 = DIRECTION('',(0.,0.,-1.)); +#8700 = ADVANCED_FACE('',(#8701),#8719,.T.); +#8701 = FACE_BOUND('',#8702,.T.); +#8702 = EDGE_LOOP('',(#8703,#8711,#8717,#8718)); +#8703 = ORIENTED_EDGE('',*,*,#8704,.F.); +#8704 = EDGE_CURVE('',#8705,#7876,#8707,.T.); +#8705 = VERTEX_POINT('',#8706); +#8706 = CARTESIAN_POINT('',(32.,32.729334258402,8.531480896669)); +#8707 = LINE('',#8708,#8709); +#8708 = CARTESIAN_POINT('',(32.,135.84353743406,42.035316469803)); +#8709 = VECTOR('',#8710,1.); +#8710 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#8711 = ORIENTED_EDGE('',*,*,#8712,.T.); +#8712 = EDGE_CURVE('',#8705,#8571,#8713,.T.); +#8713 = LINE('',#8714,#8715); +#8714 = CARTESIAN_POINT('',(32.,30.209187237062,9.815559940509)); +#8715 = VECTOR('',#8716,1.); +#8716 = DIRECTION('',(0.,-0.891006524188,0.45399049974)); +#8717 = ORIENTED_EDGE('',*,*,#8570,.F.); +#8718 = ORIENTED_EDGE('',*,*,#7873,.T.); +#8719 = PLANE('',#8720); +#8720 = AXIS2_PLACEMENT_3D('',#8721,#8722,#8723); +#8721 = CARTESIAN_POINT('',(32.,135.22550344531,43.937429502394)); +#8722 = DIRECTION('',(-1.,0.,0.)); +#8723 = DIRECTION('',(0.,0.,-1.)); +#8724 = ADVANCED_FACE('',(#8725),#8743,.T.); +#8725 = FACE_BOUND('',#8726,.T.); +#8726 = EDGE_LOOP('',(#8727,#8728,#8736,#8742)); +#8727 = ORIENTED_EDGE('',*,*,#8623,.F.); +#8728 = ORIENTED_EDGE('',*,*,#8729,.T.); +#8729 = EDGE_CURVE('',#8616,#8730,#8732,.T.); +#8730 = VERTEX_POINT('',#8731); +#8731 = CARTESIAN_POINT('',(118.,32.729334258402,8.531480896669)); +#8732 = LINE('',#8733,#8734); +#8733 = CARTESIAN_POINT('',(118.,30.209187237062,9.815559940509)); +#8734 = VECTOR('',#8735,1.); +#8735 = DIRECTION('',(0.,0.891006524188,-0.45399049974)); +#8736 = ORIENTED_EDGE('',*,*,#8737,.F.); +#8737 = EDGE_CURVE('',#7932,#8730,#8738,.T.); +#8738 = LINE('',#8739,#8740); +#8739 = CARTESIAN_POINT('',(118.,135.84353743406,42.035316469803)); +#8740 = VECTOR('',#8741,1.); +#8741 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8742 = ORIENTED_EDGE('',*,*,#7931,.T.); +#8743 = PLANE('',#8744); +#8744 = AXIS2_PLACEMENT_3D('',#8745,#8746,#8747); +#8745 = CARTESIAN_POINT('',(118.,135.22550344531,43.937429502394)); +#8746 = DIRECTION('',(1.,0.,0.)); +#8747 = DIRECTION('',(0.,0.,-1.)); +#8748 = ADVANCED_FACE('',(#8749),#8767,.F.); +#8749 = FACE_BOUND('',#8750,.T.); +#8750 = EDGE_LOOP('',(#8751,#8759,#8765,#8766)); +#8751 = ORIENTED_EDGE('',*,*,#8752,.T.); +#8752 = EDGE_CURVE('',#7916,#8753,#8755,.T.); +#8753 = VERTEX_POINT('',#8754); +#8754 = CARTESIAN_POINT('',(115.,32.729334258402,8.531480896669)); +#8755 = LINE('',#8756,#8757); +#8756 = CARTESIAN_POINT('',(115.,135.84353743406,42.035316469803)); +#8757 = VECTOR('',#8758,1.); +#8758 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8759 = ORIENTED_EDGE('',*,*,#8760,.T.); +#8760 = EDGE_CURVE('',#8753,#8614,#8761,.T.); +#8761 = LINE('',#8762,#8763); +#8762 = CARTESIAN_POINT('',(115.,99.778280122131,-25.63166338267)); +#8763 = VECTOR('',#8764,1.); +#8764 = DIRECTION('',(0.,-0.891006524188,0.45399049974)); +#8765 = ORIENTED_EDGE('',*,*,#8630,.T.); +#8766 = ORIENTED_EDGE('',*,*,#7913,.T.); +#8767 = PLANE('',#8768); +#8768 = AXIS2_PLACEMENT_3D('',#8769,#8770,#8771); +#8769 = CARTESIAN_POINT('',(115.,135.22550344531,43.937429502394)); +#8770 = DIRECTION('',(1.,0.,0.)); +#8771 = DIRECTION('',(0.,0.,-1.)); +#8772 = ADVANCED_FACE('',(#8773),#8784,.F.); +#8773 = FACE_BOUND('',#8774,.T.); +#8774 = EDGE_LOOP('',(#8775,#8776,#8782,#8783)); +#8775 = ORIENTED_EDGE('',*,*,#8689,.F.); +#8776 = ORIENTED_EDGE('',*,*,#8777,.F.); +#8777 = EDGE_CURVE('',#8705,#8682,#8778,.T.); +#8778 = LINE('',#8779,#8780); +#8779 = CARTESIAN_POINT('',(35.,32.729334258402,8.531480896669)); +#8780 = VECTOR('',#8781,1.); +#8781 = DIRECTION('',(1.,0.,0.)); +#8782 = ORIENTED_EDGE('',*,*,#8704,.T.); +#8783 = ORIENTED_EDGE('',*,*,#7899,.T.); +#8784 = PLANE('',#8785); +#8785 = AXIS2_PLACEMENT_3D('',#8786,#8787,#8788); +#8786 = CARTESIAN_POINT('',(35.,135.84353743406,42.035316469803)); +#8787 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#8788 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8789 = ADVANCED_FACE('',(#8790),#8801,.F.); +#8790 = FACE_BOUND('',#8791,.T.); +#8791 = EDGE_LOOP('',(#8792,#8793,#8799,#8800)); +#8792 = ORIENTED_EDGE('',*,*,#8737,.T.); +#8793 = ORIENTED_EDGE('',*,*,#8794,.F.); +#8794 = EDGE_CURVE('',#8753,#8730,#8795,.T.); +#8795 = LINE('',#8796,#8797); +#8796 = CARTESIAN_POINT('',(115.,32.729334258402,8.531480896669)); +#8797 = VECTOR('',#8798,1.); +#8798 = DIRECTION('',(1.,0.,0.)); +#8799 = ORIENTED_EDGE('',*,*,#8752,.F.); +#8800 = ORIENTED_EDGE('',*,*,#7939,.T.); +#8801 = PLANE('',#8802); +#8802 = AXIS2_PLACEMENT_3D('',#8803,#8804,#8805); +#8803 = CARTESIAN_POINT('',(115.,135.84353743406,42.035316469803)); +#8804 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#8805 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#8806 = ADVANCED_FACE('',(#8807),#8980,.F.); +#8807 = FACE_BOUND('',#8808,.F.); +#8808 = EDGE_LOOP('',(#8809,#8820,#8829,#8838,#8885,#8894)); +#8809 = ORIENTED_EDGE('',*,*,#8810,.T.); +#8810 = EDGE_CURVE('',#8811,#8813,#8815,.T.); +#8811 = VERTEX_POINT('',#8812); +#8812 = CARTESIAN_POINT('',(25.343588520597,9.,97.523400852741)); +#8813 = VERTEX_POINT('',#8814); +#8814 = CARTESIAN_POINT('',(79.230233563335,9.,34.900102432596)); +#8815 = CIRCLE('',#8816,43.45); +#8816 = AXIS2_PLACEMENT_3D('',#8817,#8818,#8819); +#8817 = CARTESIAN_POINT('',(62.5,9.,75.)); +#8818 = DIRECTION('',(0.,-1.,0.)); +#8819 = DIRECTION('',(0.,0.,-1.)); +#8820 = ORIENTED_EDGE('',*,*,#8821,.T.); +#8821 = EDGE_CURVE('',#8813,#8822,#8824,.T.); +#8822 = VERTEX_POINT('',#8823); +#8823 = CARTESIAN_POINT('',(78.075096608444,6.,37.668795014926)); +#8824 = CIRCLE('',#8825,3.); +#8825 = AXIS2_PLACEMENT_3D('',#8826,#8827,#8828); +#8826 = CARTESIAN_POINT('',(78.075096608444,9.,37.668795014926)); +#8827 = DIRECTION('',(-0.922897527443,0.,-0.38504565163)); +#8828 = DIRECTION('',(-0.38504565163,0.,0.922897527443)); +#8829 = ORIENTED_EDGE('',*,*,#8830,.T.); +#8830 = EDGE_CURVE('',#8822,#8831,#8833,.T.); +#8831 = VERTEX_POINT('',#8832); +#8832 = CARTESIAN_POINT('',(94.10079102737,6.,49.749405819972)); +#8833 = CIRCLE('',#8834,40.45); +#8834 = AXIS2_PLACEMENT_3D('',#8835,#8836,#8837); +#8835 = CARTESIAN_POINT('',(62.5,6.,75.)); +#8836 = DIRECTION('',(0.,1.,0.)); +#8837 = DIRECTION('',(0.,-0.,1.)); +#8838 = ORIENTED_EDGE('',*,*,#8839,.T.); +#8839 = EDGE_CURVE('',#8831,#8840,#8842,.T.); +#8840 = VERTEX_POINT('',#8841); +#8841 = CARTESIAN_POINT('',(102.58464838884,9.,58.233263181447)); +#8842 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#8843,#8844,#8845,#8846,#8847, + #8848,#8849,#8850,#8851,#8852,#8853,#8854,#8855,#8856,#8857,#8858, + #8859,#8860,#8861,#8862,#8863,#8864,#8865,#8866,#8867,#8868,#8869, + #8870,#8871,#8872,#8873,#8874,#8875,#8876,#8877,#8878,#8879,#8880, + #8881,#8882,#8883,#8884),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,4),(0.,0.125,0.25,0.375,0.4375,0.5,0.5625,0.625, + 0.6875,0.75,0.78125,0.8125,0.84375,0.875,0.90625,0.921875,0.9375, + 0.953125,0.96875,0.984375,1.),.UNSPECIFIED.); +#8843 = CARTESIAN_POINT('',(94.10079102737,6.,49.749405819972)); +#8844 = CARTESIAN_POINT('',(94.485154006966,6.,50.133768799567)); +#8845 = CARTESIAN_POINT('',(94.869473908972,6.001762049593, + 50.518088701574)); +#8846 = CARTESIAN_POINT('',(95.637914825792,6.013421448511, + 51.286529618393)); +#8847 = CARTESIAN_POINT('',(96.022036131652,6.023306892827, + 51.670650924254)); +#8848 = CARTESIAN_POINT('',(96.789929512107,6.057362768752, + 52.438544304709)); +#8849 = CARTESIAN_POINT('',(97.173702474905,6.081496869213, + 52.822317267506)); +#8850 = CARTESIAN_POINT('',(97.748946965668,6.13467131267,53.39756175827 + )); +#8851 = CARTESIAN_POINT('',(97.940625483774,6.155244912247, + 53.589240276376)); +#8852 = CARTESIAN_POINT('',(98.323809090148,6.203486101216, + 53.972423882749)); +#8853 = CARTESIAN_POINT('',(98.515343030271,6.231158944067, + 54.163957822872)); +#8854 = CARTESIAN_POINT('',(98.89734298432,6.295192312943, + 54.545957776922)); +#8855 = CARTESIAN_POINT('',(99.087901542689,6.331554882301, + 54.736516335291)); +#8856 = CARTESIAN_POINT('',(99.467914084255,6.415154859478, + 55.116528876857)); +#8857 = CARTESIAN_POINT('',(99.657472140634,6.462406149867, + 55.306086933235)); +#8858 = CARTESIAN_POINT('',(100.03473885573,6.570664358396, + 55.683353648338)); +#8859 = CARTESIAN_POINT('',(100.22197195285,6.631506781983, + 55.870586745454)); +#8860 = CARTESIAN_POINT('',(100.59280061168,6.77063119688, + 56.241415404283)); +#8861 = CARTESIAN_POINT('',(100.77640996643,6.848847059732, + 56.425024759034)); +#8862 = CARTESIAN_POINT('',(101.04808584811,6.984092804081, + 56.696700640714)); +#8863 = CARTESIAN_POINT('',(101.13801647361,7.032185570258, + 56.78663126622)); +#8864 = CARTESIAN_POINT('',(101.31634714901,7.135709196738, + 56.964961941614)); +#8865 = CARTESIAN_POINT('',(101.40474296924,7.19115369529, + 57.053357761849)); +#8866 = CARTESIAN_POINT('',(101.57811928172,7.310169554209, + 57.226734074321)); +#8867 = CARTESIAN_POINT('',(101.66327432321,7.373818252683, + 57.311889115819)); +#8868 = CARTESIAN_POINT('',(101.82967566251,7.511672723019, + 57.478290455116)); +#8869 = CARTESIAN_POINT('',(101.9110952292,7.586078008607, + 57.559710021803)); +#8870 = CARTESIAN_POINT('',(102.06626916814,7.746439581701, + 57.714883960748)); +#8871 = CARTESIAN_POINT('',(102.14031567076,7.83253694859, + 57.788930463362)); +#8872 = CARTESIAN_POINT('',(102.2440894526,7.97387551666,57.892704245203 + )); +#8873 = CARTESIAN_POINT('',(102.27745438692,8.023037723316, + 57.926069179531)); +#8874 = CARTESIAN_POINT('',(102.34118395854,8.126376022986, + 57.989798751147)); +#8875 = CARTESIAN_POINT('',(102.37132147087,8.180229754826, + 58.019936263472)); +#8876 = CARTESIAN_POINT('',(102.42680723447,8.291752824939, + 58.075422027079)); +#8877 = CARTESIAN_POINT('',(102.45226722328,8.34958934212, + 58.100882015886)); +#8878 = CARTESIAN_POINT('',(102.49772975745,8.47022279189, + 58.146344550053)); +#8879 = CARTESIAN_POINT('',(102.51779639681,8.533429627453, + 58.166411189421)); +#8880 = CARTESIAN_POINT('',(102.55032679127,8.661956811837, + 58.198941583872)); +#8881 = CARTESIAN_POINT('',(102.56295369675,8.727593197798, + 58.211568489351)); +#8882 = CARTESIAN_POINT('',(102.58013400059,8.861912251062, + 58.228748793194)); +#8883 = CARTESIAN_POINT('',(102.58464838884,8.93096720691, + 58.233263181447)); +#8884 = CARTESIAN_POINT('',(102.58464838884,9.,58.233263181447)); +#8885 = ORIENTED_EDGE('',*,*,#8886,.T.); +#8886 = EDGE_CURVE('',#8840,#8887,#8889,.T.); +#8887 = VERTEX_POINT('',#8888); +#8888 = CARTESIAN_POINT('',(39.976599147259,9.,112.1564114794)); +#8889 = CIRCLE('',#8890,43.45); +#8890 = AXIS2_PLACEMENT_3D('',#8891,#8892,#8893); +#8891 = CARTESIAN_POINT('',(62.5,9.,75.)); +#8892 = DIRECTION('',(0.,-1.,0.)); +#8893 = DIRECTION('',(0.,0.,1.)); +#8894 = ORIENTED_EDGE('',*,*,#8895,.T.); +#8895 = EDGE_CURVE('',#8887,#8811,#8896,.T.); +#8896 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#8897,#8898,#8899,#8900,#8901, + #8902,#8903,#8904,#8905,#8906,#8907,#8908,#8909,#8910,#8911,#8912, + #8913,#8914,#8915,#8916,#8917,#8918,#8919,#8920,#8921,#8922,#8923, + #8924,#8925,#8926,#8927,#8928,#8929,#8930,#8931,#8932,#8933,#8934, + #8935,#8936,#8937,#8938,#8939,#8940,#8941,#8942,#8943,#8944,#8945, + #8946,#8947,#8948,#8949,#8950,#8951,#8952,#8953,#8954,#8955,#8956, + #8957,#8958,#8959,#8960,#8961,#8962,#8963,#8964,#8965,#8966,#8967, + #8968,#8969,#8970,#8971,#8972,#8973,#8974,#8975,#8976,#8977,#8978, + #8979),.UNSPECIFIED.,.F.,.F.,(4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4),(0.,7.8125E-03, + 1.171875E-02,1.5625E-02,2.34375E-02,2.734375E-02,3.125E-02, + 4.6875E-02,5.46875E-02,6.25E-02,7.8125E-02,9.375E-02,0.109375,0.125, + 0.15625,0.1875,0.25,0.3125,0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75 + ,0.78125,0.8125,0.84375,0.875,0.890625,0.90625,0.921875,0.9375, + 0.9453125,0.953125,0.9609375,0.96875,0.9765625,0.984375,0.98828125, + 0.9921875,1.),.UNSPECIFIED.); +#8897 = CARTESIAN_POINT('',(39.976599147259,9.,112.1564114794)); +#8898 = CARTESIAN_POINT('',(39.976599147259,8.940515065359, + 112.1564114794)); +#8899 = CARTESIAN_POINT('',(39.971367837355,8.882524333765, + 112.1511801695)); +#8900 = CARTESIAN_POINT('',(39.956657952725,8.797498471155, + 112.13647028486)); +#8901 = CARTESIAN_POINT('',(39.950606770428,8.769484384525, + 112.13041910257)); +#8902 = CARTESIAN_POINT('',(39.936332029532,8.714076700462, + 112.11614436167)); +#8903 = CARTESIAN_POINT('',(39.928092152611,8.686682190967, + 112.10790448475)); +#8904 = CARTESIAN_POINT('',(39.900952037128,8.607110451185, + 112.08076436927)); +#8905 = CARTESIAN_POINT('',(39.879500227805,8.556865181916, + 112.05931255995)); +#8906 = CARTESIAN_POINT('',(39.843403854381,8.484767368144, + 112.02321618652)); +#8907 = CARTESIAN_POINT('',(39.830668529583,8.461211703795, + 112.01048086172)); +#8908 = CARTESIAN_POINT('',(39.804288102009,8.415551277684, + 111.98410043415)); +#8909 = CARTESIAN_POINT('',(39.790640404605,8.393426776748, + 111.97045273674)); +#8910 = CARTESIAN_POINT('',(39.720430482901,8.285845398116, + 111.90024281504)); +#8911 = CARTESIAN_POINT('',(39.658114854414,8.209263695198, + 111.83792718655)); +#8912 = CARTESIAN_POINT('',(39.558863122116,8.103304703669, + 111.73867545426)); +#8913 = CARTESIAN_POINT('',(39.524696519564,8.069446013896, + 111.7045088517)); +#8914 = CARTESIAN_POINT('',(39.455530912922,8.005037374157, + 111.63534324506)); +#8915 = CARTESIAN_POINT('',(39.420446323529,7.974387965498, + 111.60025865567)); +#8916 = CARTESIAN_POINT('',(39.313961354688,7.886254926546, + 111.49377368683)); +#8917 = CARTESIAN_POINT('',(39.241343523893,7.832543877544, + 111.42115585603)); +#8918 = CARTESIAN_POINT('',(39.093760116871,7.732396863278, + 111.27357244901)); +#8919 = CARTESIAN_POINT('',(39.018785304902,7.685989517299, + 111.19859763704)); +#8920 = CARTESIAN_POINT('',(38.867007067885,7.598841246019, + 111.04681940003)); +#8921 = CARTESIAN_POINT('',(38.790199844334,7.558112091344, + 110.97001217647)); +#8922 = CARTESIAN_POINT('',(38.635100714861,7.481254446281,110.814913047 + )); +#8923 = CARTESIAN_POINT('',(38.556680280829,7.445077942368, + 110.73649261297)); +#8924 = CARTESIAN_POINT('',(38.320520942903,7.342732265799, + 110.50033327504)); +#8925 = CARTESIAN_POINT('',(38.162249062525,7.282775492155, + 110.34206139467)); +#8926 = CARTESIAN_POINT('',(37.844532349614,7.174521651705, + 110.02434468175)); +#8927 = CARTESIAN_POINT('',(37.685082158008,7.126277856666, + 109.86489449015)); +#8928 = CARTESIAN_POINT('',(37.205385343906,6.994928735541, + 109.38519767605)); +#8929 = CARTESIAN_POINT('',(36.883813390585,6.924997833353, + 109.06362572273)); +#8930 = CARTESIAN_POINT('',(36.238366670395,6.80802709983, + 108.41817900254)); +#8931 = CARTESIAN_POINT('',(35.9144747191,6.761158089937,108.09428705124 + )); +#8932 = CARTESIAN_POINT('',(35.265002959714,6.68419817602, + 107.44481529185)); +#8933 = CARTESIAN_POINT('',(34.939417594436,6.654162513109, + 107.11922992658)); +#8934 = CARTESIAN_POINT('',(34.286913113169,6.607349308869, + 106.46672544531)); +#8935 = CARTESIAN_POINT('',(33.960481547401,6.590631357841, + 106.14029387954)); +#8936 = CARTESIAN_POINT('',(33.308315481274,6.568590049511, + 105.48812781341)); +#8937 = CARTESIAN_POINT('',(32.65649966058,6.557936512687, + 104.83631199272)); +#8938 = CARTESIAN_POINT('',(32.005343862785,6.568742756007, + 104.18515619492)); +#8939 = CARTESIAN_POINT('',(31.354536418038,6.590875242451, + 103.53434875018)); +#8940 = CARTESIAN_POINT('',(31.029306619651,6.607596396301, + 103.20911895179)); +#8941 = CARTESIAN_POINT('',(30.37925517095,6.654309104065, + 102.55906750309)); +#8942 = CARTESIAN_POINT('',(30.05443279476,6.684277057059,102.2342451269 + )); +#8943 = CARTESIAN_POINT('',(29.405310991119,6.761215956369, + 101.58512332326)); +#8944 = CARTESIAN_POINT('',(29.081009625484,6.808123885204, + 101.26082195762)); +#8945 = CARTESIAN_POINT('',(28.59510416771,6.896257458485, + 100.77491649985)); +#8946 = CARTESIAN_POINT('',(28.43322762054,6.928624584442, + 100.61303995268)); +#8947 = CARTESIAN_POINT('',(28.10970077871,7.000715140365, + 100.28951311085)); +#8948 = CARTESIAN_POINT('',(27.94792059751,7.040470558965, + 100.12773292965)); +#8949 = CARTESIAN_POINT('',(27.62597871453,7.128938008595, + 99.805791046674)); +#8950 = CARTESIAN_POINT('',(27.465696215305,7.177651602217, + 99.645508547449)); +#8951 = CARTESIAN_POINT('',(27.146933462368,7.286806459106, + 99.326745794513)); +#8952 = CARTESIAN_POINT('',(26.988327440487,7.347266374963, + 99.168139772632)); +#8953 = CARTESIAN_POINT('',(26.753301896493,7.449710675263, + 98.933114228638)); +#8954 = CARTESIAN_POINT('',(26.675414116367,7.485842032487, + 98.855226448511)); +#8955 = CARTESIAN_POINT('',(26.520742383293,7.562925993397, + 98.700554715438)); +#8956 = CARTESIAN_POINT('',(26.443847647803,7.603936923433, + 98.623659979947)); +#8957 = CARTESIAN_POINT('',(26.292050105513,7.691656980458, + 98.471862437657)); +#8958 = CARTESIAN_POINT('',(26.217177935199,7.73832705245, + 98.396990267344)); +#8959 = CARTESIAN_POINT('',(26.070071660001,7.838888190542, + 98.249883992146)); +#8960 = CARTESIAN_POINT('',(25.997828021017,7.892753159611, + 98.177640353162)); +#8961 = CARTESIAN_POINT('',(25.892158566003,7.980930197093, + 98.071970898147)); +#8962 = CARTESIAN_POINT('',(25.85738837858,8.011562410642, + 98.037200710725)); +#8963 = CARTESIAN_POINT('',(25.788947795077,8.075837220543, + 97.968760127222)); +#8964 = CARTESIAN_POINT('',(25.755200807674,8.109565135287, + 97.935013139819)); +#8965 = CARTESIAN_POINT('',(25.689719476782,8.180079309815, + 97.869531808926)); +#8966 = CARTESIAN_POINT('',(25.657931778259,8.216900530878, + 97.837744110403)); +#8967 = CARTESIAN_POINT('',(25.596724403442,8.294429680418, + 97.776536735587)); +#8968 = CARTESIAN_POINT('',(25.567233448561,8.335232735248, + 97.747045780706)); +#8969 = CARTESIAN_POINT('',(25.511608050289,8.421435104806, + 97.691420382434)); +#8970 = CARTESIAN_POINT('',(25.485760119525,8.466374234192, + 97.665572451669)); +#8971 = CARTESIAN_POINT('',(25.438959035242,8.560831317408, + 97.618771367386)); +#8972 = CARTESIAN_POINT('',(25.4179933866,8.610337582661,97.597805718745 + )); +#8973 = CARTESIAN_POINT('',(25.391349965324,8.689091871117, + 97.571162297469)); +#8974 = CARTESIAN_POINT('',(25.383231787666,8.71628852069,97.56304411981 + )); +#8975 = CARTESIAN_POINT('',(25.369172525984,8.771295069918, + 97.548984858129)); +#8976 = CARTESIAN_POINT('',(25.363214252868,8.799101675863, + 97.543026585013)); +#8977 = CARTESIAN_POINT('',(25.348733179846,8.883482358183, + 97.528545511991)); +#8978 = CARTESIAN_POINT('',(25.343588520597,8.941012880643, + 97.523400852741)); +#8979 = CARTESIAN_POINT('',(25.343588520597,9.,97.523400852741)); +#8980 = TOROIDAL_SURFACE('',#8981,40.45,3.); +#8981 = AXIS2_PLACEMENT_3D('',#8982,#8983,#8984); +#8982 = CARTESIAN_POINT('',(62.5,9.,75.)); +#8983 = DIRECTION('',(0.,1.,0.)); +#8984 = DIRECTION('',(0.,-0.,1.)); +#8985 = ADVANCED_FACE('',(#8986),#9028,.F.); +#8986 = FACE_BOUND('',#8987,.T.); +#8987 = EDGE_LOOP('',(#8988,#8996,#8997,#9005,#9013,#9022)); +#8988 = ORIENTED_EDGE('',*,*,#8989,.T.); +#8989 = EDGE_CURVE('',#8990,#8887,#8992,.T.); +#8990 = VERTEX_POINT('',#8991); +#8991 = CARTESIAN_POINT('',(39.976599147259,13.25,112.1564114794)); +#8992 = LINE('',#8993,#8994); +#8993 = CARTESIAN_POINT('',(39.976599147259,17.,112.1564114794)); +#8994 = VECTOR('',#8995,1.); +#8995 = DIRECTION('',(0.,-1.,0.)); +#8996 = ORIENTED_EDGE('',*,*,#8895,.T.); +#8997 = ORIENTED_EDGE('',*,*,#8998,.T.); +#8998 = EDGE_CURVE('',#8811,#8999,#9001,.T.); +#8999 = VERTEX_POINT('',#9000); +#9000 = CARTESIAN_POINT('',(25.343588520597,13.25,97.523400852741)); +#9001 = LINE('',#9002,#9003); +#9002 = CARTESIAN_POINT('',(25.343588520597,17.,97.523400852741)); +#9003 = VECTOR('',#9004,1.); +#9004 = DIRECTION('',(0.,1.,0.)); +#9005 = ORIENTED_EDGE('',*,*,#9006,.F.); +#9006 = EDGE_CURVE('',#9007,#8999,#9009,.T.); +#9007 = VERTEX_POINT('',#9008); +#9008 = CARTESIAN_POINT('',(28.953849103746,13.25,101.13366143589)); +#9009 = LINE('',#9010,#9011); +#9010 = CARTESIAN_POINT('',(32.660093833928,13.25,104.83990616607)); +#9011 = VECTOR('',#9012,1.); +#9012 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#9013 = ORIENTED_EDGE('',*,*,#9014,.F.); +#9014 = EDGE_CURVE('',#9015,#9007,#9017,.T.); +#9015 = VERTEX_POINT('',#9016); +#9016 = CARTESIAN_POINT('',(36.366338564109,13.25,108.54615089625)); +#9017 = CIRCLE('',#9018,9.15); +#9018 = AXIS2_PLACEMENT_3D('',#9019,#9020,#9021); +#9019 = CARTESIAN_POINT('',(32.660093833928,20.75,104.83990616607)); +#9020 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#9021 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9022 = ORIENTED_EDGE('',*,*,#9023,.F.); +#9023 = EDGE_CURVE('',#8990,#9015,#9024,.T.); +#9024 = LINE('',#9025,#9026); +#9025 = CARTESIAN_POINT('',(32.660093833928,13.25,104.83990616607)); +#9026 = VECTOR('',#9027,1.); +#9027 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#9028 = PLANE('',#9029); +#9029 = AXIS2_PLACEMENT_3D('',#9030,#9031,#9032); +#9030 = CARTESIAN_POINT('',(32.660093833928,6.,104.83990616607)); +#9031 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#9032 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9033 = ADVANCED_FACE('',(#9034),#9053,.F.); +#9034 = FACE_BOUND('',#9035,.F.); +#9035 = EDGE_LOOP('',(#9036,#9045,#9046,#9047)); +#9036 = ORIENTED_EDGE('',*,*,#9037,.T.); +#9037 = EDGE_CURVE('',#9038,#8990,#9040,.T.); +#9038 = VERTEX_POINT('',#9039); +#9039 = CARTESIAN_POINT('',(102.58464838884,13.25,58.233263181447)); +#9040 = CIRCLE('',#9041,43.45); +#9041 = AXIS2_PLACEMENT_3D('',#9042,#9043,#9044); +#9042 = CARTESIAN_POINT('',(62.5,13.25,75.)); +#9043 = DIRECTION('',(0.,-1.,0.)); +#9044 = DIRECTION('',(0.,0.,1.)); +#9045 = ORIENTED_EDGE('',*,*,#8989,.T.); +#9046 = ORIENTED_EDGE('',*,*,#8886,.F.); +#9047 = ORIENTED_EDGE('',*,*,#9048,.T.); +#9048 = EDGE_CURVE('',#8840,#9038,#9049,.T.); +#9049 = LINE('',#9050,#9051); +#9050 = CARTESIAN_POINT('',(102.58464838884,17.,58.233263181447)); +#9051 = VECTOR('',#9052,1.); +#9052 = DIRECTION('',(0.,1.,0.)); +#9053 = CYLINDRICAL_SURFACE('',#9054,43.45); +#9054 = AXIS2_PLACEMENT_3D('',#9055,#9056,#9057); +#9055 = CARTESIAN_POINT('',(62.5,17.,75.)); +#9056 = DIRECTION('',(0.,-1.,0.)); +#9057 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9058 = ADVANCED_FACE('',(#9059),#9085,.F.); +#9059 = FACE_BOUND('',#9060,.T.); +#9060 = EDGE_LOOP('',(#9061,#9069,#9070,#9071,#9079)); +#9061 = ORIENTED_EDGE('',*,*,#9062,.F.); +#9062 = EDGE_CURVE('',#8831,#9063,#9065,.T.); +#9063 = VERTEX_POINT('',#9064); +#9064 = CARTESIAN_POINT('',(79.236490555174,6.,34.885105347775)); +#9065 = LINE('',#9066,#9067); +#9066 = CARTESIAN_POINT('',(90.925692603699,6.,46.574307396301)); +#9067 = VECTOR('',#9068,1.); +#9068 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#9069 = ORIENTED_EDGE('',*,*,#8839,.T.); +#9070 = ORIENTED_EDGE('',*,*,#9048,.T.); +#9071 = ORIENTED_EDGE('',*,*,#9072,.F.); +#9072 = EDGE_CURVE('',#9073,#9038,#9075,.T.); +#9073 = VERTEX_POINT('',#9074); +#9074 = CARTESIAN_POINT('',(79.236490555174,13.25,34.885105347775)); +#9075 = LINE('',#9076,#9077); +#9076 = CARTESIAN_POINT('',(90.925692603699,13.25,46.574307396301)); +#9077 = VECTOR('',#9078,1.); +#9078 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9079 = ORIENTED_EDGE('',*,*,#9080,.F.); +#9080 = EDGE_CURVE('',#9063,#9073,#9081,.T.); +#9081 = LINE('',#9082,#9083); +#9082 = CARTESIAN_POINT('',(79.236490555174,11.125,34.885105347775)); +#9083 = VECTOR('',#9084,1.); +#9084 = DIRECTION('',(0.,1.,0.)); +#9085 = PLANE('',#9086); +#9086 = AXIS2_PLACEMENT_3D('',#9087,#9088,#9089); +#9087 = CARTESIAN_POINT('',(90.925692603699,11.125,46.574307396301)); +#9088 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#9089 = DIRECTION('',(-0.707106781187,0.,-0.707106781187)); +#9090 = ADVANCED_FACE('',(#9091),#9115,.F.); +#9091 = FACE_BOUND('',#9092,.T.); +#9092 = EDGE_LOOP('',(#9093,#9101,#9107,#9108,#9114)); +#9093 = ORIENTED_EDGE('',*,*,#9094,.F.); +#9094 = EDGE_CURVE('',#9095,#9073,#9097,.T.); +#9095 = VERTEX_POINT('',#9096); +#9096 = CARTESIAN_POINT('',(79.230233563335,13.25,34.900102432596)); +#9097 = LINE('',#9098,#9099); +#9098 = CARTESIAN_POINT('',(79.153224433009,13.25,35.084681938085)); +#9099 = VECTOR('',#9100,1.); +#9100 = DIRECTION('',(0.38504565163,0.,-0.922897527443)); +#9101 = ORIENTED_EDGE('',*,*,#9102,.T.); +#9102 = EDGE_CURVE('',#9095,#8813,#9103,.T.); +#9103 = LINE('',#9104,#9105); +#9104 = CARTESIAN_POINT('',(79.230233563335,17.,34.900102432596)); +#9105 = VECTOR('',#9106,1.); +#9106 = DIRECTION('',(0.,-1.,0.)); +#9107 = ORIENTED_EDGE('',*,*,#8821,.T.); +#9108 = ORIENTED_EDGE('',*,*,#9109,.F.); +#9109 = EDGE_CURVE('',#9063,#8822,#9110,.T.); +#9110 = LINE('',#9111,#9112); +#9111 = CARTESIAN_POINT('',(79.153224433009,6.,35.084681938085)); +#9112 = VECTOR('',#9113,1.); +#9113 = DIRECTION('',(-0.38504565163,0.,0.922897527443)); +#9114 = ORIENTED_EDGE('',*,*,#9080,.T.); +#9115 = PLANE('',#9116); +#9116 = AXIS2_PLACEMENT_3D('',#9117,#9118,#9119); +#9117 = CARTESIAN_POINT('',(79.153224433009,11.125,35.084681938085)); +#9118 = DIRECTION('',(-0.922897527443,0.,-0.38504565163)); +#9119 = DIRECTION('',(0.,-1.,-0.)); +#9120 = ADVANCED_FACE('',(#9121),#9133,.F.); +#9121 = FACE_BOUND('',#9122,.F.); +#9122 = EDGE_LOOP('',(#9123,#9130,#9131,#9132)); +#9123 = ORIENTED_EDGE('',*,*,#9124,.T.); +#9124 = EDGE_CURVE('',#8999,#9095,#9125,.T.); +#9125 = CIRCLE('',#9126,43.45); +#9126 = AXIS2_PLACEMENT_3D('',#9127,#9128,#9129); +#9127 = CARTESIAN_POINT('',(62.5,13.25,75.)); +#9128 = DIRECTION('',(0.,-1.,0.)); +#9129 = DIRECTION('',(0.,0.,1.)); +#9130 = ORIENTED_EDGE('',*,*,#9102,.T.); +#9131 = ORIENTED_EDGE('',*,*,#8810,.F.); +#9132 = ORIENTED_EDGE('',*,*,#8998,.T.); +#9133 = CYLINDRICAL_SURFACE('',#9134,43.45); +#9134 = AXIS2_PLACEMENT_3D('',#9135,#9136,#9137); +#9135 = CARTESIAN_POINT('',(62.5,17.,75.)); +#9136 = DIRECTION('',(0.,-1.,0.)); +#9137 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9138 = ADVANCED_FACE('',(#9139,#9150),#9155,.T.); +#9139 = FACE_BOUND('',#9140,.T.); +#9140 = EDGE_LOOP('',(#9141)); +#9141 = ORIENTED_EDGE('',*,*,#9142,.T.); +#9142 = EDGE_CURVE('',#9143,#9143,#9145,.T.); +#9143 = VERTEX_POINT('',#9144); +#9144 = CARTESIAN_POINT('',(62.5,6.,111.3541053161)); +#9145 = CIRCLE('',#9146,36.354105316101); +#9146 = AXIS2_PLACEMENT_3D('',#9147,#9148,#9149); +#9147 = CARTESIAN_POINT('',(62.5,6.,75.)); +#9148 = DIRECTION('',(0.,-1.,0.)); +#9149 = DIRECTION('',(0.,0.,1.)); +#9150 = FACE_BOUND('',#9151,.T.); +#9151 = EDGE_LOOP('',(#9152,#9153,#9154)); +#9152 = ORIENTED_EDGE('',*,*,#9109,.T.); +#9153 = ORIENTED_EDGE('',*,*,#8830,.T.); +#9154 = ORIENTED_EDGE('',*,*,#9062,.T.); +#9155 = PLANE('',#9156); +#9156 = AXIS2_PLACEMENT_3D('',#9157,#9158,#9159); +#9157 = CARTESIAN_POINT('',(62.5,6.,75.)); +#9158 = DIRECTION('',(0.,1.,0.)); +#9159 = DIRECTION('',(0.,0.,-1.)); +#9160 = ADVANCED_FACE('',(#9161),#9187,.F.); +#9161 = FACE_BOUND('',#9162,.F.); +#9162 = EDGE_LOOP('',(#9163,#9164,#9172,#9181)); +#9163 = ORIENTED_EDGE('',*,*,#9014,.F.); +#9164 = ORIENTED_EDGE('',*,*,#9165,.F.); +#9165 = EDGE_CURVE('',#9166,#9015,#9168,.T.); +#9166 = VERTEX_POINT('',#9167); +#9167 = CARTESIAN_POINT('',(33.679332795601,13.25,111.23315666476)); +#9168 = LINE('',#9169,#9170); +#9169 = CARTESIAN_POINT('',(36.507759920347,13.25,108.40472954001)); +#9170 = VECTOR('',#9171,1.); +#9171 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#9172 = ORIENTED_EDGE('',*,*,#9173,.T.); +#9173 = EDGE_CURVE('',#9166,#9174,#9176,.T.); +#9174 = VERTEX_POINT('',#9175); +#9175 = CARTESIAN_POINT('',(26.266843335237,13.25,103.82066720439)); +#9176 = CIRCLE('',#9177,9.15); +#9177 = AXIS2_PLACEMENT_3D('',#9178,#9179,#9180); +#9178 = CARTESIAN_POINT('',(29.973088065419,20.75,107.52691193458)); +#9179 = DIRECTION('',(0.707106781187,0.,-0.707106781187)); +#9180 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9181 = ORIENTED_EDGE('',*,*,#9182,.F.); +#9182 = EDGE_CURVE('',#9007,#9174,#9183,.T.); +#9183 = LINE('',#9184,#9185); +#9184 = CARTESIAN_POINT('',(29.095270459983,13.25,100.99224007965)); +#9185 = VECTOR('',#9186,1.); +#9186 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#9187 = CYLINDRICAL_SURFACE('',#9188,9.15); +#9188 = AXIS2_PLACEMENT_3D('',#9189,#9190,#9191); +#9189 = CARTESIAN_POINT('',(32.801515190165,20.75,104.69848480983)); +#9190 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#9191 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9192 = ADVANCED_FACE('',(#9193),#9226,.F.); +#9193 = FACE_BOUND('',#9194,.T.); +#9194 = EDGE_LOOP('',(#9195,#9196,#9197,#9198,#9199,#9200,#9201,#9209, + #9218,#9224,#9225)); +#9195 = ORIENTED_EDGE('',*,*,#9124,.T.); +#9196 = ORIENTED_EDGE('',*,*,#9094,.T.); +#9197 = ORIENTED_EDGE('',*,*,#9072,.T.); +#9198 = ORIENTED_EDGE('',*,*,#9037,.T.); +#9199 = ORIENTED_EDGE('',*,*,#9023,.T.); +#9200 = ORIENTED_EDGE('',*,*,#9165,.F.); +#9201 = ORIENTED_EDGE('',*,*,#9202,.T.); +#9202 = EDGE_CURVE('',#9166,#9203,#9205,.T.); +#9203 = VERTEX_POINT('',#9204); +#9204 = CARTESIAN_POINT('',(37.60730380772,13.25,115.16112767688)); +#9205 = LINE('',#9206,#9207); +#9206 = CARTESIAN_POINT('',(29.973088065419,13.25,107.52691193458)); +#9207 = VECTOR('',#9208,1.); +#9208 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9209 = ORIENTED_EDGE('',*,*,#9210,.T.); +#9210 = EDGE_CURVE('',#9203,#9211,#9213,.T.); +#9211 = VERTEX_POINT('',#9212); +#9212 = CARTESIAN_POINT('',(22.338872323117,13.25,99.89269619228)); +#9213 = CIRCLE('',#9214,47.25); +#9214 = AXIS2_PLACEMENT_3D('',#9215,#9216,#9217); +#9215 = CARTESIAN_POINT('',(62.5,13.25,75.)); +#9216 = DIRECTION('',(0.,1.,0.)); +#9217 = DIRECTION('',(0.,0.,-1.)); +#9218 = ORIENTED_EDGE('',*,*,#9219,.T.); +#9219 = EDGE_CURVE('',#9211,#9174,#9220,.T.); +#9220 = LINE('',#9221,#9222); +#9221 = CARTESIAN_POINT('',(29.973088065419,13.25,107.52691193458)); +#9222 = VECTOR('',#9223,1.); +#9223 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9224 = ORIENTED_EDGE('',*,*,#9182,.F.); +#9225 = ORIENTED_EDGE('',*,*,#9006,.T.); +#9226 = PLANE('',#9227); +#9227 = AXIS2_PLACEMENT_3D('',#9228,#9229,#9230); +#9228 = CARTESIAN_POINT('',(62.5,13.25,75.)); +#9229 = DIRECTION('',(0.,-1.,0.)); +#9230 = DIRECTION('',(0.,0.,1.)); +#9231 = ADVANCED_FACE('',(#9232),#9304,.T.); +#9232 = FACE_BOUND('',#9233,.T.); +#9233 = EDGE_LOOP('',(#9234,#9257)); +#9234 = ORIENTED_EDGE('',*,*,#9235,.T.); +#9235 = EDGE_CURVE('',#9236,#9238,#9240,.T.); +#9236 = VERTEX_POINT('',#9237); +#9237 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9238 = VERTEX_POINT('',#9239); +#9239 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9240 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9241,#9242,#9243,#9244,#9245, + #9246,#9247,#9248,#9249,#9250,#9251,#9252,#9253,#9254,#9255,#9256), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,5.131674424287E-02, + 0.453709074615,0.495650628847,0.582098203711,1.),.UNSPECIFIED.); +#9241 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9242 = CARTESIAN_POINT('',(124.55937011406,1.000000001602, + 76.792843771102)); +#9243 = CARTESIAN_POINT('',(124.69103027031,1.000000001602, + 76.640265646102)); +#9244 = CARTESIAN_POINT('',(124.92051003166,1.000000001602, + 76.499993896667)); +#9245 = CARTESIAN_POINT('',(124.92051540732,1.000000001602, + 76.499990610738)); +#9246 = CARTESIAN_POINT('',(129.25452853154,1.000000001602, + 73.950462555922)); +#9247 = CARTESIAN_POINT('',(129.25453396621,1.000000001602, + 73.950459368095)); +#9248 = CARTESIAN_POINT('',(129.428642575,1.000000001602,73.848332052352 + )); +#9249 = CARTESIAN_POINT('',(129.57322265312,1.000000001602, + 73.792960958602)); +#9250 = CARTESIAN_POINT('',(129.74733398125,1.000000001602, + 73.792960958602)); +#9251 = CARTESIAN_POINT('',(130.08294433281,1.000000001602, + 73.792960958602)); +#9252 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.048283224227)); +#9253 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.528162886412)); +#9254 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.528169187042)); +#9255 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 79.750272261412)); +#9256 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9257 = ORIENTED_EDGE('',*,*,#9258,.T.); +#9258 = EDGE_CURVE('',#9238,#9236,#9259,.T.); +#9259 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9260,#9261,#9262,#9263,#9264, + #9265,#9266,#9267,#9268,#9269,#9270,#9271,#9272,#9273,#9274,#9275, + #9276,#9277,#9278,#9279,#9280,#9281,#9282,#9283,#9284,#9285,#9286, + #9287,#9288,#9289,#9290,#9291,#9292,#9293,#9294,#9295,#9296,#9297, + #9298,#9299,#9300,#9301,#9302,#9303),.UNSPECIFIED.,.F.,.F.,(4,3,3,1, + 3,3,3,3,3,3,3,3,3,3,3,4),(0.,3.990485649378E-02,5.928192378504E-02, + 0.198711365616,0.245187846226,0.269018676263,0.359503693895, + 0.399300397939,0.418688133749,0.604584253323,0.634614369061, + 0.6645593868,0.850455506521,0.86984324233,0.909673871099,1.), + .UNSPECIFIED.); +#9260 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9261 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 80.225851583601)); +#9262 = CARTESIAN_POINT('',(130.08294433281,1.000000001602, + 80.485480489852)); +#9263 = CARTESIAN_POINT('',(129.74733398125,1.000000001602, + 80.485480489852)); +#9264 = CARTESIAN_POINT('',(129.57322265312,1.000000001602, + 80.485480489852)); +#9265 = CARTESIAN_POINT('',(129.428642575,1.000000001602,80.430109396102 + )); +#9266 = CARTESIAN_POINT('',(129.25464459701,1.000000001602, + 80.327793941274)); +#9267 = CARTESIAN_POINT('',(128.17102798103,1.000000001602, + 79.690598450823)); +#9268 = CARTESIAN_POINT('',(126.72635333414,1.000000001602, + 78.840753611442)); +#9269 = CARTESIAN_POINT('',(125.28167868724,1.000000001602, + 77.990908772061)); +#9270 = CARTESIAN_POINT('',(124.92176405558,1.000000001602, + 77.776344030364)); +#9271 = CARTESIAN_POINT('',(124.69103027031,1.000000001602, + 77.638791036727)); +#9272 = CARTESIAN_POINT('',(124.55937011406,1.000000001602, + 77.481291036727)); +#9273 = CARTESIAN_POINT('',(124.50830649436,1.000000001602, + 77.302876088525)); +#9274 = CARTESIAN_POINT('',(124.5083048025,1.000000001602, + 77.302867009676)); +#9275 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 79.750272261412)); +#9276 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 79.750278562042)); +#9277 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 80.225851583601)); +#9278 = CARTESIAN_POINT('',(124.22806640312,1.000000001602, + 80.485480489852)); +#9279 = CARTESIAN_POINT('',(123.89245605156,1.000000001602, + 80.485480489852)); +#9280 = CARTESIAN_POINT('',(123.71803710625,1.000000001602, + 80.485480489852)); +#9281 = CARTESIAN_POINT('',(123.57376464531,1.000000001602, + 80.430109396102)); +#9282 = CARTESIAN_POINT('',(123.39934842183,1.000000001602, + 80.327982076089)); +#9283 = CARTESIAN_POINT('',(123.39934298471,1.000000001602, + 80.327978892451)); +#9284 = CARTESIAN_POINT('',(119.06563747754,1.000000001602, + 77.778450837411)); +#9285 = CARTESIAN_POINT('',(119.06563208836,1.000000001602, + 77.778447574238)); +#9286 = CARTESIAN_POINT('',(118.76386230156,1.000000001602, + 77.595724630477)); +#9287 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 77.383468771102)); +#9288 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 77.137375021102)); +#9289 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 76.890666036727)); +#9290 = CARTESIAN_POINT('',(118.76386230156,1.000000001602, + 76.678410177352)); +#9291 = CARTESIAN_POINT('',(119.06563205418,1.000000001602, + 76.499993817801)); +#9292 = CARTESIAN_POINT('',(119.06563747777,1.000000001602, + 76.499990611189)); +#9293 = CARTESIAN_POINT('',(123.39934298471,1.000000001602, + 73.950462556002)); +#9294 = CARTESIAN_POINT('',(123.39934842183,1.000000001602, + 73.950459372365)); +#9295 = CARTESIAN_POINT('',(123.57376464531,1.000000001602, + 73.848332052352)); +#9296 = CARTESIAN_POINT('',(123.71803710625,1.000000001602, + 73.792960958602)); +#9297 = CARTESIAN_POINT('',(123.89245605156,1.000000001602, + 73.792960958602)); +#9298 = CARTESIAN_POINT('',(124.22806640312,1.000000001602, + 73.792960958602)); +#9299 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.048283224227)); +#9300 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.528162886412)); +#9301 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.528169187042)); +#9302 = CARTESIAN_POINT('',(124.50830569081,1.000000001602, + 76.971258606576)); +#9303 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9304 = PLANE('',#9305); +#9305 = AXIS2_PLACEMENT_3D('',#9306,#9307,#9308); +#9306 = CARTESIAN_POINT('',(129.79757464779,1.000000001602, + 73.79489594873)); +#9307 = DIRECTION('',(0.,-1.,0.)); +#9308 = DIRECTION('',(0.,0.,1.)); +#9309 = ADVANCED_FACE('',(#9310),#9348,.T.); +#9310 = FACE_BOUND('',#9311,.T.); +#9311 = EDGE_LOOP('',(#9312,#9332)); +#9312 = ORIENTED_EDGE('',*,*,#9313,.T.); +#9313 = EDGE_CURVE('',#9314,#9316,#9318,.T.); +#9314 = VERTEX_POINT('',#9315); +#9315 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9316 = VERTEX_POINT('',#9317); +#9317 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9318 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9319,#9320,#9321,#9322,#9323, + #9324,#9325,#9326,#9327,#9328,#9329,#9330,#9331),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9319 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9320 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.42328712722)); +#9321 = CARTESIAN_POINT('',(130.7030006748,1.000000001602, + 110.60160747506)); +#9322 = CARTESIAN_POINT('',(130.32938023918,1.000000001602, + 110.60160747506)); +#9323 = CARTESIAN_POINT('',(130.32937393855,1.000000001602, + 110.60160747506)); +#9324 = CARTESIAN_POINT('',(129.36135549381,1.000000001602, + 110.60160747506)); +#9325 = CARTESIAN_POINT('',(129.36134919318,1.000000001602, + 110.60160747506)); +#9326 = CARTESIAN_POINT('',(128.98348303499,1.000000001602, + 110.60160747506)); +#9327 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.41054995952)); +#9328 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.03268380134)); +#9329 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.03267750071)); +#9330 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24576394192)); +#9331 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9332 = ORIENTED_EDGE('',*,*,#9333,.T.); +#9333 = EDGE_CURVE('',#9316,#9314,#9334,.T.); +#9334 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9335,#9336,#9337,#9338,#9339, + #9340,#9341,#9342,#9343,#9344,#9345,#9346,#9347),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9335 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9336 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 103.87213720567)); +#9337 = CARTESIAN_POINT('',(128.98348303499,1.000000001602, + 103.67683396757)); +#9338 = CARTESIAN_POINT('',(129.36134919318,1.000000001602, + 103.67683396757)); +#9339 = CARTESIAN_POINT('',(129.36135549381,1.000000001602, + 103.67683396757)); +#9340 = CARTESIAN_POINT('',(130.32937393855,1.000000001602, + 103.67683396757)); +#9341 = CARTESIAN_POINT('',(130.32938023918,1.000000001602, + 103.67683396757)); +#9342 = CARTESIAN_POINT('',(130.7030006748,1.000000001602, + 103.67683396757)); +#9343 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 103.87213720567)); +#9344 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 104.24575764129)); +#9345 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 104.24576394192)); +#9346 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03267750071)); +#9347 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9348 = PLANE('',#9349); +#9349 = AXIS2_PLACEMENT_3D('',#9350,#9351,#9352); +#9350 = CARTESIAN_POINT('',(129.36134919318,1.000000001602, + 110.60160747506)); +#9351 = DIRECTION('',(0.,-1.,0.)); +#9352 = DIRECTION('',(0.,0.,-1.)); +#9353 = ADVANCED_FACE('',(#9354),#9392,.T.); +#9354 = FACE_BOUND('',#9355,.T.); +#9355 = EDGE_LOOP('',(#9356,#9376)); +#9356 = ORIENTED_EDGE('',*,*,#9357,.T.); +#9357 = EDGE_CURVE('',#9358,#9360,#9362,.T.); +#9358 = VERTEX_POINT('',#9359); +#9359 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9360 = VERTEX_POINT('',#9361); +#9361 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9362 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9363,#9364,#9365,#9366,#9367, + #9368,#9369,#9370,#9371,#9372,#9373,#9374,#9375),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9363 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9364 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.42328712722)); +#9365 = CARTESIAN_POINT('',(127.30642262085,1.000000001602, + 110.60160747506)); +#9366 = CARTESIAN_POINT('',(126.92855646266,1.000000001602, + 110.60160747506)); +#9367 = CARTESIAN_POINT('',(126.92855016203,1.000000001602, + 110.60160747506)); +#9368 = CARTESIAN_POINT('',(125.96053171729,1.000000001602, + 110.60160747506)); +#9369 = CARTESIAN_POINT('',(125.96052541666,1.000000001602, + 110.60160747506)); +#9370 = CARTESIAN_POINT('',(125.58690498104,1.000000001602, + 110.60160747506)); +#9371 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.41054995952)); +#9372 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.03268380134)); +#9373 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.03267750071)); +#9374 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24576394192)); +#9375 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9376 = ORIENTED_EDGE('',*,*,#9377,.T.); +#9377 = EDGE_CURVE('',#9360,#9358,#9378,.T.); +#9378 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9379,#9380,#9381,#9382,#9383, + #9384,#9385,#9386,#9387,#9388,#9389,#9390,#9391),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9379 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9380 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 103.87213720567)); +#9381 = CARTESIAN_POINT('',(125.58265925847,1.000000001602, + 103.67683396757)); +#9382 = CARTESIAN_POINT('',(125.96052541666,1.000000001602, + 103.67683396757)); +#9383 = CARTESIAN_POINT('',(125.96053171729,1.000000001602, + 103.67683396757)); +#9384 = CARTESIAN_POINT('',(126.92855016203,1.000000001602, + 103.67683396757)); +#9385 = CARTESIAN_POINT('',(126.92855646266,1.000000001602, + 103.67683396757)); +#9386 = CARTESIAN_POINT('',(127.30642262085,1.000000001602, + 103.67683396757)); +#9387 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 103.87213720567)); +#9388 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 104.24575764129)); +#9389 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 104.24576394192)); +#9390 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03267750071)); +#9391 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9392 = PLANE('',#9393); +#9393 = AXIS2_PLACEMENT_3D('',#9394,#9395,#9396); +#9394 = CARTESIAN_POINT('',(125.96052541666,1.000000001602, + 110.60160747506)); +#9395 = DIRECTION('',(0.,-1.,0.)); +#9396 = DIRECTION('',(0.,0.,-1.)); +#9397 = ADVANCED_FACE('',(#9398),#9470,.T.); +#9398 = FACE_BOUND('',#9399,.T.); +#9399 = EDGE_LOOP('',(#9400,#9423)); +#9400 = ORIENTED_EDGE('',*,*,#9401,.T.); +#9401 = EDGE_CURVE('',#9402,#9404,#9406,.T.); +#9402 = VERTEX_POINT('',#9403); +#9403 = CARTESIAN_POINT('',(124.49169518076,1.000000001602,47.3071736395 + )); +#9404 = VERTEX_POINT('',#9405); +#9405 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878) + ); +#9406 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9407,#9408,#9409,#9410,#9411, + #9412,#9413,#9414,#9415,#9416,#9417,#9418,#9419,#9420,#9421,#9422), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,5.131674424287E-02, + 0.453709074615,0.495650628847,0.582098203711,1.),.UNSPECIFIED.); +#9407 = CARTESIAN_POINT('',(124.49169518076,1.000000001602,47.3071736395 + )); +#9408 = CARTESIAN_POINT('',(124.44062988593,1.000000001602, + 47.485597668898)); +#9409 = CARTESIAN_POINT('',(124.30896972968,1.000000001602, + 47.638175793898)); +#9410 = CARTESIAN_POINT('',(124.07948996833,1.000000001602, + 47.778447543333)); +#9411 = CARTESIAN_POINT('',(124.07948459267,1.000000001602, + 47.778450829261)); +#9412 = CARTESIAN_POINT('',(119.74547146846,1.000000001602, + 50.327978884078)); +#9413 = CARTESIAN_POINT('',(119.74546603379,1.000000001602, + 50.327982071905)); +#9414 = CARTESIAN_POINT('',(119.571357425,1.000000001602,50.430109387648 + )); +#9415 = CARTESIAN_POINT('',(119.42677734687,1.000000001602, + 50.485480481398)); +#9416 = CARTESIAN_POINT('',(119.25266601875,1.000000001602, + 50.485480481398)); +#9417 = CARTESIAN_POINT('',(118.91705566718,1.000000001602, + 50.485480481398)); +#9418 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 50.230158215773)); +#9419 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 49.750278553588)); +#9420 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 49.750272252958)); +#9421 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 44.528169178588)); +#9422 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878) + ); +#9423 = ORIENTED_EDGE('',*,*,#9424,.T.); +#9424 = EDGE_CURVE('',#9404,#9402,#9425,.T.); +#9425 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9426,#9427,#9428,#9429,#9430, + #9431,#9432,#9433,#9434,#9435,#9436,#9437,#9438,#9439,#9440,#9441, + #9442,#9443,#9444,#9445,#9446,#9447,#9448,#9449,#9450,#9451,#9452, + #9453,#9454,#9455,#9456,#9457,#9458,#9459,#9460,#9461,#9462,#9463, + #9464,#9465,#9466,#9467,#9468,#9469),.UNSPECIFIED.,.F.,.F.,(4,3,3,1, + 3,3,3,3,3,3,3,3,3,3,3,4),(0.,3.990485649378E-02,5.928192378504E-02, + 0.198711365616,0.245187846226,0.269018676263,0.359503693895, + 0.399300397939,0.418688133749,0.604584253323,0.634614369061, + 0.6645593868,0.850455506521,0.86984324233,0.909673871099,1.), + .UNSPECIFIED.); +#9426 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878) + ); +#9427 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 44.052589856398)); +#9428 = CARTESIAN_POINT('',(118.91705566718,1.000000001602, + 43.792960950148)); +#9429 = CARTESIAN_POINT('',(119.25266601875,1.000000001602, + 43.792960950148)); +#9430 = CARTESIAN_POINT('',(119.42677734687,1.000000001602, + 43.792960950148)); +#9431 = CARTESIAN_POINT('',(119.571357425,1.000000001602,43.848332043898 + )); +#9432 = CARTESIAN_POINT('',(119.74535540298,1.000000001602, + 43.950647498726)); +#9433 = CARTESIAN_POINT('',(120.82897201896,1.000000001602, + 44.587842989177)); +#9434 = CARTESIAN_POINT('',(122.27364666585,1.000000001602, + 45.437687828558)); +#9435 = CARTESIAN_POINT('',(123.71832131275,1.000000001602, + 46.287532667939)); +#9436 = CARTESIAN_POINT('',(124.07823594441,1.000000001602, + 46.502097409636)); +#9437 = CARTESIAN_POINT('',(124.30896972968,1.000000001602, + 46.639650403273)); +#9438 = CARTESIAN_POINT('',(124.44062988593,1.000000001602, + 46.797150403273)); +#9439 = CARTESIAN_POINT('',(124.49169350563,1.000000001602, + 46.975565351475)); +#9440 = CARTESIAN_POINT('',(124.49169519749,1.000000001602, + 46.975574430324)); +#9441 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.528169178588)); +#9442 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.528162877958)); +#9443 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.052589856398)); +#9444 = CARTESIAN_POINT('',(124.77193359687,1.000000001602, + 43.792960950148)); +#9445 = CARTESIAN_POINT('',(125.10754394843,1.000000001602, + 43.792960950148)); +#9446 = CARTESIAN_POINT('',(125.28196289375,1.000000001602, + 43.792960950148)); +#9447 = CARTESIAN_POINT('',(125.42623535468,1.000000001602, + 43.848332043898)); +#9448 = CARTESIAN_POINT('',(125.60065157817,1.000000001602, + 43.950459363911)); +#9449 = CARTESIAN_POINT('',(125.60065701528,1.000000001602, + 43.950462547549)); +#9450 = CARTESIAN_POINT('',(129.93436252245,1.000000001602, + 46.499990602589)); +#9451 = CARTESIAN_POINT('',(129.93436791163,1.000000001602, + 46.499993865762)); +#9452 = CARTESIAN_POINT('',(130.23613769843,1.000000001602, + 46.682716809523)); +#9453 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 46.894972668898)); +#9454 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 47.141066418898)); +#9455 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 47.387775403273)); +#9456 = CARTESIAN_POINT('',(130.23613769843,1.000000001602, + 47.600031262648)); +#9457 = CARTESIAN_POINT('',(129.93436794581,1.000000001602, + 47.778447622199)); +#9458 = CARTESIAN_POINT('',(129.93436252222,1.000000001602, + 47.778450828811)); +#9459 = CARTESIAN_POINT('',(125.60065701528,1.000000001602, + 50.327978883998)); +#9460 = CARTESIAN_POINT('',(125.60065157817,1.000000001602, + 50.327982067635)); +#9461 = CARTESIAN_POINT('',(125.42623535468,1.000000001602, + 50.430109387648)); +#9462 = CARTESIAN_POINT('',(125.28196289375,1.000000001602, + 50.485480481398)); +#9463 = CARTESIAN_POINT('',(125.10754394843,1.000000001602, + 50.485480481398)); +#9464 = CARTESIAN_POINT('',(124.77193359687,1.000000001602, + 50.485480481398)); +#9465 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 50.230158215773)); +#9466 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 49.750278553588)); +#9467 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 49.750272252958)); +#9468 = CARTESIAN_POINT('',(124.49169430918,1.000000001602, + 47.307182833424)); +#9469 = CARTESIAN_POINT('',(124.49169518076,1.000000001602,47.3071736395 + )); +#9470 = PLANE('',#9471); +#9471 = AXIS2_PLACEMENT_3D('',#9472,#9473,#9474); +#9472 = CARTESIAN_POINT('',(119.2024253522,1.000000001602,50.48354549127 + )); +#9473 = DIRECTION('',(0.,-1.,0.)); +#9474 = DIRECTION('',(0.,0.,-1.)); +#9475 = ADVANCED_FACE('',(#9476),#9517,.T.); +#9476 = FACE_BOUND('',#9477,.T.); +#9477 = EDGE_LOOP('',(#9478,#9501)); +#9478 = ORIENTED_EDGE('',*,*,#9479,.T.); +#9479 = EDGE_CURVE('',#9480,#9482,#9484,.T.); +#9480 = VERTEX_POINT('',#9481); +#9481 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#9482 = VERTEX_POINT('',#9483); +#9483 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#9484 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9485,#9486,#9487,#9488,#9489, + #9490,#9491,#9492,#9493,#9494,#9495,#9496,#9497,#9498,#9499,#9500), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.2,0.4,0.6,0.8,1.), + .PIECEWISE_BEZIER_KNOTS.); +#9485 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#9486 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.39184121407)); +#9487 = CARTESIAN_POINT('',(123.84615872839,1.000000001602, + 107.59988161988)); +#9488 = CARTESIAN_POINT('',(123.54046939817,1.000000001602, + 107.78244605822)); +#9489 = CARTESIAN_POINT('',(123.54046398891,1.000000001602, + 107.78244928875)); +#9490 = CARTESIAN_POINT('',(119.21407812201,1.000000001602, + 110.3298796326)); +#9491 = CARTESIAN_POINT('',(119.214072652,1.000000001602,110.32988275832 + )); +#9492 = CARTESIAN_POINT('',(119.03575505948,1.000000001602, + 110.43177857236)); +#9493 = CARTESIAN_POINT('',(118.89564621476,1.000000001602, + 110.48697296574)); +#9494 = CARTESIAN_POINT('',(118.72157158949,1.000000001602, + 110.48697296574)); +#9495 = CARTESIAN_POINT('',(118.3819137841,1.000000001602, + 110.48697296574)); +#9496 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 110.22798388912)); +#9497 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 109.75246611189)); +#9498 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 109.75245981126)); +#9499 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.5344730765)); +#9500 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#9501 = ORIENTED_EDGE('',*,*,#9502,.T.); +#9502 = EDGE_CURVE('',#9482,#9480,#9503,.T.); +#9503 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9504,#9505,#9506,#9507,#9508, + #9509,#9510,#9511,#9512,#9513,#9514,#9515,#9516),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9504 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#9505 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.05470327607)); +#9506 = CARTESIAN_POINT('',(118.3819137841,1.000000001602, + 103.79995992202)); +#9507 = CARTESIAN_POINT('',(118.72157158949,1.000000001602, + 103.79995992202)); +#9508 = CARTESIAN_POINT('',(118.89564621476,1.000000001602, + 103.79995992202)); +#9509 = CARTESIAN_POINT('',(119.04000078205,1.000000001602, + 103.8551543154)); +#9510 = CARTESIAN_POINT('',(119.21407268448,1.000000001602, + 103.95705007251)); +#9511 = CARTESIAN_POINT('',(119.21407812199,1.000000001602, + 103.95705325544)); +#9512 = CARTESIAN_POINT('',(123.54046398886,1.000000001602, + 106.50448359904)); +#9513 = CARTESIAN_POINT('',(123.54046941171,1.000000001602, + 106.50448680692)); +#9514 = CARTESIAN_POINT('',(123.84191300582,1.000000001602, + 106.68280554531)); +#9515 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 106.89509167368)); +#9516 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#9517 = PLANE('',#9518); +#9518 = AXIS2_PLACEMENT_3D('',#9519,#9520,#9521); +#9519 = CARTESIAN_POINT('',(118.96623100803,1.000000001602, + 110.44663879229)); +#9520 = DIRECTION('',(0.,-1.,0.)); +#9521 = DIRECTION('',(0.,0.,-1.)); +#9522 = ADVANCED_FACE('',(#9523),#9555,.T.); +#9523 = FACE_BOUND('',#9524,.T.); +#9524 = EDGE_LOOP('',(#9525,#9526,#9538,#9547,#9554)); +#9525 = ORIENTED_EDGE('',*,*,#9142,.F.); +#9526 = ORIENTED_EDGE('',*,*,#9527,.T.); +#9527 = EDGE_CURVE('',#9143,#9528,#9530,.T.); +#9528 = VERTEX_POINT('',#9529); +#9529 = CARTESIAN_POINT('',(62.5,5.626794919243,111.2541053161)); +#9530 = ( BOUNDED_CURVE() B_SPLINE_CURVE(6,(#9531,#9532,#9533,#9534, +#9535,#9536,#9537),.UNSPECIFIED.,.F.,.F.) B_SPLINE_CURVE_WITH_KNOTS((7,7 +),(1.570796326795,4.188790204786),.PIECEWISE_BEZIER_KNOTS.) CURVE() +GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_CURVE((1.090029425874, + 1.026392115624,0.994380042667,0.983591724037,0.994380042667, +1.026392115624,1.090029425874)) REPRESENTATION_ITEM('') ); +#9531 = CARTESIAN_POINT('',(62.5,6.,111.3541053161)); +#9532 = CARTESIAN_POINT('',(62.5,6.,111.26143706791)); +#9533 = CARTESIAN_POINT('',(62.5,5.94992174933,111.17616542915)); +#9534 = CARTESIAN_POINT('',(62.5,5.861340525659,111.12517935778)); +#9535 = CARTESIAN_POINT('',(62.5,5.759133899976,111.12504397899)); +#9536 = CARTESIAN_POINT('',(62.5,5.673129043335,111.17385225905)); +#9537 = CARTESIAN_POINT('',(62.5,5.626794919243,111.2541053161)); +#9538 = ORIENTED_EDGE('',*,*,#9539,.F.); +#9539 = EDGE_CURVE('',#9540,#9528,#9542,.T.); +#9540 = VERTEX_POINT('',#9541); +#9541 = CARTESIAN_POINT('',(62.5,5.626794919243,38.7458946839)); +#9542 = CIRCLE('',#9543,36.2541053161); +#9543 = AXIS2_PLACEMENT_3D('',#9544,#9545,#9546); +#9544 = CARTESIAN_POINT('',(62.5,5.626794919243,75.)); +#9545 = DIRECTION('',(0.,1.,0.)); +#9546 = DIRECTION('',(0.,0.,-1.)); +#9547 = ORIENTED_EDGE('',*,*,#9548,.F.); +#9548 = EDGE_CURVE('',#9528,#9540,#9549,.T.); +#9549 = CIRCLE('',#9550,36.2541053161); +#9550 = AXIS2_PLACEMENT_3D('',#9551,#9552,#9553); +#9551 = CARTESIAN_POINT('',(62.5,5.626794919243,75.)); +#9552 = DIRECTION('',(0.,1.,0.)); +#9553 = DIRECTION('',(0.,0.,-1.)); +#9554 = ORIENTED_EDGE('',*,*,#9527,.F.); +#9555 = TOROIDAL_SURFACE('',#9556,36.354105316101,0.2); +#9556 = AXIS2_PLACEMENT_3D('',#9557,#9558,#9559); +#9557 = CARTESIAN_POINT('',(62.5,5.8,75.)); +#9558 = DIRECTION('',(0.,1.,0.)); +#9559 = DIRECTION('',(0.,-0.,1.)); +#9560 = ADVANCED_FACE('',(#9561),#9594,.T.); +#9561 = FACE_BOUND('',#9562,.T.); +#9562 = EDGE_LOOP('',(#9563,#9579,#9585,#9586,#9587,#9588)); +#9563 = ORIENTED_EDGE('',*,*,#9564,.F.); +#9564 = EDGE_CURVE('',#9565,#9567,#9569,.T.); +#9565 = VERTEX_POINT('',#9566); +#9566 = CARTESIAN_POINT('',(37.60730380772,4.97446458622,115.16112767688 + )); +#9567 = VERTEX_POINT('',#9568); +#9568 = CARTESIAN_POINT('',(22.338872323117,4.97446458622,99.89269619228 + )); +#9569 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9570,#9571,#9572,#9573,#9574, + #9575,#9576,#9577,#9578),.UNSPECIFIED.,.F.,.F.,(4,2,1,2,4),(0.,0.25, + 0.5,0.75,1.),.UNSPECIFIED.); +#9570 = CARTESIAN_POINT('',(37.60730380772,4.97446458622,115.16112767688 + )); +#9571 = CARTESIAN_POINT('',(36.334934517337,5.211845153248, + 113.88875838649)); +#9572 = CARTESIAN_POINT('',(35.062565226953,5.392819741225, + 112.61638909611)); +#9573 = CARTESIAN_POINT('',(32.517826646186,5.634989044275, + 110.07165051534)); +#9574 = CARTESIAN_POINT('',(29.973088065419,5.757315801138, + 107.52691193458)); +#9575 = CARTESIAN_POINT('',(27.428349484652,5.634989044275, + 104.98217335381)); +#9576 = CARTESIAN_POINT('',(24.883610903885,5.392819741225, + 102.43743477304)); +#9577 = CARTESIAN_POINT('',(23.611241613501,5.211845153248, + 101.16506548266)); +#9578 = CARTESIAN_POINT('',(22.338872323117,4.97446458622,99.89269619228 + )); +#9579 = ORIENTED_EDGE('',*,*,#9580,.F.); +#9580 = EDGE_CURVE('',#9203,#9565,#9581,.T.); +#9581 = LINE('',#9582,#9583); +#9582 = CARTESIAN_POINT('',(37.60730380772,17.,115.16112767688)); +#9583 = VECTOR('',#9584,1.); +#9584 = DIRECTION('',(0.,-1.,0.)); +#9585 = ORIENTED_EDGE('',*,*,#9202,.F.); +#9586 = ORIENTED_EDGE('',*,*,#9173,.T.); +#9587 = ORIENTED_EDGE('',*,*,#9219,.F.); +#9588 = ORIENTED_EDGE('',*,*,#9589,.F.); +#9589 = EDGE_CURVE('',#9567,#9211,#9590,.T.); +#9590 = LINE('',#9591,#9592); +#9591 = CARTESIAN_POINT('',(22.338872323117,17.,99.89269619228)); +#9592 = VECTOR('',#9593,1.); +#9593 = DIRECTION('',(0.,1.,0.)); +#9594 = PLANE('',#9595); +#9595 = AXIS2_PLACEMENT_3D('',#9596,#9597,#9598); +#9596 = CARTESIAN_POINT('',(29.973088065419,6.,107.52691193458)); +#9597 = DIRECTION('',(-0.707106781187,0.,0.707106781187)); +#9598 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9599 = ADVANCED_FACE('',(#9600),#9621,.T.); +#9600 = FACE_BOUND('',#9601,.T.); +#9601 = EDGE_LOOP('',(#9602,#9603,#9612,#9619,#9620)); +#9602 = ORIENTED_EDGE('',*,*,#9580,.T.); +#9603 = ORIENTED_EDGE('',*,*,#9604,.T.); +#9604 = EDGE_CURVE('',#9565,#9605,#9607,.T.); +#9605 = VERTEX_POINT('',#9606); +#9606 = CARTESIAN_POINT('',(62.5,4.974464578442,27.750000004491)); +#9607 = CIRCLE('',#9608,47.25); +#9608 = AXIS2_PLACEMENT_3D('',#9609,#9610,#9611); +#9609 = CARTESIAN_POINT('',(62.5,4.97446458622,75.)); +#9610 = DIRECTION('',(0.,1.,0.)); +#9611 = DIRECTION('',(0.,0.,-1.)); +#9612 = ORIENTED_EDGE('',*,*,#9613,.T.); +#9613 = EDGE_CURVE('',#9605,#9567,#9614,.T.); +#9614 = CIRCLE('',#9615,47.25); +#9615 = AXIS2_PLACEMENT_3D('',#9616,#9617,#9618); +#9616 = CARTESIAN_POINT('',(62.5,4.97446458622,75.)); +#9617 = DIRECTION('',(0.,1.,0.)); +#9618 = DIRECTION('',(0.,0.,-1.)); +#9619 = ORIENTED_EDGE('',*,*,#9589,.T.); +#9620 = ORIENTED_EDGE('',*,*,#9210,.F.); +#9621 = CYLINDRICAL_SURFACE('',#9622,47.25); +#9622 = AXIS2_PLACEMENT_3D('',#9623,#9624,#9625); +#9623 = CARTESIAN_POINT('',(62.5,17.,75.)); +#9624 = DIRECTION('',(0.,-1.,0.)); +#9625 = DIRECTION('',(0.707106781187,0.,0.707106781187)); +#9626 = ADVANCED_FACE('',(#9627),#9633,.F.); +#9627 = FACE_BOUND('',#9628,.T.); +#9628 = EDGE_LOOP('',(#9629,#9630,#9631,#9632)); +#9629 = ORIENTED_EDGE('',*,*,#8760,.F.); +#9630 = ORIENTED_EDGE('',*,*,#8794,.T.); +#9631 = ORIENTED_EDGE('',*,*,#8729,.F.); +#9632 = ORIENTED_EDGE('',*,*,#8613,.F.); +#9633 = PLANE('',#9634); +#9634 = AXIS2_PLACEMENT_3D('',#9635,#9636,#9637); +#9635 = CARTESIAN_POINT('',(75.,30.209187237062,9.815559940509)); +#9636 = DIRECTION('',(0.,0.45399049974,0.891006524188)); +#9637 = DIRECTION('',(1.,0.,-0.)); +#9638 = ADVANCED_FACE('',(#9639),#9645,.F.); +#9639 = FACE_BOUND('',#9640,.T.); +#9640 = EDGE_LOOP('',(#9641,#9642,#9643,#9644)); +#9641 = ORIENTED_EDGE('',*,*,#8712,.F.); +#9642 = ORIENTED_EDGE('',*,*,#8777,.T.); +#9643 = ORIENTED_EDGE('',*,*,#8681,.F.); +#9644 = ORIENTED_EDGE('',*,*,#8578,.F.); +#9645 = PLANE('',#9646); +#9646 = AXIS2_PLACEMENT_3D('',#9647,#9648,#9649); +#9647 = CARTESIAN_POINT('',(75.,30.209187237062,9.815559940509)); +#9648 = DIRECTION('',(0.,0.45399049974,0.891006524188)); +#9649 = DIRECTION('',(1.,0.,-0.)); +#9650 = ADVANCED_FACE('',(#9651),#9717,.T.); +#9651 = FACE_BOUND('',#9652,.T.); +#9652 = EDGE_LOOP('',(#9653,#9704,#9710,#9711)); +#9653 = ORIENTED_EDGE('',*,*,#9654,.F.); +#9654 = EDGE_CURVE('',#9655,#9657,#9659,.T.); +#9655 = VERTEX_POINT('',#9656); +#9656 = CARTESIAN_POINT('',(124.50830481923,0.,76.9712678005)); +#9657 = VERTEX_POINT('',#9658); +#9658 = CARTESIAN_POINT('',(130.36779784843,0.,79.750278562)); +#9659 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9660,#9661,#9662,#9663,#9664, + #9665,#9666,#9667,#9668,#9669,#9670,#9671,#9672,#9673,#9674,#9675, + #9676,#9677,#9678,#9679,#9680,#9681,#9682,#9683,#9684,#9685,#9686, + #9687,#9688,#9689,#9690,#9691,#9692,#9693,#9694,#9695,#9696,#9697, + #9698,#9699,#9700,#9701,#9702,#9703),.UNSPECIFIED.,.F.,.F.,(4,3,3,3, + 3,3,3,3,3,3,3,3,1,3,3,4),(0.,9.032612890054E-02,0.13015675767, + 0.149544493479,0.3354406132,0.365385630939,0.395415746677, + 0.581311866251,0.600699602061,0.640496306105,0.730981323737, + 0.754812153774,0.801288634384,0.940718076215,0.960095143506,1.), + .UNSPECIFIED.); +#9660 = CARTESIAN_POINT('',(124.50830481923,0.,76.9712678005)); +#9661 = CARTESIAN_POINT('',(124.50830569081,6.938893903907E-15, + 76.971258606576)); +#9662 = CARTESIAN_POINT('',(124.50830566093,6.938893903907E-15, + 74.528169187042)); +#9663 = CARTESIAN_POINT('',(124.50830566093,0.,74.528162886412)); +#9664 = CARTESIAN_POINT('',(124.50830566093,0.,74.048283224227)); +#9665 = CARTESIAN_POINT('',(124.22806640312,0.,73.792960958602)); +#9666 = CARTESIAN_POINT('',(123.89245605156,0.,73.792960958602)); +#9667 = CARTESIAN_POINT('',(123.71803710625,6.938893903907E-15, + 73.792960958602)); +#9668 = CARTESIAN_POINT('',(123.57376464531,6.938893903907E-15, + 73.848332052352)); +#9669 = CARTESIAN_POINT('',(123.39934842183,6.938893903907E-15, + 73.950459372365)); +#9670 = CARTESIAN_POINT('',(123.39934298471,6.938893903907E-15, + 73.950462556002)); +#9671 = CARTESIAN_POINT('',(119.06563747777,6.938893903907E-15, + 76.499990611189)); +#9672 = CARTESIAN_POINT('',(119.06563205418,6.938893903907E-15, + 76.499993817801)); +#9673 = CARTESIAN_POINT('',(118.76386230156,0.,76.678410177352)); +#9674 = CARTESIAN_POINT('',(118.63220214531,0.,76.890666036727)); +#9675 = CARTESIAN_POINT('',(118.63220214531,0.,77.137375021102)); +#9676 = CARTESIAN_POINT('',(118.63220214531,0.,77.383468771102)); +#9677 = CARTESIAN_POINT('',(118.76386230156,0.,77.595724630477)); +#9678 = CARTESIAN_POINT('',(119.06563208836,0.,77.778447574238)); +#9679 = CARTESIAN_POINT('',(119.06563747754,0.,77.778450837411)); +#9680 = CARTESIAN_POINT('',(123.39934298471,0.,80.327978892451)); +#9681 = CARTESIAN_POINT('',(123.39934842183,0.,80.327982076089)); +#9682 = CARTESIAN_POINT('',(123.57376464531,0.,80.430109396102)); +#9683 = CARTESIAN_POINT('',(123.71803710625,0.,80.485480489852)); +#9684 = CARTESIAN_POINT('',(123.89245605156,-6.938893903907E-15, + 80.485480489852)); +#9685 = CARTESIAN_POINT('',(124.22806640312,-6.938893903907E-15, + 80.485480489852)); +#9686 = CARTESIAN_POINT('',(124.50830566093,-6.938893903907E-15, + 80.225851583601)); +#9687 = CARTESIAN_POINT('',(124.50830566093,0.,79.750278562042)); +#9688 = CARTESIAN_POINT('',(124.50830566093,0.,79.750272261412)); +#9689 = CARTESIAN_POINT('',(124.5083048025,0.,77.302867009676)); +#9690 = CARTESIAN_POINT('',(124.50830649436,0.,77.302876088525)); +#9691 = CARTESIAN_POINT('',(124.55937011406,-6.938893903907E-15, + 77.481291036727)); +#9692 = CARTESIAN_POINT('',(124.69103027031,-6.938893903907E-15, + 77.638791036727)); +#9693 = CARTESIAN_POINT('',(124.92176405558,0.,77.776344030364)); +#9694 = CARTESIAN_POINT('',(125.28167868724,6.938893903907E-15, + 77.990908772061)); +#9695 = CARTESIAN_POINT('',(126.72635333414,6.938893903907E-15, + 78.840753611442)); +#9696 = CARTESIAN_POINT('',(128.17102798103,0.,79.690598450823)); +#9697 = CARTESIAN_POINT('',(129.25464459701,0.,80.327793941274)); +#9698 = CARTESIAN_POINT('',(129.428642575,0.,80.430109396102)); +#9699 = CARTESIAN_POINT('',(129.57322265312,0.,80.485480489852)); +#9700 = CARTESIAN_POINT('',(129.74733398125,0.,80.485480489852)); +#9701 = CARTESIAN_POINT('',(130.08294433281,0.,80.485480489852)); +#9702 = CARTESIAN_POINT('',(130.36779784843,0.,80.225851583601)); +#9703 = CARTESIAN_POINT('',(130.36779784843,0.,79.750278562)); +#9704 = ORIENTED_EDGE('',*,*,#9705,.F.); +#9705 = EDGE_CURVE('',#9236,#9655,#9706,.T.); +#9706 = LINE('',#9707,#9708); +#9707 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9708 = VECTOR('',#9709,1.); +#9709 = DIRECTION('',(0.,-1.,0.)); +#9710 = ORIENTED_EDGE('',*,*,#9258,.F.); +#9711 = ORIENTED_EDGE('',*,*,#9712,.F.); +#9712 = EDGE_CURVE('',#9657,#9238,#9713,.T.); +#9713 = LINE('',#9714,#9715); +#9714 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9715 = VECTOR('',#9716,1.); +#9716 = DIRECTION('',(0.,1.,0.)); +#9717 = SURFACE_OF_LINEAR_EXTRUSION('',#9718,#9763); +#9718 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9719,#9720,#9721,#9722,#9723, + #9724,#9725,#9726,#9727,#9728,#9729,#9730,#9731,#9732,#9733,#9734, + #9735,#9736,#9737,#9738,#9739,#9740,#9741,#9742,#9743,#9744,#9745, + #9746,#9747,#9748,#9749,#9750,#9751,#9752,#9753,#9754,#9755,#9756, + #9757,#9758,#9759,#9760,#9761,#9762),.UNSPECIFIED.,.F.,.F.,(4,3,3,3, + 3,3,3,3,3,3,3,3,1,3,3,4),(0.,9.032612890054E-02,0.13015675767, + 0.149544493479,0.3354406132,0.365385630939,0.395415746677, + 0.581311866251,0.600699602061,0.640496306105,0.730981323737, + 0.754812153774,0.801288634384,0.940718076215,0.960095143506,1.), + .UNSPECIFIED.); +#9719 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9720 = CARTESIAN_POINT('',(124.50830569081,1.000000001602, + 76.971258606576)); +#9721 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.528169187042)); +#9722 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.528162886412)); +#9723 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 74.048283224227)); +#9724 = CARTESIAN_POINT('',(124.22806640312,1.000000001602, + 73.792960958602)); +#9725 = CARTESIAN_POINT('',(123.89245605156,1.000000001602, + 73.792960958602)); +#9726 = CARTESIAN_POINT('',(123.71803710625,1.000000001602, + 73.792960958602)); +#9727 = CARTESIAN_POINT('',(123.57376464531,1.000000001602, + 73.848332052352)); +#9728 = CARTESIAN_POINT('',(123.39934842183,1.000000001602, + 73.950459372365)); +#9729 = CARTESIAN_POINT('',(123.39934298471,1.000000001602, + 73.950462556002)); +#9730 = CARTESIAN_POINT('',(119.06563747777,1.000000001602, + 76.499990611189)); +#9731 = CARTESIAN_POINT('',(119.06563205418,1.000000001602, + 76.499993817801)); +#9732 = CARTESIAN_POINT('',(118.76386230156,1.000000001602, + 76.678410177352)); +#9733 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 76.890666036727)); +#9734 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 77.137375021102)); +#9735 = CARTESIAN_POINT('',(118.63220214531,1.000000001602, + 77.383468771102)); +#9736 = CARTESIAN_POINT('',(118.76386230156,1.000000001602, + 77.595724630477)); +#9737 = CARTESIAN_POINT('',(119.06563208836,1.000000001602, + 77.778447574238)); +#9738 = CARTESIAN_POINT('',(119.06563747754,1.000000001602, + 77.778450837411)); +#9739 = CARTESIAN_POINT('',(123.39934298471,1.000000001602, + 80.327978892451)); +#9740 = CARTESIAN_POINT('',(123.39934842183,1.000000001602, + 80.327982076089)); +#9741 = CARTESIAN_POINT('',(123.57376464531,1.000000001602, + 80.430109396102)); +#9742 = CARTESIAN_POINT('',(123.71803710625,1.000000001602, + 80.485480489852)); +#9743 = CARTESIAN_POINT('',(123.89245605156,1.000000001602, + 80.485480489852)); +#9744 = CARTESIAN_POINT('',(124.22806640312,1.000000001602, + 80.485480489852)); +#9745 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 80.225851583601)); +#9746 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 79.750278562042)); +#9747 = CARTESIAN_POINT('',(124.50830566093,1.000000001602, + 79.750272261412)); +#9748 = CARTESIAN_POINT('',(124.5083048025,1.000000001602, + 77.302867009676)); +#9749 = CARTESIAN_POINT('',(124.50830649436,1.000000001602, + 77.302876088525)); +#9750 = CARTESIAN_POINT('',(124.55937011406,1.000000001602, + 77.481291036727)); +#9751 = CARTESIAN_POINT('',(124.69103027031,1.000000001602, + 77.638791036727)); +#9752 = CARTESIAN_POINT('',(124.92176405558,1.000000001602, + 77.776344030364)); +#9753 = CARTESIAN_POINT('',(125.28167868724,1.000000001602, + 77.990908772061)); +#9754 = CARTESIAN_POINT('',(126.72635333414,1.000000001602, + 78.840753611442)); +#9755 = CARTESIAN_POINT('',(128.17102798103,1.000000001602, + 79.690598450823)); +#9756 = CARTESIAN_POINT('',(129.25464459701,1.000000001602, + 80.327793941274)); +#9757 = CARTESIAN_POINT('',(129.428642575,1.000000001602,80.430109396102 + )); +#9758 = CARTESIAN_POINT('',(129.57322265312,1.000000001602, + 80.485480489852)); +#9759 = CARTESIAN_POINT('',(129.74733398125,1.000000001602, + 80.485480489852)); +#9760 = CARTESIAN_POINT('',(130.08294433281,1.000000001602, + 80.485480489852)); +#9761 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 80.225851583601)); +#9762 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9763 = VECTOR('',#9764,1.); +#9764 = DIRECTION('',(0.,-1.,0.)); +#9765 = ADVANCED_FACE('',(#9766),#9790,.T.); +#9766 = FACE_BOUND('',#9767,.T.); +#9767 = EDGE_LOOP('',(#9768,#9787,#9788,#9789)); +#9768 = ORIENTED_EDGE('',*,*,#9769,.F.); +#9769 = EDGE_CURVE('',#9657,#9655,#9770,.T.); +#9770 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9771,#9772,#9773,#9774,#9775, + #9776,#9777,#9778,#9779,#9780,#9781,#9782,#9783,#9784,#9785,#9786), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.417901796289,0.504349371153, + 0.546290925385,0.948683255757,1.),.UNSPECIFIED.); +#9771 = CARTESIAN_POINT('',(130.36779784843,0.,79.750278562)); +#9772 = CARTESIAN_POINT('',(130.36779784843,0.,79.750272261412)); +#9773 = CARTESIAN_POINT('',(130.36779784843,0.,74.528169187042)); +#9774 = CARTESIAN_POINT('',(130.36779784843,0.,74.528162886412)); +#9775 = CARTESIAN_POINT('',(130.36779784843,0.,74.048283224227)); +#9776 = CARTESIAN_POINT('',(130.08294433281,0.,73.792960958602)); +#9777 = CARTESIAN_POINT('',(129.74733398125,0.,73.792960958602)); +#9778 = CARTESIAN_POINT('',(129.57322265312,0.,73.792960958602)); +#9779 = CARTESIAN_POINT('',(129.428642575,0.,73.848332052352)); +#9780 = CARTESIAN_POINT('',(129.25453396621,0.,73.950459368095)); +#9781 = CARTESIAN_POINT('',(129.25452853154,0.,73.950462555922)); +#9782 = CARTESIAN_POINT('',(124.92051540732,0.,76.499990610738)); +#9783 = CARTESIAN_POINT('',(124.92051003166,0.,76.499993896667)); +#9784 = CARTESIAN_POINT('',(124.69103027031,-6.938893903907E-15, + 76.640265646102)); +#9785 = CARTESIAN_POINT('',(124.55937011406,-6.938893903907E-15, + 76.792843771102)); +#9786 = CARTESIAN_POINT('',(124.50830481923,0.,76.9712678005)); +#9787 = ORIENTED_EDGE('',*,*,#9712,.T.); +#9788 = ORIENTED_EDGE('',*,*,#9235,.F.); +#9789 = ORIENTED_EDGE('',*,*,#9705,.T.); +#9790 = SURFACE_OF_LINEAR_EXTRUSION('',#9791,#9808); +#9791 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9792,#9793,#9794,#9795,#9796, + #9797,#9798,#9799,#9800,#9801,#9802,#9803,#9804,#9805,#9806,#9807), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.417901796289,0.504349371153, + 0.546290925385,0.948683255757,1.),.UNSPECIFIED.); +#9792 = CARTESIAN_POINT('',(130.36779784843,1.000000001602,79.750278562) + ); +#9793 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 79.750272261412)); +#9794 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.528169187042)); +#9795 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.528162886412)); +#9796 = CARTESIAN_POINT('',(130.36779784843,1.000000001602, + 74.048283224227)); +#9797 = CARTESIAN_POINT('',(130.08294433281,1.000000001602, + 73.792960958602)); +#9798 = CARTESIAN_POINT('',(129.74733398125,1.000000001602, + 73.792960958602)); +#9799 = CARTESIAN_POINT('',(129.57322265312,1.000000001602, + 73.792960958602)); +#9800 = CARTESIAN_POINT('',(129.428642575,1.000000001602,73.848332052352 + )); +#9801 = CARTESIAN_POINT('',(129.25453396621,1.000000001602, + 73.950459368095)); +#9802 = CARTESIAN_POINT('',(129.25452853154,1.000000001602, + 73.950462555922)); +#9803 = CARTESIAN_POINT('',(124.92051540732,1.000000001602, + 76.499990610738)); +#9804 = CARTESIAN_POINT('',(124.92051003166,1.000000001602, + 76.499993896667)); +#9805 = CARTESIAN_POINT('',(124.69103027031,1.000000001602, + 76.640265646102)); +#9806 = CARTESIAN_POINT('',(124.55937011406,1.000000001602, + 76.792843771102)); +#9807 = CARTESIAN_POINT('',(124.50830481923,1.000000001602,76.9712678005 + )); +#9808 = VECTOR('',#9809,1.); +#9809 = DIRECTION('',(0.,-1.,0.)); +#9810 = ADVANCED_FACE('',(#9811),#9846,.T.); +#9811 = FACE_BOUND('',#9812,.T.); +#9812 = EDGE_LOOP('',(#9813,#9833,#9839,#9840)); +#9813 = ORIENTED_EDGE('',*,*,#9814,.F.); +#9814 = EDGE_CURVE('',#9815,#9817,#9819,.T.); +#9815 = VERTEX_POINT('',#9816); +#9816 = CARTESIAN_POINT('',(128.78817979689,0.,104.24575764134)); +#9817 = VERTEX_POINT('',#9818); +#9818 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 110.03268380134)); +#9819 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9820,#9821,#9822,#9823,#9824, + #9825,#9826,#9827,#9828,#9829,#9830,#9831,#9832),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9820 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 104.24575764134)); +#9821 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 104.24576394192)); +#9822 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 110.03267750071)); +#9823 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 110.03268380134)); +#9824 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 110.41054995952)); +#9825 = CARTESIAN_POINT('',(128.98348303499,1.602080989573E-09, + 110.60160747506)); +#9826 = CARTESIAN_POINT('',(129.36134919318,1.602087928466E-09, + 110.60160747506)); +#9827 = CARTESIAN_POINT('',(129.36135549381,1.602087928466E-09, + 110.60160747506)); +#9828 = CARTESIAN_POINT('',(130.32937393855,1.602087928466E-09, + 110.60160747506)); +#9829 = CARTESIAN_POINT('',(130.32938023918,1.602080989573E-09, + 110.60160747506)); +#9830 = CARTESIAN_POINT('',(130.7030006748,1.602074050679E-09, + 110.60160747506)); +#9831 = CARTESIAN_POINT('',(130.8983039129,1.602074050679E-09, + 110.42328712722)); +#9832 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 110.03268380134)); +#9833 = ORIENTED_EDGE('',*,*,#9834,.T.); +#9834 = EDGE_CURVE('',#9815,#9316,#9835,.T.); +#9835 = LINE('',#9836,#9837); +#9836 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9837 = VECTOR('',#9838,1.); +#9838 = DIRECTION('',(0.,1.,0.)); +#9839 = ORIENTED_EDGE('',*,*,#9313,.F.); +#9840 = ORIENTED_EDGE('',*,*,#9841,.T.); +#9841 = EDGE_CURVE('',#9314,#9817,#9842,.T.); +#9842 = LINE('',#9843,#9844); +#9843 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9844 = VECTOR('',#9845,1.); +#9845 = DIRECTION('',(0.,-1.,0.)); +#9846 = SURFACE_OF_LINEAR_EXTRUSION('',#9847,#9861); +#9847 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9848,#9849,#9850,#9851,#9852, + #9853,#9854,#9855,#9856,#9857,#9858,#9859,#9860),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9848 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9849 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24576394192)); +#9850 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.03267750071)); +#9851 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.03268380134)); +#9852 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 110.41054995952)); +#9853 = CARTESIAN_POINT('',(128.98348303499,1.000000001602, + 110.60160747506)); +#9854 = CARTESIAN_POINT('',(129.36134919318,1.000000001602, + 110.60160747506)); +#9855 = CARTESIAN_POINT('',(129.36135549381,1.000000001602, + 110.60160747506)); +#9856 = CARTESIAN_POINT('',(130.32937393855,1.000000001602, + 110.60160747506)); +#9857 = CARTESIAN_POINT('',(130.32938023918,1.000000001602, + 110.60160747506)); +#9858 = CARTESIAN_POINT('',(130.7030006748,1.000000001602, + 110.60160747506)); +#9859 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.42328712722)); +#9860 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9861 = VECTOR('',#9862,1.); +#9862 = DIRECTION('',(0.,-1.,0.)); +#9863 = ADVANCED_FACE('',(#9864),#9885,.T.); +#9864 = FACE_BOUND('',#9865,.T.); +#9865 = EDGE_LOOP('',(#9866,#9882,#9883,#9884)); +#9866 = ORIENTED_EDGE('',*,*,#9867,.F.); +#9867 = EDGE_CURVE('',#9817,#9815,#9868,.T.); +#9868 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9869,#9870,#9871,#9872,#9873, + #9874,#9875,#9876,#9877,#9878,#9879,#9880,#9881),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9869 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 110.03268380134)); +#9870 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 110.03267750071)); +#9871 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 104.24576394192)); +#9872 = CARTESIAN_POINT('',(130.8983039129,1.602080989573E-09, + 104.24575764129)); +#9873 = CARTESIAN_POINT('',(130.8983039129,1.602087928466E-09, + 103.87213720567)); +#9874 = CARTESIAN_POINT('',(130.7030006748,1.602087928466E-09, + 103.67683396757)); +#9875 = CARTESIAN_POINT('',(130.32938023918,1.602080989573E-09, + 103.67683396757)); +#9876 = CARTESIAN_POINT('',(130.32937393855,1.602080989573E-09, + 103.67683396757)); +#9877 = CARTESIAN_POINT('',(129.36135549381,1.602080989573E-09, + 103.67683396757)); +#9878 = CARTESIAN_POINT('',(129.36134919318,1.602080989573E-09, + 103.67683396757)); +#9879 = CARTESIAN_POINT('',(128.98348303499,1.602080989573E-09, + 103.67683396757)); +#9880 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 103.87213720567)); +#9881 = CARTESIAN_POINT('',(128.78817979689,1.602080989573E-09, + 104.24575764134)); +#9882 = ORIENTED_EDGE('',*,*,#9841,.F.); +#9883 = ORIENTED_EDGE('',*,*,#9333,.F.); +#9884 = ORIENTED_EDGE('',*,*,#9834,.F.); +#9885 = SURFACE_OF_LINEAR_EXTRUSION('',#9886,#9900); +#9886 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9887,#9888,#9889,#9890,#9891, + #9892,#9893,#9894,#9895,#9896,#9897,#9898,#9899),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9887 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03268380134)); +#9888 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 110.03267750071)); +#9889 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 104.24576394192)); +#9890 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 104.24575764129)); +#9891 = CARTESIAN_POINT('',(130.8983039129,1.000000001602, + 103.87213720567)); +#9892 = CARTESIAN_POINT('',(130.7030006748,1.000000001602, + 103.67683396757)); +#9893 = CARTESIAN_POINT('',(130.32938023918,1.000000001602, + 103.67683396757)); +#9894 = CARTESIAN_POINT('',(130.32937393855,1.000000001602, + 103.67683396757)); +#9895 = CARTESIAN_POINT('',(129.36135549381,1.000000001602, + 103.67683396757)); +#9896 = CARTESIAN_POINT('',(129.36134919318,1.000000001602, + 103.67683396757)); +#9897 = CARTESIAN_POINT('',(128.98348303499,1.000000001602, + 103.67683396757)); +#9898 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 103.87213720567)); +#9899 = CARTESIAN_POINT('',(128.78817979689,1.000000001602, + 104.24575764134)); +#9900 = VECTOR('',#9901,1.); +#9901 = DIRECTION('',(0.,-1.,0.)); +#9902 = ADVANCED_FACE('',(#9903),#9938,.T.); +#9903 = FACE_BOUND('',#9904,.T.); +#9904 = EDGE_LOOP('',(#9905,#9925,#9931,#9932)); +#9905 = ORIENTED_EDGE('',*,*,#9906,.F.); +#9906 = EDGE_CURVE('',#9907,#9909,#9911,.T.); +#9907 = VERTEX_POINT('',#9908); +#9908 = CARTESIAN_POINT('',(125.39160174294,0.,104.24575764134)); +#9909 = VERTEX_POINT('',#9910); +#9910 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 110.03268380134)); +#9911 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9912,#9913,#9914,#9915,#9916, + #9917,#9918,#9919,#9920,#9921,#9922,#9923,#9924),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9912 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 104.24575764134)); +#9913 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 104.24576394192)); +#9914 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 110.03267750071)); +#9915 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 110.03268380134)); +#9916 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 110.41054995952)); +#9917 = CARTESIAN_POINT('',(125.58690498104,1.602080989573E-09, + 110.60160747506)); +#9918 = CARTESIAN_POINT('',(125.96052541666,1.602087928466E-09, + 110.60160747506)); +#9919 = CARTESIAN_POINT('',(125.96053171729,1.602087928466E-09, + 110.60160747506)); +#9920 = CARTESIAN_POINT('',(126.92855016203,1.602087928466E-09, + 110.60160747506)); +#9921 = CARTESIAN_POINT('',(126.92855646266,1.602080989573E-09, + 110.60160747506)); +#9922 = CARTESIAN_POINT('',(127.30642262085,1.602074050679E-09, + 110.60160747506)); +#9923 = CARTESIAN_POINT('',(127.49748013639,1.602074050679E-09, + 110.42328712722)); +#9924 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 110.03268380134)); +#9925 = ORIENTED_EDGE('',*,*,#9926,.T.); +#9926 = EDGE_CURVE('',#9907,#9360,#9927,.T.); +#9927 = LINE('',#9928,#9929); +#9928 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9929 = VECTOR('',#9930,1.); +#9930 = DIRECTION('',(0.,1.,0.)); +#9931 = ORIENTED_EDGE('',*,*,#9357,.F.); +#9932 = ORIENTED_EDGE('',*,*,#9933,.T.); +#9933 = EDGE_CURVE('',#9358,#9909,#9934,.T.); +#9934 = LINE('',#9935,#9936); +#9935 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9936 = VECTOR('',#9937,1.); +#9937 = DIRECTION('',(0.,-1.,0.)); +#9938 = SURFACE_OF_LINEAR_EXTRUSION('',#9939,#9953); +#9939 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9940,#9941,#9942,#9943,#9944, + #9945,#9946,#9947,#9948,#9949,#9950,#9951,#9952),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9940 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9941 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24576394192)); +#9942 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.03267750071)); +#9943 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.03268380134)); +#9944 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 110.41054995952)); +#9945 = CARTESIAN_POINT('',(125.58690498104,1.000000001602, + 110.60160747506)); +#9946 = CARTESIAN_POINT('',(125.96052541666,1.000000001602, + 110.60160747506)); +#9947 = CARTESIAN_POINT('',(125.96053171729,1.000000001602, + 110.60160747506)); +#9948 = CARTESIAN_POINT('',(126.92855016203,1.000000001602, + 110.60160747506)); +#9949 = CARTESIAN_POINT('',(126.92855646266,1.000000001602, + 110.60160747506)); +#9950 = CARTESIAN_POINT('',(127.30642262085,1.000000001602, + 110.60160747506)); +#9951 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.42328712722)); +#9952 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9953 = VECTOR('',#9954,1.); +#9954 = DIRECTION('',(0.,-1.,0.)); +#9955 = ADVANCED_FACE('',(#9956),#9977,.T.); +#9956 = FACE_BOUND('',#9957,.T.); +#9957 = EDGE_LOOP('',(#9958,#9974,#9975,#9976)); +#9958 = ORIENTED_EDGE('',*,*,#9959,.F.); +#9959 = EDGE_CURVE('',#9909,#9907,#9960,.T.); +#9960 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9961,#9962,#9963,#9964,#9965, + #9966,#9967,#9968,#9969,#9970,#9971,#9972,#9973),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9961 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 110.03268380134)); +#9962 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 110.03267750071)); +#9963 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 104.24576394192)); +#9964 = CARTESIAN_POINT('',(127.49748013639,1.602080989573E-09, + 104.24575764129)); +#9965 = CARTESIAN_POINT('',(127.49748013639,1.602087928466E-09, + 103.87213720567)); +#9966 = CARTESIAN_POINT('',(127.30642262085,1.602087928466E-09, + 103.67683396757)); +#9967 = CARTESIAN_POINT('',(126.92855646266,1.602080989573E-09, + 103.67683396757)); +#9968 = CARTESIAN_POINT('',(126.92855016203,1.602080989573E-09, + 103.67683396757)); +#9969 = CARTESIAN_POINT('',(125.96053171729,1.602080989573E-09, + 103.67683396757)); +#9970 = CARTESIAN_POINT('',(125.96052541666,1.602080989573E-09, + 103.67683396757)); +#9971 = CARTESIAN_POINT('',(125.58265925847,1.602080989573E-09, + 103.67683396757)); +#9972 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 103.87213720567)); +#9973 = CARTESIAN_POINT('',(125.39160174294,1.602080989573E-09, + 104.24575764134)); +#9974 = ORIENTED_EDGE('',*,*,#9933,.F.); +#9975 = ORIENTED_EDGE('',*,*,#9377,.F.); +#9976 = ORIENTED_EDGE('',*,*,#9926,.F.); +#9977 = SURFACE_OF_LINEAR_EXTRUSION('',#9978,#9992); +#9978 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#9979,#9980,#9981,#9982,#9983, + #9984,#9985,#9986,#9987,#9988,#9989,#9990,#9991),.UNSPECIFIED.,.F., + .F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.),.PIECEWISE_BEZIER_KNOTS.); +#9979 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03268380134)); +#9980 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 110.03267750071)); +#9981 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 104.24576394192)); +#9982 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 104.24575764129)); +#9983 = CARTESIAN_POINT('',(127.49748013639,1.000000001602, + 103.87213720567)); +#9984 = CARTESIAN_POINT('',(127.30642262085,1.000000001602, + 103.67683396757)); +#9985 = CARTESIAN_POINT('',(126.92855646266,1.000000001602, + 103.67683396757)); +#9986 = CARTESIAN_POINT('',(126.92855016203,1.000000001602, + 103.67683396757)); +#9987 = CARTESIAN_POINT('',(125.96053171729,1.000000001602, + 103.67683396757)); +#9988 = CARTESIAN_POINT('',(125.96052541666,1.000000001602, + 103.67683396757)); +#9989 = CARTESIAN_POINT('',(125.58265925847,1.000000001602, + 103.67683396757)); +#9990 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 103.87213720567)); +#9991 = CARTESIAN_POINT('',(125.39160174294,1.000000001602, + 104.24575764134)); +#9992 = VECTOR('',#9993,1.); +#9993 = DIRECTION('',(0.,-1.,0.)); +#9994 = ADVANCED_FACE('',(#9995),#10033,.T.); +#9995 = FACE_BOUND('',#9996,.T.); +#9996 = EDGE_LOOP('',(#9997,#10020,#10026,#10027)); +#9997 = ORIENTED_EDGE('',*,*,#9998,.F.); +#9998 = EDGE_CURVE('',#9999,#10001,#10003,.T.); +#9999 = VERTEX_POINT('',#10000); +#10000 = CARTESIAN_POINT('',(118.63220215156,0.,44.528162878)); +#10001 = VERTEX_POINT('',#10002); +#10002 = CARTESIAN_POINT('',(124.49169518076,1.602080989573E-09, + 47.3071736395)); +#10003 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10004,#10005,#10006,#10007, + #10008,#10009,#10010,#10011,#10012,#10013,#10014,#10015,#10016, + #10017,#10018,#10019),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0., + 0.417901796289,0.504349371153,0.546290925385,0.948683255757,1.), + .UNSPECIFIED.); +#10004 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 44.528162878)); +#10005 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 44.528169178588)); +#10006 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 49.750272252958)); +#10007 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 49.750278553588)); +#10008 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 50.230158215773)); +#10009 = CARTESIAN_POINT('',(118.91705566718,1.602080989573E-09, + 50.485480481398)); +#10010 = CARTESIAN_POINT('',(119.25266601875,1.602080989573E-09, + 50.485480481398)); +#10011 = CARTESIAN_POINT('',(119.42677734687,1.602080989573E-09, + 50.485480481398)); +#10012 = CARTESIAN_POINT('',(119.571357425,1.602080989573E-09, + 50.430109387648)); +#10013 = CARTESIAN_POINT('',(119.74546603379,1.602080989573E-09, + 50.327982071905)); +#10014 = CARTESIAN_POINT('',(119.74547146846,1.602080989573E-09, + 50.327978884078)); +#10015 = CARTESIAN_POINT('',(124.07948459267,1.602080989573E-09, + 47.778450829261)); +#10016 = CARTESIAN_POINT('',(124.07948996833,1.602080989573E-09, + 47.778447543333)); +#10017 = CARTESIAN_POINT('',(124.30896972968,1.602074050679E-09, + 47.638175793898)); +#10018 = CARTESIAN_POINT('',(124.44062988593,1.602074050679E-09, + 47.485597668898)); +#10019 = CARTESIAN_POINT('',(124.49169518076,1.602080989573E-09, + 47.3071736395)); +#10020 = ORIENTED_EDGE('',*,*,#10021,.T.); +#10021 = EDGE_CURVE('',#9999,#9404,#10022,.T.); +#10022 = LINE('',#10023,#10024); +#10023 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878 + )); +#10024 = VECTOR('',#10025,1.); +#10025 = DIRECTION('',(0.,1.,0.)); +#10026 = ORIENTED_EDGE('',*,*,#9401,.F.); +#10027 = ORIENTED_EDGE('',*,*,#10028,.T.); +#10028 = EDGE_CURVE('',#9402,#10001,#10029,.T.); +#10029 = LINE('',#10030,#10031); +#10030 = CARTESIAN_POINT('',(124.49169518076,1.000000001602, + 47.3071736395)); +#10031 = VECTOR('',#10032,1.); +#10032 = DIRECTION('',(0.,-1.,0.)); +#10033 = SURFACE_OF_LINEAR_EXTRUSION('',#10034,#10051); +#10034 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10035,#10036,#10037,#10038, + #10039,#10040,#10041,#10042,#10043,#10044,#10045,#10046,#10047, + #10048,#10049,#10050),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0., + 0.417901796289,0.504349371153,0.546290925385,0.948683255757,1.), + .UNSPECIFIED.); +#10035 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878 + )); +#10036 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 44.528169178588)); +#10037 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 49.750272252958)); +#10038 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 49.750278553588)); +#10039 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 50.230158215773)); +#10040 = CARTESIAN_POINT('',(118.91705566718,1.000000001602, + 50.485480481398)); +#10041 = CARTESIAN_POINT('',(119.25266601875,1.000000001602, + 50.485480481398)); +#10042 = CARTESIAN_POINT('',(119.42677734687,1.000000001602, + 50.485480481398)); +#10043 = CARTESIAN_POINT('',(119.571357425,1.000000001602, + 50.430109387648)); +#10044 = CARTESIAN_POINT('',(119.74546603379,1.000000001602, + 50.327982071905)); +#10045 = CARTESIAN_POINT('',(119.74547146846,1.000000001602, + 50.327978884078)); +#10046 = CARTESIAN_POINT('',(124.07948459267,1.000000001602, + 47.778450829261)); +#10047 = CARTESIAN_POINT('',(124.07948996833,1.000000001602, + 47.778447543333)); +#10048 = CARTESIAN_POINT('',(124.30896972968,1.000000001602, + 47.638175793898)); +#10049 = CARTESIAN_POINT('',(124.44062988593,1.000000001602, + 47.485597668898)); +#10050 = CARTESIAN_POINT('',(124.49169518076,1.000000001602, + 47.3071736395)); +#10051 = VECTOR('',#10052,1.); +#10052 = DIRECTION('',(0.,-1.,0.)); +#10053 = ADVANCED_FACE('',(#10054),#10106,.T.); +#10054 = FACE_BOUND('',#10055,.T.); +#10055 = EDGE_LOOP('',(#10056,#10103,#10104,#10105)); +#10056 = ORIENTED_EDGE('',*,*,#10057,.F.); +#10057 = EDGE_CURVE('',#10001,#9999,#10058,.T.); +#10058 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10059,#10060,#10061,#10062, + #10063,#10064,#10065,#10066,#10067,#10068,#10069,#10070,#10071, + #10072,#10073,#10074,#10075,#10076,#10077,#10078,#10079,#10080, + #10081,#10082,#10083,#10084,#10085,#10086,#10087,#10088,#10089, + #10090,#10091,#10092,#10093,#10094,#10095,#10096,#10097,#10098, + #10099,#10100,#10101,#10102),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,3,3,3, + 3,3,3,3,1,3,3,4),(0.,9.032612890054E-02,0.13015675767,0.149544493479 + ,0.3354406132,0.365385630939,0.395415746677,0.581311866251, + 0.600699602061,0.640496306105,0.730981323737,0.754812153774, + 0.801288634384,0.940718076215,0.960095143506,1.),.UNSPECIFIED.); +#10059 = CARTESIAN_POINT('',(124.49169518076,1.602080989573E-09, + 47.3071736395)); +#10060 = CARTESIAN_POINT('',(124.49169430918,1.602087928466E-09, + 47.307182833424)); +#10061 = CARTESIAN_POINT('',(124.49169433906,1.602087928466E-09, + 49.750272252958)); +#10062 = CARTESIAN_POINT('',(124.49169433906,1.602080989573E-09, + 49.750278553588)); +#10063 = CARTESIAN_POINT('',(124.49169433906,1.602080989573E-09, + 50.230158215773)); +#10064 = CARTESIAN_POINT('',(124.77193359687,1.602080989573E-09, + 50.485480481398)); +#10065 = CARTESIAN_POINT('',(125.10754394843,1.602080989573E-09, + 50.485480481398)); +#10066 = CARTESIAN_POINT('',(125.28196289375,1.602087928466E-09, + 50.485480481398)); +#10067 = CARTESIAN_POINT('',(125.42623535468,1.602087928466E-09, + 50.430109387648)); +#10068 = CARTESIAN_POINT('',(125.60065157817,1.602087928466E-09, + 50.327982067635)); +#10069 = CARTESIAN_POINT('',(125.60065701528,1.602087928466E-09, + 50.327978883998)); +#10070 = CARTESIAN_POINT('',(129.93436252222,1.602087928466E-09, + 47.778450828811)); +#10071 = CARTESIAN_POINT('',(129.93436794581,1.602087928466E-09, + 47.778447622199)); +#10072 = CARTESIAN_POINT('',(130.23613769843,1.602080989573E-09, + 47.600031262648)); +#10073 = CARTESIAN_POINT('',(130.36779785468,1.602080989573E-09, + 47.387775403273)); +#10074 = CARTESIAN_POINT('',(130.36779785468,1.602080989573E-09, + 47.141066418898)); +#10075 = CARTESIAN_POINT('',(130.36779785468,1.602080989573E-09, + 46.894972668898)); +#10076 = CARTESIAN_POINT('',(130.23613769843,1.602080989573E-09, + 46.682716809523)); +#10077 = CARTESIAN_POINT('',(129.93436791163,1.602080989573E-09, + 46.499993865762)); +#10078 = CARTESIAN_POINT('',(129.93436252245,1.602080989573E-09, + 46.499990602589)); +#10079 = CARTESIAN_POINT('',(125.60065701528,1.602080989573E-09, + 43.950462547549)); +#10080 = CARTESIAN_POINT('',(125.60065157817,1.602080989573E-09, + 43.950459363911)); +#10081 = CARTESIAN_POINT('',(125.42623535468,1.602080989573E-09, + 43.848332043898)); +#10082 = CARTESIAN_POINT('',(125.28196289375,1.602080989573E-09, + 43.792960950148)); +#10083 = CARTESIAN_POINT('',(125.10754394843,1.602074050679E-09, + 43.792960950148)); +#10084 = CARTESIAN_POINT('',(124.77193359687,1.602074050679E-09, + 43.792960950148)); +#10085 = CARTESIAN_POINT('',(124.49169433906,1.602074050679E-09, + 44.052589856398)); +#10086 = CARTESIAN_POINT('',(124.49169433906,1.602080989573E-09, + 44.528162877958)); +#10087 = CARTESIAN_POINT('',(124.49169433906,1.602080989573E-09, + 44.528169178588)); +#10088 = CARTESIAN_POINT('',(124.49169519749,1.602080989573E-09, + 46.975574430324)); +#10089 = CARTESIAN_POINT('',(124.49169350563,1.602080989573E-09, + 46.975565351475)); +#10090 = CARTESIAN_POINT('',(124.44062988593,1.602074050679E-09, + 46.797150403273)); +#10091 = CARTESIAN_POINT('',(124.30896972968,1.602074050679E-09, + 46.639650403273)); +#10092 = CARTESIAN_POINT('',(124.07823594441,1.602080989573E-09, + 46.502097409636)); +#10093 = CARTESIAN_POINT('',(123.71832131275,1.602087928466E-09, + 46.287532667939)); +#10094 = CARTESIAN_POINT('',(122.27364666585,1.602087928466E-09, + 45.437687828558)); +#10095 = CARTESIAN_POINT('',(120.82897201896,1.602080989573E-09, + 44.587842989177)); +#10096 = CARTESIAN_POINT('',(119.74535540298,1.602080989573E-09, + 43.950647498726)); +#10097 = CARTESIAN_POINT('',(119.571357425,1.602080989573E-09, + 43.848332043898)); +#10098 = CARTESIAN_POINT('',(119.42677734687,1.602080989573E-09, + 43.792960950148)); +#10099 = CARTESIAN_POINT('',(119.25266601875,1.602080989573E-09, + 43.792960950148)); +#10100 = CARTESIAN_POINT('',(118.91705566718,1.602080989573E-09, + 43.792960950148)); +#10101 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 44.052589856398)); +#10102 = CARTESIAN_POINT('',(118.63220215156,1.602080989573E-09, + 44.528162878)); +#10103 = ORIENTED_EDGE('',*,*,#10028,.F.); +#10104 = ORIENTED_EDGE('',*,*,#9424,.F.); +#10105 = ORIENTED_EDGE('',*,*,#10021,.F.); +#10106 = SURFACE_OF_LINEAR_EXTRUSION('',#10107,#10152); +#10107 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10108,#10109,#10110,#10111, + #10112,#10113,#10114,#10115,#10116,#10117,#10118,#10119,#10120, + #10121,#10122,#10123,#10124,#10125,#10126,#10127,#10128,#10129, + #10130,#10131,#10132,#10133,#10134,#10135,#10136,#10137,#10138, + #10139,#10140,#10141,#10142,#10143,#10144,#10145,#10146,#10147, + #10148,#10149,#10150,#10151),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,3,3,3, + 3,3,3,3,1,3,3,4),(0.,9.032612890054E-02,0.13015675767,0.149544493479 + ,0.3354406132,0.365385630939,0.395415746677,0.581311866251, + 0.600699602061,0.640496306105,0.730981323737,0.754812153774, + 0.801288634384,0.940718076215,0.960095143506,1.),.UNSPECIFIED.); +#10108 = CARTESIAN_POINT('',(124.49169518076,1.000000001602, + 47.3071736395)); +#10109 = CARTESIAN_POINT('',(124.49169430918,1.000000001602, + 47.307182833424)); +#10110 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 49.750272252958)); +#10111 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 49.750278553588)); +#10112 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 50.230158215773)); +#10113 = CARTESIAN_POINT('',(124.77193359687,1.000000001602, + 50.485480481398)); +#10114 = CARTESIAN_POINT('',(125.10754394843,1.000000001602, + 50.485480481398)); +#10115 = CARTESIAN_POINT('',(125.28196289375,1.000000001602, + 50.485480481398)); +#10116 = CARTESIAN_POINT('',(125.42623535468,1.000000001602, + 50.430109387648)); +#10117 = CARTESIAN_POINT('',(125.60065157817,1.000000001602, + 50.327982067635)); +#10118 = CARTESIAN_POINT('',(125.60065701528,1.000000001602, + 50.327978883998)); +#10119 = CARTESIAN_POINT('',(129.93436252222,1.000000001602, + 47.778450828811)); +#10120 = CARTESIAN_POINT('',(129.93436794581,1.000000001602, + 47.778447622199)); +#10121 = CARTESIAN_POINT('',(130.23613769843,1.000000001602, + 47.600031262648)); +#10122 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 47.387775403273)); +#10123 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 47.141066418898)); +#10124 = CARTESIAN_POINT('',(130.36779785468,1.000000001602, + 46.894972668898)); +#10125 = CARTESIAN_POINT('',(130.23613769843,1.000000001602, + 46.682716809523)); +#10126 = CARTESIAN_POINT('',(129.93436791163,1.000000001602, + 46.499993865762)); +#10127 = CARTESIAN_POINT('',(129.93436252245,1.000000001602, + 46.499990602589)); +#10128 = CARTESIAN_POINT('',(125.60065701528,1.000000001602, + 43.950462547549)); +#10129 = CARTESIAN_POINT('',(125.60065157817,1.000000001602, + 43.950459363911)); +#10130 = CARTESIAN_POINT('',(125.42623535468,1.000000001602, + 43.848332043898)); +#10131 = CARTESIAN_POINT('',(125.28196289375,1.000000001602, + 43.792960950148)); +#10132 = CARTESIAN_POINT('',(125.10754394843,1.000000001602, + 43.792960950148)); +#10133 = CARTESIAN_POINT('',(124.77193359687,1.000000001602, + 43.792960950148)); +#10134 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.052589856398)); +#10135 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.528162877958)); +#10136 = CARTESIAN_POINT('',(124.49169433906,1.000000001602, + 44.528169178588)); +#10137 = CARTESIAN_POINT('',(124.49169519749,1.000000001602, + 46.975574430324)); +#10138 = CARTESIAN_POINT('',(124.49169350563,1.000000001602, + 46.975565351475)); +#10139 = CARTESIAN_POINT('',(124.44062988593,1.000000001602, + 46.797150403273)); +#10140 = CARTESIAN_POINT('',(124.30896972968,1.000000001602, + 46.639650403273)); +#10141 = CARTESIAN_POINT('',(124.07823594441,1.000000001602, + 46.502097409636)); +#10142 = CARTESIAN_POINT('',(123.71832131275,1.000000001602, + 46.287532667939)); +#10143 = CARTESIAN_POINT('',(122.27364666585,1.000000001602, + 45.437687828558)); +#10144 = CARTESIAN_POINT('',(120.82897201896,1.000000001602, + 44.587842989177)); +#10145 = CARTESIAN_POINT('',(119.74535540298,1.000000001602, + 43.950647498726)); +#10146 = CARTESIAN_POINT('',(119.571357425,1.000000001602, + 43.848332043898)); +#10147 = CARTESIAN_POINT('',(119.42677734687,1.000000001602, + 43.792960950148)); +#10148 = CARTESIAN_POINT('',(119.25266601875,1.000000001602, + 43.792960950148)); +#10149 = CARTESIAN_POINT('',(118.91705566718,1.000000001602, + 43.792960950148)); +#10150 = CARTESIAN_POINT('',(118.63220215156,1.000000001602, + 44.052589856398)); +#10151 = CARTESIAN_POINT('',(118.63220215156,1.000000001602,44.528162878 + )); +#10152 = VECTOR('',#10153,1.); +#10153 = DIRECTION('',(0.,-1.,0.)); +#10154 = ADVANCED_FACE('',(#10155),#10193,.T.); +#10155 = FACE_BOUND('',#10156,.T.); +#10156 = EDGE_LOOP('',(#10157,#10180,#10186,#10187)); +#10157 = ORIENTED_EDGE('',*,*,#10158,.F.); +#10158 = EDGE_CURVE('',#10159,#10161,#10163,.T.); +#10159 = VERTEX_POINT('',#10160); +#10160 = CARTESIAN_POINT('',(118.10169609465,0.,104.53446677592)); +#10161 = VERTEX_POINT('',#10162); +#10162 = CARTESIAN_POINT('',(123.97777612798,1.602080989573E-09, + 107.1413435826)); +#10163 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10164,#10165,#10166,#10167, + #10168,#10169,#10170,#10171,#10172,#10173,#10174,#10175,#10176, + #10177,#10178,#10179),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.2, + 0.4,0.6,0.8,1.),.PIECEWISE_BEZIER_KNOTS.); +#10164 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 104.53446677592)); +#10165 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 104.5344730765)); +#10166 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 109.75245981126)); +#10167 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 109.75246611189)); +#10168 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 110.22798388912)); +#10169 = CARTESIAN_POINT('',(118.3819137841,1.602080989573E-09, + 110.48697296574)); +#10170 = CARTESIAN_POINT('',(118.72157158949,1.602080989573E-09, + 110.48697296574)); +#10171 = CARTESIAN_POINT('',(118.89564621476,1.602080989573E-09, + 110.48697296574)); +#10172 = CARTESIAN_POINT('',(119.03575505948,1.602080989573E-09, + 110.43177857236)); +#10173 = CARTESIAN_POINT('',(119.214072652,1.602074050679E-09, + 110.32988275832)); +#10174 = CARTESIAN_POINT('',(119.21407812201,1.602074050679E-09, + 110.3298796326)); +#10175 = CARTESIAN_POINT('',(123.54046398891,1.602074050679E-09, + 107.78244928875)); +#10176 = CARTESIAN_POINT('',(123.54046939817,1.602080989573E-09, + 107.78244605822)); +#10177 = CARTESIAN_POINT('',(123.84615872839,1.602080989573E-09, + 107.59988161988)); +#10178 = CARTESIAN_POINT('',(123.97777612798,1.602080989573E-09, + 107.39184121407)); +#10179 = CARTESIAN_POINT('',(123.97777612798,1.602080989573E-09, + 107.1413435826)); +#10180 = ORIENTED_EDGE('',*,*,#10181,.T.); +#10181 = EDGE_CURVE('',#10159,#9482,#10182,.T.); +#10182 = LINE('',#10183,#10184); +#10183 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#10184 = VECTOR('',#10185,1.); +#10185 = DIRECTION('',(0.,1.,0.)); +#10186 = ORIENTED_EDGE('',*,*,#9479,.F.); +#10187 = ORIENTED_EDGE('',*,*,#10188,.T.); +#10188 = EDGE_CURVE('',#9480,#10161,#10189,.T.); +#10189 = LINE('',#10190,#10191); +#10190 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#10191 = VECTOR('',#10192,1.); +#10192 = DIRECTION('',(0.,-1.,0.)); +#10193 = SURFACE_OF_LINEAR_EXTRUSION('',#10194,#10211); +#10194 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10195,#10196,#10197,#10198, + #10199,#10200,#10201,#10202,#10203,#10204,#10205,#10206,#10207, + #10208,#10209,#10210),.UNSPECIFIED.,.F.,.F.,(4,3,3,3,3,4),(0.,0.2, + 0.4,0.6,0.8,1.),.PIECEWISE_BEZIER_KNOTS.); +#10195 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#10196 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.5344730765)); +#10197 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 109.75245981126)); +#10198 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 109.75246611189)); +#10199 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 110.22798388912)); +#10200 = CARTESIAN_POINT('',(118.3819137841,1.000000001602, + 110.48697296574)); +#10201 = CARTESIAN_POINT('',(118.72157158949,1.000000001602, + 110.48697296574)); +#10202 = CARTESIAN_POINT('',(118.89564621476,1.000000001602, + 110.48697296574)); +#10203 = CARTESIAN_POINT('',(119.03575505948,1.000000001602, + 110.43177857236)); +#10204 = CARTESIAN_POINT('',(119.214072652,1.000000001602, + 110.32988275832)); +#10205 = CARTESIAN_POINT('',(119.21407812201,1.000000001602, + 110.3298796326)); +#10206 = CARTESIAN_POINT('',(123.54046398891,1.000000001602, + 107.78244928875)); +#10207 = CARTESIAN_POINT('',(123.54046939817,1.000000001602, + 107.78244605822)); +#10208 = CARTESIAN_POINT('',(123.84615872839,1.000000001602, + 107.59988161988)); +#10209 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.39184121407)); +#10210 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#10211 = VECTOR('',#10212,1.); +#10212 = DIRECTION('',(0.,-1.,0.)); +#10213 = ADVANCED_FACE('',(#10214),#10235,.T.); +#10214 = FACE_BOUND('',#10215,.T.); +#10215 = EDGE_LOOP('',(#10216,#10232,#10233,#10234)); +#10216 = ORIENTED_EDGE('',*,*,#10217,.F.); +#10217 = EDGE_CURVE('',#10161,#10159,#10218,.T.); +#10218 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10219,#10220,#10221,#10222, + #10223,#10224,#10225,#10226,#10227,#10228,#10229,#10230,#10231), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.), + .PIECEWISE_BEZIER_KNOTS.); +#10219 = CARTESIAN_POINT('',(123.97777612798,1.602080989573E-09, + 107.1413435826)); +#10220 = CARTESIAN_POINT('',(123.97777612798,1.602080989573E-09, + 106.89509167368)); +#10221 = CARTESIAN_POINT('',(123.84191300582,1.602080989573E-09, + 106.68280554531)); +#10222 = CARTESIAN_POINT('',(123.54046941171,1.602080989573E-09, + 106.50448680692)); +#10223 = CARTESIAN_POINT('',(123.54046398886,1.602080989573E-09, + 106.50448359904)); +#10224 = CARTESIAN_POINT('',(119.21407812199,1.602080989573E-09, + 103.95705325544)); +#10225 = CARTESIAN_POINT('',(119.21407268448,1.602080989573E-09, + 103.95705007251)); +#10226 = CARTESIAN_POINT('',(119.04000078205,1.602080989573E-09, + 103.8551543154)); +#10227 = CARTESIAN_POINT('',(118.89564621476,1.602080989573E-09, + 103.79995992202)); +#10228 = CARTESIAN_POINT('',(118.72157158949,1.602080989573E-09, + 103.79995992202)); +#10229 = CARTESIAN_POINT('',(118.3819137841,1.602080989573E-09, + 103.79995992202)); +#10230 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 104.05470327607)); +#10231 = CARTESIAN_POINT('',(118.10169609465,1.602080989573E-09, + 104.53446677592)); +#10232 = ORIENTED_EDGE('',*,*,#10188,.F.); +#10233 = ORIENTED_EDGE('',*,*,#9502,.F.); +#10234 = ORIENTED_EDGE('',*,*,#10181,.F.); +#10235 = SURFACE_OF_LINEAR_EXTRUSION('',#10236,#10250); +#10236 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#10237,#10238,#10239,#10240, + #10241,#10242,#10243,#10244,#10245,#10246,#10247,#10248,#10249), + .UNSPECIFIED.,.F.,.F.,(4,3,3,3,4),(0.,0.25,0.5,0.75,1.), + .PIECEWISE_BEZIER_KNOTS.); +#10237 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 107.1413435826)); +#10238 = CARTESIAN_POINT('',(123.97777612798,1.000000001602, + 106.89509167368)); +#10239 = CARTESIAN_POINT('',(123.84191300582,1.000000001602, + 106.68280554531)); +#10240 = CARTESIAN_POINT('',(123.54046941171,1.000000001602, + 106.50448680692)); +#10241 = CARTESIAN_POINT('',(123.54046398886,1.000000001602, + 106.50448359904)); +#10242 = CARTESIAN_POINT('',(119.21407812199,1.000000001602, + 103.95705325544)); +#10243 = CARTESIAN_POINT('',(119.21407268448,1.000000001602, + 103.95705007251)); +#10244 = CARTESIAN_POINT('',(119.04000078205,1.000000001602, + 103.8551543154)); +#10245 = CARTESIAN_POINT('',(118.89564621476,1.000000001602, + 103.79995992202)); +#10246 = CARTESIAN_POINT('',(118.72157158949,1.000000001602, + 103.79995992202)); +#10247 = CARTESIAN_POINT('',(118.3819137841,1.000000001602, + 103.79995992202)); +#10248 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.05470327607)); +#10249 = CARTESIAN_POINT('',(118.10169609465,1.000000001602, + 104.53446677592)); +#10250 = VECTOR('',#10251,1.); +#10251 = DIRECTION('',(0.,-1.,0.)); +#10252 = ADVANCED_FACE('',(#10253),#10272,.F.); +#10253 = FACE_BOUND('',#10254,.F.); +#10254 = EDGE_LOOP('',(#10255,#10256,#10257,#10264,#10271)); +#10255 = ORIENTED_EDGE('',*,*,#9548,.F.); +#10256 = ORIENTED_EDGE('',*,*,#9539,.F.); +#10257 = ORIENTED_EDGE('',*,*,#10258,.T.); +#10258 = EDGE_CURVE('',#9540,#10259,#10261,.T.); +#10259 = VERTEX_POINT('',#10260); +#10260 = CARTESIAN_POINT('',(62.5,0.,29.)); +#10261 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10262,#10263),.UNSPECIFIED., + .F.,.F.,(2,2),(-2.593335800642,8.660254037844), + .PIECEWISE_BEZIER_KNOTS.); +#10262 = CARTESIAN_POINT('',(62.5,5.626794921931,38.745894682348)); +#10263 = CARTESIAN_POINT('',(62.5,-8.974486931379E-09,29.000000005181)); +#10264 = ORIENTED_EDGE('',*,*,#10265,.F.); +#10265 = EDGE_CURVE('',#10259,#10259,#10266,.T.); +#10266 = CIRCLE('',#10267,46.); +#10267 = AXIS2_PLACEMENT_3D('',#10268,#10269,#10270); +#10268 = CARTESIAN_POINT('',(62.5,0.,75.)); +#10269 = DIRECTION('',(0.,-1.,0.)); +#10270 = DIRECTION('',(0.,0.,-1.)); +#10271 = ORIENTED_EDGE('',*,*,#10258,.F.); +#10272 = CONICAL_SURFACE('',#10273,38.5,1.04719755); +#10273 = AXIS2_PLACEMENT_3D('',#10274,#10275,#10276); +#10274 = CARTESIAN_POINT('',(62.5,4.330127018922,75.)); +#10275 = DIRECTION('',(0.,-1.,0.)); +#10276 = DIRECTION('',(0.,0.,-1.)); +#10277 = ADVANCED_FACE('',(#10278),#10306,.T.); +#10278 = FACE_BOUND('',#10279,.T.); +#10279 = EDGE_LOOP('',(#10280,#10289,#10290,#10299)); +#10280 = ORIENTED_EDGE('',*,*,#10281,.F.); +#10281 = EDGE_CURVE('',#6229,#10282,#10284,.T.); +#10282 = VERTEX_POINT('',#10283); +#10283 = CARTESIAN_POINT('',(10.,0.,24.278441447094)); +#10284 = CIRCLE('',#10285,10.); +#10285 = AXIS2_PLACEMENT_3D('',#10286,#10287,#10288); +#10286 = CARTESIAN_POINT('',(10.,10.,24.278441447094)); +#10287 = DIRECTION('',(0.,0.,1.)); +#10288 = DIRECTION('',(1.,0.,-0.)); +#10289 = ORIENTED_EDGE('',*,*,#8663,.F.); +#10290 = ORIENTED_EDGE('',*,*,#10291,.F.); +#10291 = EDGE_CURVE('',#10292,#8597,#10294,.T.); +#10292 = VERTEX_POINT('',#10293); +#10293 = CARTESIAN_POINT('',(20.,0.,13.763819204712)); +#10294 = CIRCLE('',#10295,10.); +#10295 = AXIS2_PLACEMENT_3D('',#10296,#10297,#10298); +#10296 = CARTESIAN_POINT('',(20.,10.,13.763819204712)); +#10297 = DIRECTION('',(1.,0.,3.647992408978E-16)); +#10298 = DIRECTION('',(3.647992408978E-16,0.,-1.)); +#10299 = ORIENTED_EDGE('',*,*,#10300,.F.); +#10300 = EDGE_CURVE('',#10282,#10292,#10301,.T.); +#10301 = ELLIPSE('',#10302,10.514622242383,10.); +#10302 = AXIS2_PLACEMENT_3D('',#10303,#10304,#10305); +#10303 = CARTESIAN_POINT('',(20.,1.734723475977E-15,24.278441447094)); +#10304 = DIRECTION('',(0.,-1.,0.)); +#10305 = DIRECTION('',(0.,0.,-1.)); +#10306 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#10307,#10308,#10309) + ,(#10310,#10311,#10312) + ,(#10313,#10314,#10315) + ,(#10316,#10317,#10318) + ,(#10319,#10320,#10321) + ,(#10322,#10323,#10324) + ,(#10325,#10326,#10327) + ,(#10328,#10329,#10330) + ,(#10331,#10332,#10333) + ,(#10334,#10335,#10336) + ,(#10337,#10338,#10339) + ,(#10340,#10341,#10342) + ,(#10343,#10344,#10345) + ,(#10346,#10347,#10348) + ,(#10349,#10350,#10351) + ,(#10352,#10353,#10354) + ,(#10355,#10356,#10357) + ,(#10358,#10359,#10360) + ,(#10361,#10362,#10363) + ,(#10364,#10365,#10366) + ,(#10367,#10368,#10369) + ,(#10370,#10371,#10372) + ,(#10373,#10374,#10375) + ,(#10376,#10377,#10378) + ,(#10379,#10380,#10381) + ,(#10382,#10383,#10384) + ,(#10385,#10386,#10387) + ,(#10388,#10389,#10390) + ,(#10391,#10392,#10393) + ,(#10394,#10395,#10396) + ,(#10397,#10398,#10399) + ,(#10400,#10401,#10402) + ,(#10403,#10404,#10405) + ,(#10406,#10407,#10408 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.703531481009,1.) + ,(1.,0.6999289292,1.) + ,(1.,0.692702420366,1.) + ,(1.,0.689078440099,1.) + ,(1.,0.681843713095,1.) + ,(1.,0.678232974111,1.) + ,(1.,0.67106099054,1.) + ,(1.,0.667499756319,1.) + ,(1.,0.660464336519,1.) + ,(1.,0.656990164321,1.) + ,(1.,0.650167360408,1.) + ,(1.,0.646818745411,1.) + ,(1.,0.640286033873,1.) + ,(1.,0.63710195755,1.) + ,(1.,0.630937232756,1.) + ,(1.,0.627956607929,1.) + ,(1.,0.622236967303,1.) + ,(1.,0.619497978177,1.) + ,(1.,0.614298304101,1.) + ,(1.,0.611837648061,1.) + ,(1.,0.607229010897,1.) + ,(1.,0.605081059709,1.) + ,(1.,0.601128989674,1.) + ,(1.,0.599324900181,1.) + ,(1.,0.596087600756,1.) + ,(1.,0.594654417706,1.) + ,(1.,0.592181016258,1.) + ,(1.,0.591140820289,1.) + ,(1.,0.589469767943,1.) + ,(1.,0.588838927714,1.) + ,(1.,0.58799666566,1.) + ,(1.,0.587785146445,1.) +,(1.,0.587785252292,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#10307 = CARTESIAN_POINT('',(0.,10.,24.278441447094)); +#10308 = CARTESIAN_POINT('',(0.,1.734723475977E-15,24.278441447094)); +#10309 = CARTESIAN_POINT('',(10.,1.734723475977E-15,24.278441447094)); +#10310 = CARTESIAN_POINT('',(-2.273609044297E-16,10.101125646633, + 23.623118257035)); +#10311 = CARTESIAN_POINT('',(-0.101638217022,1.734723475977E-15, + 23.619796659294)); +#10312 = CARTESIAN_POINT('',(9.999999999999,1.734723475977E-15, + 23.934350994872)); +#10313 = CARTESIAN_POINT('',(3.215339832258E-02,10.202250993521, + 22.967797009446)); +#10314 = CARTESIAN_POINT('',(-0.173399952651,2.98508480744E-13, + 22.954862899524)); +#10315 = CARTESIAN_POINT('',(10.016076699161,1.734723475977E-15, + 23.590261562581)); +#10316 = CARTESIAN_POINT('',(0.16045753479,10.403528248516, + 21.663462676675)); +#10317 = CARTESIAN_POINT('',(-0.256110985676,-2.981350792447E-13, + 21.611189820518)); +#10318 = CARTESIAN_POINT('',(10.080228767395,1.734723475977E-15, + 22.90539492392)); +#10319 = CARTESIAN_POINT('',(0.256608074955,10.503679774194, + 21.014452069778)); +#10320 = CARTESIAN_POINT('',(-0.266426961058,-5.90953179116E-13, + 20.932256113121)); +#10321 = CARTESIAN_POINT('',(10.128304037478,1.734723475977E-15, + 22.564619018821)); +#10322 = CARTESIAN_POINT('',(0.511980708916,10.702044724627, + 19.728990305731)); +#10323 = CARTESIAN_POINT('',(-0.223178395732,6.007113621686E-13, + 19.565911243159)); +#10324 = CARTESIAN_POINT('',(10.255990354458,1.734723475977E-15, + 21.889661797079)); +#10325 = CARTESIAN_POINT('',(0.671202408663,10.800257843301, + 19.092541132091)); +#10326 = CARTESIAN_POINT('',(-0.168933547796,-5.913517477151E-13, + 18.878436777248)); +#10327 = CARTESIAN_POINT('',(10.335601204331,1.734723475977E-15, + 21.555481521916)); +#10328 = CARTESIAN_POINT('',(1.051184162049,10.993800126264, + 17.838331636263)); +#10329 = CARTESIAN_POINT('',(6.266637888114E-03,5.976718364687E-13, + 17.501008167859)); +#10330 = CARTESIAN_POINT('',(10.525592081024,1.734723475977E-15, + 20.896933924108)); +#10331 = CARTESIAN_POINT('',(1.271943629372,11.089128991914, + 17.220573249337)); +#10332 = CARTESIAN_POINT('',(0.127925894032,2.965294367814E-13, + 16.811129875)); +#10333 = CARTESIAN_POINT('',(10.635971814686,1.734723475977E-15, + 20.57256761761)); +#10334 = CARTESIAN_POINT('',(1.772875070176,11.275984689417, + 16.009694744797)); +#10335 = CARTESIAN_POINT('',(0.440414846708,-2.962002117134E-13, + 15.43561360619)); +#10336 = CARTESIAN_POINT('',(10.886437535088,1.734723475977E-15, + 19.936771817104)); +#10337 = CARTESIAN_POINT('',(2.053046270729,11.367511232954, + 15.41657649555)); +#10338 = CARTESIAN_POINT('',(0.631944466783,5.892027819796E-13, + 14.75020370668)); +#10339 = CARTESIAN_POINT('',(11.026523135364,1.734723475977E-15, + 19.625343304119)); +#10340 = CARTESIAN_POINT('',(2.670103155337,11.545880822488, + 14.260690404232)); +#10341 = CARTESIAN_POINT('',(1.086094466099,-5.918981775162E-13, + 13.391115487148)); +#10342 = CARTESIAN_POINT('',(11.335051577668,1.734723475977E-15, + 19.018422362036)); +#10343 = CARTESIAN_POINT('',(3.006987887304,11.632723593265, + 13.697924345635)); +#10344 = CARTESIAN_POINT('',(1.349377688682,3.469446951954E-15, + 12.717825387543)); +#10345 = CARTESIAN_POINT('',(11.503493943652,1.734723475977E-15, + 18.722930869386)); +#10346 = CARTESIAN_POINT('',(3.734227620594,11.800889278173, + 12.608162482469)); +#10347 = CARTESIAN_POINT('',(1.94820562212,3.469446951954E-15, + 11.391252570985)); +#10348 = CARTESIAN_POINT('',(11.867113810297,1.734723475977E-15, + 18.150729766175)); +#10349 = CARTESIAN_POINT('',(4.124581499851,11.882211932836, + 12.081168359307)); +#10350 = CARTESIAN_POINT('',(2.284338188352,2.947131459008E-13, + 10.738518760981)); +#10351 = CARTESIAN_POINT('',(12.062290749926,1.734723475977E-15, + 17.874021038469)); +#10352 = CARTESIAN_POINT('',(4.955000365639,12.038554185641, + 11.068025726758)); +#10353 = CARTESIAN_POINT('',(3.029041253298,-2.906199189807E-13, + 9.462078086605)); +#10354 = CARTESIAN_POINT('',(12.47750018282,1.734723475977E-15, + 17.342050383549)); +#10355 = CARTESIAN_POINT('',(5.395064070944,12.113573542571, + 10.581878780521)); +#10356 = CARTESIAN_POINT('',(3.438083432373,5.815593563124E-13, + 8.839071619071)); +#10357 = CARTESIAN_POINT('',(12.697532035472,1.734723475977E-15, + 17.086789277099)); +#10358 = CARTESIAN_POINT('',(6.320664681595,12.256586701917, + 9.655112495982)); +#10359 = CARTESIAN_POINT('',(4.327521764979,-5.834196931891E-13, + 7.631735317771)); +#10360 = CARTESIAN_POINT('',(13.160332340797,1.734723475977E-15, + 16.600172238683)); +#10361 = CARTESIAN_POINT('',(6.806200158904,12.324580283693, + 9.214494587518)); +#10362 = CARTESIAN_POINT('',(4.808231596814,0.,7.048236282233)); +#10363 = CARTESIAN_POINT('',(13.403100079452,0.,16.368817057483)); +#10364 = CARTESIAN_POINT('',(7.81806847455,12.452887054679, + 8.383029916928)); +#10365 = CARTESIAN_POINT('',(5.838395685656,0.,5.929992119806)); +#10366 = CARTESIAN_POINT('',(13.909034237275,0.,15.932240023661)); +#10367 = CARTESIAN_POINT('',(8.3443997518,12.513200045939,7.992184437567 + )); +#10368 = CARTESIAN_POINT('',(6.387966955365,3.469446951954E-15, + 5.39617378362)); +#10369 = CARTESIAN_POINT('',(14.1721998759,1.734723475977E-15, + 15.727018844581)); +#10370 = CARTESIAN_POINT('',(9.432790927416,12.625564764218, + 7.264028840224)); +#10371 = CARTESIAN_POINT('',(7.551485790317,3.469446951954E-15, + 4.387495530075)); +#10372 = CARTESIAN_POINT('',(14.716395463708,1.734723475977E-15, + 15.344686290844)); +#10373 = CARTESIAN_POINT('',(9.994849146687,12.677616317886, + 6.926719845592)); +#10374 = CARTESIAN_POINT('',(8.165322985805,2.879505815948E-13, + 3.91361057919)); +#10375 = CARTESIAN_POINT('',(14.997424573343,1.734723475977E-15, + 15.167575506025)); +#10376 = CARTESIAN_POINT('',(11.149281380273,12.7729568498, + 6.308885857947)); +#10377 = CARTESIAN_POINT('',(9.451084001003,-2.863628358014E-13, + 3.034735740253)); +#10378 = CARTESIAN_POINT('',(15.574640690137,1.734723475977E-15, + 14.843169503869)); +#10379 = CARTESIAN_POINT('',(11.741653613662,12.81624568096, + 6.028361818058)); +#10380 = CARTESIAN_POINT('',(10.122652534862,3.469446951954E-15, + 2.630709611989)); +#10381 = CARTESIAN_POINT('',(15.870826806831,1.734723475977E-15, + 14.695874786989)); +#10382 = CARTESIAN_POINT('',(12.951009091735,12.893643845064, + 5.526799519148)); +#10383 = CARTESIAN_POINT('',(11.515611375231,3.469446951954E-15, + 1.900750408082)); +#10384 = CARTESIAN_POINT('',(16.475504545867,1.734723475977E-15, + 14.432519543549)); +#10385 = CARTESIAN_POINT('',(13.567990470808,12.927753058607, + 5.305762033862)); +#10386 = CARTESIAN_POINT('',(12.236401938925,1.734723475977E-15, + 1.575703066075)); +#10387 = CARTESIAN_POINT('',(16.783995235404,1.734723475977E-15, + 14.316459423254)); +#10388 = CARTESIAN_POINT('',(14.820622439014,12.986463468276, + 4.925301742805)); +#10389 = CARTESIAN_POINT('',(13.717653721711,1.734723475977E-15, + 1.011650945756)); +#10390 = CARTESIAN_POINT('',(17.410311219507,1.734723475977E-15, + 14.116691193488)); +#10391 = CARTESIAN_POINT('',(15.456271095813,13.011064573829, + 4.765879523939)); +#10392 = CARTESIAN_POINT('',(14.477292459074,1.734723475977E-15, + 0.773385938697)); +#10393 = CARTESIAN_POINT('',(17.728135547906,1.734723475977E-15, + 14.032983392183)); +#10394 = CARTESIAN_POINT('',(16.740116023542,13.050521815719, + 4.510185281314)); +#10395 = CARTESIAN_POINT('',(16.024453209288,1.734723475977E-15, + 0.389102516884)); +#10396 = CARTESIAN_POINT('',(18.370058011771,1.734723475977E-15, + 13.898726053347)); +#10397 = CARTESIAN_POINT('',(17.388310314019,13.065377891189, + 4.413913651988)); +#10398 = CARTESIAN_POINT('',(16.810973612949,2.855189952027E-13, + 0.243616671696)); +#10399 = CARTESIAN_POINT('',(18.69415515701,1.734723475977E-15, + 13.848176722919)); +#10400 = CARTESIAN_POINT('',(18.691004072798,13.085201970493, + 4.285447933126)); +#10401 = CARTESIAN_POINT('',(18.398881586324,-2.824560483851E-13, + 4.892598548637E-02)); +#10402 = CARTESIAN_POINT('',(19.345502036399,1.734723475977E-15, + 13.780723246576)); +#10403 = CARTESIAN_POINT('',(19.345501066514,13.090169943746, + 4.253254041759)); +#10404 = CARTESIAN_POINT('',(19.199146267093,-1.41402192977E-12, + 3.370196328833E-12)); +#10405 = CARTESIAN_POINT('',(19.672750533257,1.734723475977E-15, + 13.763819204712)); +#10406 = CARTESIAN_POINT('',(20.,13.090169943749,4.25325404176)); +#10407 = CARTESIAN_POINT('',(20.,5.20417042793E-15,-5.97996235082E-15)); +#10408 = CARTESIAN_POINT('',(20.,1.734723475977E-15,13.763819204712)); +#10409 = ADVANCED_FACE('',(#10410),#10429,.T.); +#10410 = FACE_BOUND('',#10411,.T.); +#10411 = EDGE_LOOP('',(#10412,#10413,#10421,#10428)); +#10412 = ORIENTED_EDGE('',*,*,#10281,.T.); +#10413 = ORIENTED_EDGE('',*,*,#10414,.F.); +#10414 = EDGE_CURVE('',#10415,#10282,#10417,.T.); +#10415 = VERTEX_POINT('',#10416); +#10416 = CARTESIAN_POINT('',(10.,0.,130.)); +#10417 = LINE('',#10418,#10419); +#10418 = CARTESIAN_POINT('',(10.,0.,0.)); +#10419 = VECTOR('',#10420,1.); +#10420 = DIRECTION('',(0.,0.,-1.)); +#10421 = ORIENTED_EDGE('',*,*,#10422,.F.); +#10422 = EDGE_CURVE('',#6231,#10415,#10423,.T.); +#10423 = CIRCLE('',#10424,10.); +#10424 = AXIS2_PLACEMENT_3D('',#10425,#10426,#10427); +#10425 = CARTESIAN_POINT('',(10.,10.,130.)); +#10426 = DIRECTION('',(0.,0.,1.)); +#10427 = DIRECTION('',(1.,0.,-0.)); +#10428 = ORIENTED_EDGE('',*,*,#6228,.F.); +#10429 = CYLINDRICAL_SURFACE('',#10430,10.); +#10430 = AXIS2_PLACEMENT_3D('',#10431,#10432,#10433); +#10431 = CARTESIAN_POINT('',(10.,10.,0.)); +#10432 = DIRECTION('',(0.,0.,1.)); +#10433 = DIRECTION('',(1.,0.,-0.)); +#10434 = ADVANCED_FACE('',(#10435),#10455,.T.); +#10435 = FACE_BOUND('',#10436,.T.); +#10436 = EDGE_LOOP('',(#10437,#10438,#10447,#10454)); +#10437 = ORIENTED_EDGE('',*,*,#10422,.T.); +#10438 = ORIENTED_EDGE('',*,*,#10439,.F.); +#10439 = EDGE_CURVE('',#10440,#10415,#10442,.T.); +#10440 = VERTEX_POINT('',#10441); +#10441 = CARTESIAN_POINT('',(20.,0.,140.)); +#10442 = CIRCLE('',#10443,10.); +#10443 = AXIS2_PLACEMENT_3D('',#10444,#10445,#10446); +#10444 = CARTESIAN_POINT('',(20.,0.,130.)); +#10445 = DIRECTION('',(0.,-1.,0.)); +#10446 = DIRECTION('',(0.,0.,-1.)); +#10447 = ORIENTED_EDGE('',*,*,#10448,.F.); +#10448 = EDGE_CURVE('',#8547,#10440,#10449,.T.); +#10449 = CIRCLE('',#10450,10.); +#10450 = AXIS2_PLACEMENT_3D('',#10451,#10452,#10453); +#10451 = CARTESIAN_POINT('',(20.,10.,140.)); +#10452 = DIRECTION('',(1.,0.,0.)); +#10453 = DIRECTION('',(0.,0.,-1.)); +#10454 = ORIENTED_EDGE('',*,*,#8645,.F.); +#10455 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,( + (#10456,#10457,#10458,#10459) + ,(#10460,#10461,#10462,#10463) + ,(#10464,#10465,#10466,#10467) + ,(#10468,#10469,#10470,#10471 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,4),( + 0.,1.),(0.,1.),.PIECEWISE_BEZIER_KNOTS.) +GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(( + (1.,0.804737854124,0.804737854124,1.) + ,(0.804737854124,0.647603013861,0.647603013861,0.804737854124) + ,(0.804737854124,0.647603013861,0.647603013861,0.804737854124) +,(1.,0.804737854124,0.804737854124,1. +))) REPRESENTATION_ITEM('') SURFACE() ); +#10456 = CARTESIAN_POINT('',(20.,-5.20417042793E-15,140.)); +#10457 = CARTESIAN_POINT('',(14.142135623731,-5.20417042793E-15,140.)); +#10458 = CARTESIAN_POINT('',(10.,-5.20417042793E-15,135.85786437626)); +#10459 = CARTESIAN_POINT('',(10.,-5.20417042793E-15,130.)); +#10460 = CARTESIAN_POINT('',(20.,-4.128098199195E-15,145.85786437626)); +#10461 = CARTESIAN_POINT('',(10.710678118655,-4.128098199195E-15, + 145.85786437626)); +#10462 = CARTESIAN_POINT('',(4.142135623731,-4.128098199195E-15, + 139.28932188134)); +#10463 = CARTESIAN_POINT('',(4.142135623731,-4.128098199195E-15,130.)); +#10464 = CARTESIAN_POINT('',(20.,4.142135623731,150.)); +#10465 = CARTESIAN_POINT('',(8.284271247462,4.142135623731,150.)); +#10466 = CARTESIAN_POINT('',(-4.401441537979E-14,4.142135623731, + 141.71572875253)); +#10467 = CARTESIAN_POINT('',(-2.775557561563E-14,4.142135623731,130.)); +#10468 = CARTESIAN_POINT('',(20.,10.,150.)); +#10469 = CARTESIAN_POINT('',(8.284271247462,10.,150.)); +#10470 = CARTESIAN_POINT('',(-4.401441537979E-14,10.,141.71572875253)); +#10471 = CARTESIAN_POINT('',(-2.775557561563E-14,10.,130.)); +#10472 = ADVANCED_FACE('',(#10473),#10492,.T.); +#10473 = FACE_BOUND('',#10474,.T.); +#10474 = EDGE_LOOP('',(#10475,#10476,#10477,#10486)); +#10475 = ORIENTED_EDGE('',*,*,#10291,.T.); +#10476 = ORIENTED_EDGE('',*,*,#8596,.F.); +#10477 = ORIENTED_EDGE('',*,*,#10478,.F.); +#10478 = EDGE_CURVE('',#10479,#8439,#10481,.T.); +#10479 = VERTEX_POINT('',#10480); +#10480 = CARTESIAN_POINT('',(130.,0.,13.763819204712)); +#10481 = CIRCLE('',#10482,10.); +#10482 = AXIS2_PLACEMENT_3D('',#10483,#10484,#10485); +#10483 = CARTESIAN_POINT('',(130.,10.,13.763819204712)); +#10484 = DIRECTION('',(1.,0.,0.)); +#10485 = DIRECTION('',(0.,0.,-1.)); +#10486 = ORIENTED_EDGE('',*,*,#10487,.F.); +#10487 = EDGE_CURVE('',#10292,#10479,#10488,.T.); +#10488 = LINE('',#10489,#10490); +#10489 = CARTESIAN_POINT('',(75.,0.,13.763819204712)); +#10490 = VECTOR('',#10491,1.); +#10491 = DIRECTION('',(1.,0.,0.)); +#10492 = CYLINDRICAL_SURFACE('',#10493,10.); +#10493 = AXIS2_PLACEMENT_3D('',#10494,#10495,#10496); +#10494 = CARTESIAN_POINT('',(75.,10.,13.763819204712)); +#10495 = DIRECTION('',(-1.,0.,0.)); +#10496 = DIRECTION('',(0.,0.,1.)); +#10497 = ADVANCED_FACE('',(#10498),#10517,.T.); +#10498 = FACE_BOUND('',#10499,.T.); +#10499 = EDGE_LOOP('',(#10500,#10501,#10509,#10516)); +#10500 = ORIENTED_EDGE('',*,*,#10448,.T.); +#10501 = ORIENTED_EDGE('',*,*,#10502,.F.); +#10502 = EDGE_CURVE('',#10503,#10440,#10505,.T.); +#10503 = VERTEX_POINT('',#10504); +#10504 = CARTESIAN_POINT('',(130.,0.,140.)); +#10505 = LINE('',#10506,#10507); +#10506 = CARTESIAN_POINT('',(75.,0.,140.)); +#10507 = VECTOR('',#10508,1.); +#10508 = DIRECTION('',(-1.,0.,0.)); +#10509 = ORIENTED_EDGE('',*,*,#10510,.F.); +#10510 = EDGE_CURVE('',#8413,#10503,#10511,.T.); +#10511 = CIRCLE('',#10512,10.); +#10512 = AXIS2_PLACEMENT_3D('',#10513,#10514,#10515); +#10513 = CARTESIAN_POINT('',(130.,10.,140.)); +#10514 = DIRECTION('',(1.,0.,0.)); +#10515 = DIRECTION('',(0.,0.,-1.)); +#10516 = ORIENTED_EDGE('',*,*,#8554,.F.); +#10517 = CYLINDRICAL_SURFACE('',#10518,10.); +#10518 = AXIS2_PLACEMENT_3D('',#10519,#10520,#10521); +#10519 = CARTESIAN_POINT('',(75.,10.,140.)); +#10520 = DIRECTION('',(-1.,0.,0.)); +#10521 = DIRECTION('',(0.,0.,1.)); +#10522 = ADVANCED_FACE('',(#10523),#10543,.T.); +#10523 = FACE_BOUND('',#10524,.T.); +#10524 = EDGE_LOOP('',(#10525,#10526,#10533,#10540,#10541,#10542)); +#10525 = ORIENTED_EDGE('',*,*,#9613,.F.); +#10526 = ORIENTED_EDGE('',*,*,#10527,.T.); +#10527 = EDGE_CURVE('',#9605,#10528,#10530,.T.); +#10528 = VERTEX_POINT('',#10529); +#10529 = CARTESIAN_POINT('',(62.5,2.5,23.464101615138)); +#10530 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10531,#10532),.UNSPECIFIED., + .F.,.F.,(2,2),(7.505553499465,12.454482671904), + .PIECEWISE_BEZIER_KNOTS.); +#10531 = CARTESIAN_POINT('',(62.5,4.974464578442,27.750000004491)); +#10532 = CARTESIAN_POINT('',(62.5,2.499999987094,23.464101622589)); +#10533 = ORIENTED_EDGE('',*,*,#10534,.F.); +#10534 = EDGE_CURVE('',#10528,#10528,#10535,.T.); +#10535 = CIRCLE('',#10536,51.535898384862); +#10536 = AXIS2_PLACEMENT_3D('',#10537,#10538,#10539); +#10537 = CARTESIAN_POINT('',(62.5,2.5,75.)); +#10538 = DIRECTION('',(0.,-1.,0.)); +#10539 = DIRECTION('',(0.,0.,-1.)); +#10540 = ORIENTED_EDGE('',*,*,#10527,.F.); +#10541 = ORIENTED_EDGE('',*,*,#9604,.F.); +#10542 = ORIENTED_EDGE('',*,*,#9564,.T.); +#10543 = CONICAL_SURFACE('',#10544,40.75,1.04719755); +#10544 = AXIS2_PLACEMENT_3D('',#10545,#10546,#10547); +#10545 = CARTESIAN_POINT('',(62.5,8.727241335952,75.)); +#10546 = DIRECTION('',(0.,-1.,0.)); +#10547 = DIRECTION('',(0.,-0.,-1.)); +#10548 = ADVANCED_FACE('',(#10549),#10576,.F.); +#10549 = FACE_BOUND('',#10550,.F.); +#10550 = EDGE_LOOP('',(#10551,#10561,#10568,#10569)); +#10551 = ORIENTED_EDGE('',*,*,#10552,.F.); +#10552 = EDGE_CURVE('',#10553,#10555,#10557,.T.); +#10553 = VERTEX_POINT('',#10554); +#10554 = CARTESIAN_POINT('',(130.,2.5,140.)); +#10555 = VERTEX_POINT('',#10556); +#10556 = CARTESIAN_POINT('',(20.,2.5,140.)); +#10557 = LINE('',#10558,#10559); +#10558 = CARTESIAN_POINT('',(75.,2.5,140.)); +#10559 = VECTOR('',#10560,1.); +#10560 = DIRECTION('',(-1.,0.,0.)); +#10561 = ORIENTED_EDGE('',*,*,#10562,.F.); +#10562 = EDGE_CURVE('',#8389,#10553,#10563,.T.); +#10563 = CIRCLE('',#10564,7.5); +#10564 = AXIS2_PLACEMENT_3D('',#10565,#10566,#10567); +#10565 = CARTESIAN_POINT('',(130.,10.,140.)); +#10566 = DIRECTION('',(1.,0.,-1.224646799147E-16)); +#10567 = DIRECTION('',(-1.224646799147E-16,-0.,-1.)); +#10568 = ORIENTED_EDGE('',*,*,#8487,.F.); +#10569 = ORIENTED_EDGE('',*,*,#10570,.T.); +#10570 = EDGE_CURVE('',#8488,#10555,#10571,.T.); +#10571 = CIRCLE('',#10572,7.5); +#10572 = AXIS2_PLACEMENT_3D('',#10573,#10574,#10575); +#10573 = CARTESIAN_POINT('',(20.,10.,140.)); +#10574 = DIRECTION('',(1.,0.,-0.)); +#10575 = DIRECTION('',(0.,0.,1.)); +#10576 = CYLINDRICAL_SURFACE('',#10577,7.5); +#10577 = AXIS2_PLACEMENT_3D('',#10578,#10579,#10580); +#10578 = CARTESIAN_POINT('',(75.,10.,140.)); +#10579 = DIRECTION('',(-1.,0.,0.)); +#10580 = DIRECTION('',(0.,0.,1.)); +#10581 = ADVANCED_FACE('',(#10582),#10602,.F.); +#10582 = FACE_BOUND('',#10583,.F.); +#10583 = EDGE_LOOP('',(#10584,#10593,#10594,#10595)); +#10584 = ORIENTED_EDGE('',*,*,#10585,.F.); +#10585 = EDGE_CURVE('',#10555,#10586,#10588,.T.); +#10586 = VERTEX_POINT('',#10587); +#10587 = CARTESIAN_POINT('',(10.,2.5,130.)); +#10588 = CIRCLE('',#10589,10.); +#10589 = AXIS2_PLACEMENT_3D('',#10590,#10591,#10592); +#10590 = CARTESIAN_POINT('',(20.,2.5,130.)); +#10591 = DIRECTION('',(0.,-1.,0.)); +#10592 = DIRECTION('',(0.,0.,-1.)); +#10593 = ORIENTED_EDGE('',*,*,#10570,.F.); +#10594 = ORIENTED_EDGE('',*,*,#8512,.F.); +#10595 = ORIENTED_EDGE('',*,*,#10596,.T.); +#10596 = EDGE_CURVE('',#7321,#10586,#10597,.T.); +#10597 = CIRCLE('',#10598,7.5); +#10598 = AXIS2_PLACEMENT_3D('',#10599,#10600,#10601); +#10599 = CARTESIAN_POINT('',(10.,10.,130.)); +#10600 = DIRECTION('',(1.836970198721E-16,0.,1.)); +#10601 = DIRECTION('',(1.,0.,-1.836970198721E-16)); +#10602 = TOROIDAL_SURFACE('',#10603,10.,7.5); +#10603 = AXIS2_PLACEMENT_3D('',#10604,#10605,#10606); +#10604 = CARTESIAN_POINT('',(20.,10.,130.)); +#10605 = DIRECTION('',(0.,-1.,0.)); +#10606 = DIRECTION('',(0.,0.,-1.)); +#10607 = ADVANCED_FACE('',(#10608),#10627,.F.); +#10608 = FACE_BOUND('',#10609,.F.); +#10609 = EDGE_LOOP('',(#10610,#10618,#10619,#10620)); +#10610 = ORIENTED_EDGE('',*,*,#10611,.F.); +#10611 = EDGE_CURVE('',#10586,#10612,#10614,.T.); +#10612 = VERTEX_POINT('',#10613); +#10613 = CARTESIAN_POINT('',(10.,2.5,24.278441447094)); +#10614 = LINE('',#10615,#10616); +#10615 = CARTESIAN_POINT('',(10.,2.5,0.)); +#10616 = VECTOR('',#10617,1.); +#10617 = DIRECTION('',(0.,0.,-1.)); +#10618 = ORIENTED_EDGE('',*,*,#10596,.F.); +#10619 = ORIENTED_EDGE('',*,*,#7330,.F.); +#10620 = ORIENTED_EDGE('',*,*,#10621,.T.); +#10621 = EDGE_CURVE('',#7331,#10612,#10622,.T.); +#10622 = CIRCLE('',#10623,7.5); +#10623 = AXIS2_PLACEMENT_3D('',#10624,#10625,#10626); +#10624 = CARTESIAN_POINT('',(10.,10.,24.278441447094)); +#10625 = DIRECTION('',(0.,0.,1.)); +#10626 = DIRECTION('',(1.,0.,-0.)); +#10627 = CYLINDRICAL_SURFACE('',#10628,7.5); +#10628 = AXIS2_PLACEMENT_3D('',#10629,#10630,#10631); +#10629 = CARTESIAN_POINT('',(10.,10.,0.)); +#10630 = DIRECTION('',(0.,0.,1.)); +#10631 = DIRECTION('',(1.,0.,-0.)); +#10632 = ADVANCED_FACE('',(#10633),#10653,.T.); +#10633 = FACE_BOUND('',#10634,.T.); +#10634 = EDGE_LOOP('',(#10635,#10636,#10645,#10652)); +#10635 = ORIENTED_EDGE('',*,*,#10621,.T.); +#10636 = ORIENTED_EDGE('',*,*,#10637,.T.); +#10637 = EDGE_CURVE('',#10612,#10638,#10640,.T.); +#10638 = VERTEX_POINT('',#10639); +#10639 = CARTESIAN_POINT('',(20.,2.5,13.763819204712)); +#10640 = ELLIPSE('',#10641,10.514622242383,10.); +#10641 = AXIS2_PLACEMENT_3D('',#10642,#10643,#10644); +#10642 = CARTESIAN_POINT('',(20.,2.5,24.278441447094)); +#10643 = DIRECTION('',(0.,-1.,0.)); +#10644 = DIRECTION('',(0.,0.,-1.)); +#10645 = ORIENTED_EDGE('',*,*,#10646,.T.); +#10646 = EDGE_CURVE('',#10638,#8463,#10647,.T.); +#10647 = CIRCLE('',#10648,7.5); +#10648 = AXIS2_PLACEMENT_3D('',#10649,#10650,#10651); +#10649 = CARTESIAN_POINT('',(20.,10.,13.763819204712)); +#10650 = DIRECTION('',(1.,0.,-0.)); +#10651 = DIRECTION('',(0.,0.,1.)); +#10652 = ORIENTED_EDGE('',*,*,#8530,.T.); +#10653 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#10654,#10655,#10656) + ,(#10657,#10658,#10659) + ,(#10660,#10661,#10662) + ,(#10663,#10664,#10665) + ,(#10666,#10667,#10668) + ,(#10669,#10670,#10671) + ,(#10672,#10673,#10674) + ,(#10675,#10676,#10677) + ,(#10678,#10679,#10680) + ,(#10681,#10682,#10683) + ,(#10684,#10685,#10686) + ,(#10687,#10688,#10689) + ,(#10690,#10691,#10692) + ,(#10693,#10694,#10695) + ,(#10696,#10697,#10698) + ,(#10699,#10700,#10701) + ,(#10702,#10703,#10704) + ,(#10705,#10706,#10707) + ,(#10708,#10709,#10710) + ,(#10711,#10712,#10713) + ,(#10714,#10715,#10716) + ,(#10717,#10718,#10719) + ,(#10720,#10721,#10722) + ,(#10723,#10724,#10725) + ,(#10726,#10727,#10728) + ,(#10729,#10730,#10731) + ,(#10732,#10733,#10734) + ,(#10735,#10736,#10737) + ,(#10738,#10739,#10740) + ,(#10741,#10742,#10743) + ,(#10744,#10745,#10746) + ,(#10747,#10748,#10749) + ,(#10750,#10751,#10752) + ,(#10753,#10754,#10755 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.587785252292,1.) + ,(1.,0.587785146445,1.) + ,(1.,0.58799666566,1.) + ,(1.,0.588838927714,1.) + ,(1.,0.589469767943,1.) + ,(1.,0.591140820289,1.) + ,(1.,0.592181016258,1.) + ,(1.,0.594654417706,1.) + ,(1.,0.596087600756,1.) + ,(1.,0.599324900181,1.) + ,(1.,0.601128989674,1.) + ,(1.,0.605081059709,1.) + ,(1.,0.607229010897,1.) + ,(1.,0.611837648061,1.) + ,(1.,0.614298304101,1.) + ,(1.,0.619497978177,1.) + ,(1.,0.622236967303,1.) + ,(1.,0.627956607929,1.) + ,(1.,0.630937232756,1.) + ,(1.,0.63710195755,1.) + ,(1.,0.640286033873,1.) + ,(1.,0.646818745411,1.) + ,(1.,0.650167360408,1.) + ,(1.,0.656990164321,1.) + ,(1.,0.660464336519,1.) + ,(1.,0.667499756319,1.) + ,(1.,0.67106099054,1.) + ,(1.,0.678232974111,1.) + ,(1.,0.681843713095,1.) + ,(1.,0.689078440099,1.) + ,(1.,0.692702420366,1.) + ,(1.,0.6999289292,1.) + ,(1.,0.703531481009,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#10654 = CARTESIAN_POINT('',(20.,12.317627457812,6.630895332498)); +#10655 = CARTESIAN_POINT('',(20.,2.5,3.440954801178)); +#10656 = CARTESIAN_POINT('',(20.,2.5,13.763819204712)); +#10657 = CARTESIAN_POINT('',(19.4273134332,12.317627457809, + 6.630895332497)); +#10658 = CARTESIAN_POINT('',(19.317547318901,2.499999999999, + 3.44095480118)); +#10659 = CARTESIAN_POINT('',(19.672750533257,2.5,13.763819204712)); +#10660 = CARTESIAN_POINT('',(18.854628563698,12.313901477869, + 6.659266761489)); +#10661 = CARTESIAN_POINT('',(18.635595011755,2.500000000001, + 3.481869261874)); +#10662 = CARTESIAN_POINT('',(19.345502036399,2.5,13.780723246576)); +#10663 = CARTESIAN_POINT('',(17.714771524767,12.299033418392, + 6.772479419721)); +#10664 = CARTESIAN_POINT('',(17.281827228465,2.499999999999, + 3.644750654255)); +#10665 = CARTESIAN_POINT('',(18.69415515701,2.5,13.848176722919)); +#10666 = CARTESIAN_POINT('',(17.1476015206,12.287891361789, + 6.857320474322)); +#10667 = CARTESIAN_POINT('',(16.610968144117,2.5,3.766484613622)); +#10668 = CARTESIAN_POINT('',(18.370058011771,2.5,13.898726053347)); +#10669 = CARTESIAN_POINT('',(16.024237208836,12.258298430372,7.082655491 + )); +#10670 = CARTESIAN_POINT('',(15.290116643983,2.5,4.088261581934)); +#10671 = CARTESIAN_POINT('',(17.728135547906,2.5,14.032983392183)); +#10672 = CARTESIAN_POINT('',(15.468044634137,12.239847601207, + 7.223149105476)); +#10673 = CARTESIAN_POINT('',(14.640981594611,2.5,4.287858858618)); +#10674 = CARTESIAN_POINT('',(17.410311219507,2.5,14.116691193488)); +#10675 = CARTESIAN_POINT('',(14.371991661957,12.195814793955, + 7.55843638121)); +#10676 = CARTESIAN_POINT('',(13.373463081441,2.5,4.760840223209)); +#10677 = CARTESIAN_POINT('',(16.783995235404,2.5,14.316459423254)); +#10678 = CARTESIAN_POINT('',(13.832132955268,12.170232883798, + 7.753229525249)); +#10679 = CARTESIAN_POINT('',(12.755789914871,2.5,5.033603300749)); +#10680 = CARTESIAN_POINT('',(16.475504545867,2.5,14.432519543549)); +#10681 = CARTESIAN_POINT('',(12.773946911954,12.11218426072, + 8.195240060291)); +#10682 = CARTESIAN_POINT('',(11.559900241179,2.5,5.646911997392)); +#10683 = CARTESIAN_POINT('',(15.870826806831,2.5,14.695874786989)); +#10684 = CARTESIAN_POINT('',(12.255621207739,12.07971763735, + 8.442456769427)); +#10685 = CARTESIAN_POINT('',(10.982210351846,2.5,5.986710882474)); +#10686 = CARTESIAN_POINT('',(15.574640690137,2.5,14.843169503869)); +#10687 = CARTESIAN_POINT('',(11.245493003351,12.008212238415, + 8.9869337607)); +#10688 = CARTESIAN_POINT('',(9.873584012123,2.5,6.726969382853)); +#10689 = CARTESIAN_POINT('',(14.997424573343,2.5,15.167575506025)); +#10690 = CARTESIAN_POINT('',(10.753692061489,11.969173573163, + 9.284193202879)); +#10691 = CARTESIAN_POINT('',(9.342971348506,2.5,7.126611860354)); +#10692 = CARTESIAN_POINT('',(14.716395463708,2.5,15.344686290844)); +#10693 = CARTESIAN_POINT('',(9.801349782825,11.884900034454, + 9.92589303932)); +#10694 = CARTESIAN_POINT('',(8.334281380915,2.5,7.978705055031)); +#10695 = CARTESIAN_POINT('',(14.1721998759,2.5,15.727018844581)); +#10696 = CARTESIAN_POINT('',(9.340809915231,11.839665291009, + 10.270332443611)); +#10697 = CARTESIAN_POINT('',(7.856322975765,2.5,8.430323135272)); +#10698 = CARTESIAN_POINT('',(13.909034237275,2.5,15.932240023661)); +#10699 = CARTESIAN_POINT('',(8.455425139041,11.743435212769, + 11.00307520501)); +#10700 = CARTESIAN_POINT('',(6.957214123174,2.5,9.378152454082)); +#10701 = CARTESIAN_POINT('',(13.403100079452,2.5,16.368817057483)); +#10702 = CARTESIAN_POINT('',(8.030581596395,11.692440026438, + 11.391377431657)); +#10703 = CARTESIAN_POINT('',(6.535990289495,2.5,9.873564984632)); +#10704 = CARTESIAN_POINT('',(13.160332340797,2.5,16.600172238683)); +#10705 = CARTESIAN_POINT('',(7.220681062076,11.585180156928, + 12.208106404665)); +#10706 = CARTESIAN_POINT('',(5.753209041979,2.5,10.900724016568)); +#10707 = CARTESIAN_POINT('',(12.697532035472,2.5,17.086789277099)); +#10708 = CARTESIAN_POINT('',(6.835625319934,11.528915639231, + 12.636531890955)); +#10709 = CARTESIAN_POINT('',(5.391409542188,2.5,11.431746301596)); +#10710 = CARTESIAN_POINT('',(12.47750018282,2.5,17.342050383549)); +#10711 = CARTESIAN_POINT('',(6.10900881237,11.411658949627, + 13.529381529097)); +#10712 = CARTESIAN_POINT('',(4.729077431793,2.5,12.522072614511)); +#10713 = CARTESIAN_POINT('',(12.062290749926,2.5,17.874021038469)); +#10714 = CARTESIAN_POINT('',(5.76744916802,11.350666958629, + 13.993804303395)); +#10715 = CARTESIAN_POINT('',(4.428164540505,2.5,13.080756991378)); +#10716 = CARTESIAN_POINT('',(11.867113810297,2.5,18.150729766175)); +#10717 = CARTESIAN_POINT('',(5.131114401391,11.224542694949, + 14.954175976573)); +#10718 = CARTESIAN_POINT('',(3.888136281921,2.5,14.218740564782)); +#10719 = CARTESIAN_POINT('',(11.503493943652,2.5,18.722930869386)); +#10720 = CARTESIAN_POINT('',(4.83634026092,11.159410616866, + 15.450123393682)); +#10721 = CARTESIAN_POINT('',(3.648536098531,2.499999999999, + 14.797544144652)); +#10722 = CARTESIAN_POINT('',(11.335051577668,2.5,19.018422362036)); +#10723 = CARTESIAN_POINT('',(4.296415486888,11.025633424716, + 16.468768197693)); +#10724 = CARTESIAN_POINT('',(3.230789387027,2.500000000001, + 15.968594678664)); +#10725 = CARTESIAN_POINT('',(11.026523135364,2.5,19.625343304119)); +#10726 = CARTESIAN_POINT('',(4.051265686404,10.956988517063, + 16.991464012874)); +#10727 = CARTESIAN_POINT('',(3.052087269999,2.499999999999, + 16.560479868617)); +#10728 = CARTESIAN_POINT('',(10.886437535088,2.5,19.936771817104)); +#10729 = CARTESIAN_POINT('',(3.612950675701,10.816846743936, + 18.058571841405)); +#10730 = CARTESIAN_POINT('',(2.755102367841,2.500000000001, + 17.751070481814)); +#10731 = CARTESIAN_POINT('',(10.635971814686,2.5,20.57256761761)); +#10732 = CARTESIAN_POINT('',(3.419786141793,10.745350094698, + 18.602982208224)); +#10733 = CARTESIAN_POINT('',(2.636224906981,2.500000000001, + 18.349549716526)); +#10734 = CARTESIAN_POINT('',(10.525592081024,2.5,20.896933924108)); +#10735 = CARTESIAN_POINT('',(3.08730210758,10.600193382476, + 19.708276229547)); +#10736 = CARTESIAN_POINT('',(2.457325706551,2.499999999999, + 19.547262724646)); +#10737 = CARTESIAN_POINT('',(10.335601204331,2.5,21.555481521916)); +#10738 = CARTESIAN_POINT('',(2.947983120301,10.52653354347, + 20.269158178568)); +#10739 = CARTESIAN_POINT('',(2.396698468078,2.5,20.146401278036)); +#10740 = CARTESIAN_POINT('',(10.255990354458,2.5,21.889661797079)); +#10741 = CARTESIAN_POINT('',(2.724532065586,10.377759830645, + 21.401993807039)); +#10742 = CARTESIAN_POINT('',(2.332339575812,2.5,21.339903935394)); +#10743 = CARTESIAN_POINT('',(10.128304037478,2.5,22.564619018821)); +#10744 = CARTESIAN_POINT('',(2.640400342941,10.302646186387, + 21.973945738486)); +#10745 = CARTESIAN_POINT('',(2.328015781113,2.5,21.934294548664)); +#10746 = CARTESIAN_POINT('',(10.080228767395,2.5,22.90539492392)); +#10747 = CARTESIAN_POINT('',(2.528134223532,10.151688245141, + 23.12341314773)); +#10748 = CARTESIAN_POINT('',(2.374010606959,2.5,23.113270628025)); +#10749 = CARTESIAN_POINT('',(10.016076699161,2.5,23.590261562581)); +#10750 = CARTESIAN_POINT('',(2.5,10.075844234975,23.700926441494)); +#10751 = CARTESIAN_POINT('',(2.423771176212,2.500000000001, + 23.697997999308)); +#10752 = CARTESIAN_POINT('',(9.999999999999,2.5,23.934350994872)); +#10753 = CARTESIAN_POINT('',(2.5,10.,24.278441447094)); +#10754 = CARTESIAN_POINT('',(2.5,2.5,24.278441447094)); +#10755 = CARTESIAN_POINT('',(10.,2.5,24.278441447094)); +#10756 = ADVANCED_FACE('',(#10757),#10783,.F.); +#10757 = FACE_BOUND('',#10758,.F.); +#10758 = EDGE_LOOP('',(#10759,#10768,#10775,#10782)); +#10759 = ORIENTED_EDGE('',*,*,#10760,.F.); +#10760 = EDGE_CURVE('',#10761,#10761,#10763,.T.); +#10761 = VERTEX_POINT('',#10762); +#10762 = CARTESIAN_POINT('',(124.5,0.,114.13922072)); +#10763 = CIRCLE('',#10764,8.); +#10764 = AXIS2_PLACEMENT_3D('',#10765,#10766,#10767); +#10765 = CARTESIAN_POINT('',(124.5,0.,122.13922072)); +#10766 = DIRECTION('',(0.,-1.,0.)); +#10767 = DIRECTION('',(0.,0.,-1.)); +#10768 = ORIENTED_EDGE('',*,*,#10769,.T.); +#10769 = EDGE_CURVE('',#10761,#10770,#10772,.T.); +#10770 = VERTEX_POINT('',#10771); +#10771 = CARTESIAN_POINT('',(124.5,2.5,114.13922072)); +#10772 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10773,#10774),.UNSPECIFIED., + .F.,.F.,(2,2),(0.8,3.3),.PIECEWISE_BEZIER_KNOTS.); +#10773 = CARTESIAN_POINT('',(124.5,0.,114.13922072)); +#10774 = CARTESIAN_POINT('',(124.5,2.5,114.13922072)); +#10775 = ORIENTED_EDGE('',*,*,#10776,.T.); +#10776 = EDGE_CURVE('',#10770,#10770,#10777,.T.); +#10777 = CIRCLE('',#10778,8.); +#10778 = AXIS2_PLACEMENT_3D('',#10779,#10780,#10781); +#10779 = CARTESIAN_POINT('',(124.5,2.5,122.13922072)); +#10780 = DIRECTION('',(0.,-1.,0.)); +#10781 = DIRECTION('',(0.,0.,-1.)); +#10782 = ORIENTED_EDGE('',*,*,#10769,.F.); +#10783 = CYLINDRICAL_SURFACE('',#10784,8.); +#10784 = AXIS2_PLACEMENT_3D('',#10785,#10786,#10787); +#10785 = CARTESIAN_POINT('',(124.5,-0.8,122.13922072)); +#10786 = DIRECTION('',(0.,1.,-2.342910729165E-15)); +#10787 = DIRECTION('',(1.,0.,0.)); +#10788 = ADVANCED_FACE('',(#10789),#10815,.F.); +#10789 = FACE_BOUND('',#10790,.F.); +#10790 = EDGE_LOOP('',(#10791,#10800,#10807,#10814)); +#10791 = ORIENTED_EDGE('',*,*,#10792,.F.); +#10792 = EDGE_CURVE('',#10793,#10793,#10795,.T.); +#10793 = VERTEX_POINT('',#10794); +#10794 = CARTESIAN_POINT('',(124.5,0.,84.13922072)); +#10795 = CIRCLE('',#10796,8.); +#10796 = AXIS2_PLACEMENT_3D('',#10797,#10798,#10799); +#10797 = CARTESIAN_POINT('',(124.5,0.,92.13922072)); +#10798 = DIRECTION('',(0.,-1.,0.)); +#10799 = DIRECTION('',(0.,0.,-1.)); +#10800 = ORIENTED_EDGE('',*,*,#10801,.T.); +#10801 = EDGE_CURVE('',#10793,#10802,#10804,.T.); +#10802 = VERTEX_POINT('',#10803); +#10803 = CARTESIAN_POINT('',(124.5,2.5,84.13922072)); +#10804 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10805,#10806),.UNSPECIFIED., + .F.,.F.,(2,2),(0.8,3.3),.PIECEWISE_BEZIER_KNOTS.); +#10805 = CARTESIAN_POINT('',(124.5,-1.110223024625E-16,84.13922072)); +#10806 = CARTESIAN_POINT('',(124.5,2.5,84.13922072)); +#10807 = ORIENTED_EDGE('',*,*,#10808,.T.); +#10808 = EDGE_CURVE('',#10802,#10802,#10809,.T.); +#10809 = CIRCLE('',#10810,8.); +#10810 = AXIS2_PLACEMENT_3D('',#10811,#10812,#10813); +#10811 = CARTESIAN_POINT('',(124.5,2.5,92.13922072)); +#10812 = DIRECTION('',(0.,-1.,0.)); +#10813 = DIRECTION('',(0.,0.,-1.)); +#10814 = ORIENTED_EDGE('',*,*,#10801,.F.); +#10815 = CYLINDRICAL_SURFACE('',#10816,8.); +#10816 = AXIS2_PLACEMENT_3D('',#10817,#10818,#10819); +#10817 = CARTESIAN_POINT('',(124.5,-0.8,92.13922072)); +#10818 = DIRECTION('',(0.,1.,-2.342910729165E-15)); +#10819 = DIRECTION('',(1.,0.,0.)); +#10820 = ADVANCED_FACE('',(#10821),#10847,.F.); +#10821 = FACE_BOUND('',#10822,.F.); +#10822 = EDGE_LOOP('',(#10823,#10832,#10839,#10846)); +#10823 = ORIENTED_EDGE('',*,*,#10824,.F.); +#10824 = EDGE_CURVE('',#10825,#10825,#10827,.T.); +#10825 = VERTEX_POINT('',#10826); +#10826 = CARTESIAN_POINT('',(124.5,0.,54.13922072)); +#10827 = CIRCLE('',#10828,8.); +#10828 = AXIS2_PLACEMENT_3D('',#10829,#10830,#10831); +#10829 = CARTESIAN_POINT('',(124.5,0.,62.13922072)); +#10830 = DIRECTION('',(0.,-1.,0.)); +#10831 = DIRECTION('',(0.,0.,-1.)); +#10832 = ORIENTED_EDGE('',*,*,#10833,.T.); +#10833 = EDGE_CURVE('',#10825,#10834,#10836,.T.); +#10834 = VERTEX_POINT('',#10835); +#10835 = CARTESIAN_POINT('',(124.5,2.5,54.13922072)); +#10836 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10837,#10838),.UNSPECIFIED., + .F.,.F.,(2,2),(0.8,3.3),.PIECEWISE_BEZIER_KNOTS.); +#10837 = CARTESIAN_POINT('',(124.5,-1.110223024625E-16,54.13922072)); +#10838 = CARTESIAN_POINT('',(124.5,2.5,54.13922072)); +#10839 = ORIENTED_EDGE('',*,*,#10840,.T.); +#10840 = EDGE_CURVE('',#10834,#10834,#10841,.T.); +#10841 = CIRCLE('',#10842,8.); +#10842 = AXIS2_PLACEMENT_3D('',#10843,#10844,#10845); +#10843 = CARTESIAN_POINT('',(124.5,2.5,62.13922072)); +#10844 = DIRECTION('',(0.,-1.,0.)); +#10845 = DIRECTION('',(0.,0.,-1.)); +#10846 = ORIENTED_EDGE('',*,*,#10833,.F.); +#10847 = CYLINDRICAL_SURFACE('',#10848,8.); +#10848 = AXIS2_PLACEMENT_3D('',#10849,#10850,#10851); +#10849 = CARTESIAN_POINT('',(124.5,-0.8,62.13922072)); +#10850 = DIRECTION('',(0.,1.,-2.342910729165E-15)); +#10851 = DIRECTION('',(1.,0.,0.)); +#10852 = ADVANCED_FACE('',(#10853),#10879,.F.); +#10853 = FACE_BOUND('',#10854,.F.); +#10854 = EDGE_LOOP('',(#10855,#10864,#10871,#10878)); +#10855 = ORIENTED_EDGE('',*,*,#10856,.F.); +#10856 = EDGE_CURVE('',#10857,#10857,#10859,.T.); +#10857 = VERTEX_POINT('',#10858); +#10858 = CARTESIAN_POINT('',(124.5,0.,28.68922072)); +#10859 = CIRCLE('',#10860,3.45); +#10860 = AXIS2_PLACEMENT_3D('',#10861,#10862,#10863); +#10861 = CARTESIAN_POINT('',(124.5,0.,32.13922072)); +#10862 = DIRECTION('',(0.,-1.,0.)); +#10863 = DIRECTION('',(0.,0.,-1.)); +#10864 = ORIENTED_EDGE('',*,*,#10865,.T.); +#10865 = EDGE_CURVE('',#10857,#10866,#10868,.T.); +#10866 = VERTEX_POINT('',#10867); +#10867 = CARTESIAN_POINT('',(124.5,2.5,28.68922072)); +#10868 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#10869,#10870),.UNSPECIFIED., + .F.,.F.,(2,2),(0.8,3.3),.PIECEWISE_BEZIER_KNOTS.); +#10869 = CARTESIAN_POINT('',(124.5,0.,28.68922072)); +#10870 = CARTESIAN_POINT('',(124.5,2.5,28.68922072)); +#10871 = ORIENTED_EDGE('',*,*,#10872,.T.); +#10872 = EDGE_CURVE('',#10866,#10866,#10873,.T.); +#10873 = CIRCLE('',#10874,3.45); +#10874 = AXIS2_PLACEMENT_3D('',#10875,#10876,#10877); +#10875 = CARTESIAN_POINT('',(124.5,2.5,32.13922072)); +#10876 = DIRECTION('',(0.,-1.,0.)); +#10877 = DIRECTION('',(0.,0.,-1.)); +#10878 = ORIENTED_EDGE('',*,*,#10865,.F.); +#10879 = CYLINDRICAL_SURFACE('',#10880,3.45); +#10880 = AXIS2_PLACEMENT_3D('',#10881,#10882,#10883); +#10881 = CARTESIAN_POINT('',(124.5,-0.8,32.13922072)); +#10882 = DIRECTION('',(0.,1.,-2.342910729165E-15)); +#10883 = DIRECTION('',(1.,0.,0.)); +#10884 = ADVANCED_FACE('',(#10885),#10904,.F.); +#10885 = FACE_BOUND('',#10886,.F.); +#10886 = EDGE_LOOP('',(#10887,#10888,#10897,#10903)); +#10887 = ORIENTED_EDGE('',*,*,#8470,.F.); +#10888 = ORIENTED_EDGE('',*,*,#10889,.F.); +#10889 = EDGE_CURVE('',#10890,#8365,#10892,.T.); +#10890 = VERTEX_POINT('',#10891); +#10891 = CARTESIAN_POINT('',(130.,2.5,13.763819204712)); +#10892 = CIRCLE('',#10893,7.5); +#10893 = AXIS2_PLACEMENT_3D('',#10894,#10895,#10896); +#10894 = CARTESIAN_POINT('',(130.,10.,13.763819204712)); +#10895 = DIRECTION('',(1.,0.,-1.287669847338E-16)); +#10896 = DIRECTION('',(1.287669847338E-16,0.,1.)); +#10897 = ORIENTED_EDGE('',*,*,#10898,.F.); +#10898 = EDGE_CURVE('',#10638,#10890,#10899,.T.); +#10899 = LINE('',#10900,#10901); +#10900 = CARTESIAN_POINT('',(75.,2.5,13.763819204712)); +#10901 = VECTOR('',#10902,1.); +#10902 = DIRECTION('',(1.,0.,0.)); +#10903 = ORIENTED_EDGE('',*,*,#10646,.T.); +#10904 = CYLINDRICAL_SURFACE('',#10905,7.5); +#10905 = AXIS2_PLACEMENT_3D('',#10906,#10907,#10908); +#10906 = CARTESIAN_POINT('',(75.,10.,13.763819204712)); +#10907 = DIRECTION('',(-1.,0.,0.)); +#10908 = DIRECTION('',(0.,0.,1.)); +#10909 = ADVANCED_FACE('',(#10910,#10913,#10916,#10919,#10922,#10953, + #10956,#10960,#10964,#10968,#10972),#10976,.T.); +#10910 = FACE_BOUND('',#10911,.T.); +#10911 = EDGE_LOOP('',(#10912)); +#10912 = ORIENTED_EDGE('',*,*,#10856,.F.); +#10913 = FACE_BOUND('',#10914,.T.); +#10914 = EDGE_LOOP('',(#10915)); +#10915 = ORIENTED_EDGE('',*,*,#10824,.F.); +#10916 = FACE_BOUND('',#10917,.T.); +#10917 = EDGE_LOOP('',(#10918)); +#10918 = ORIENTED_EDGE('',*,*,#10792,.F.); +#10919 = FACE_BOUND('',#10920,.T.); +#10920 = EDGE_LOOP('',(#10921)); +#10921 = ORIENTED_EDGE('',*,*,#10760,.F.); +#10922 = FACE_BOUND('',#10923,.T.); +#10923 = EDGE_LOOP('',(#10924,#10934,#10941,#10942,#10943,#10944,#10945, + #10946)); +#10924 = ORIENTED_EDGE('',*,*,#10925,.T.); +#10925 = EDGE_CURVE('',#10926,#10928,#10930,.T.); +#10926 = VERTEX_POINT('',#10927); +#10927 = CARTESIAN_POINT('',(140.,0.,24.278441447094)); +#10928 = VERTEX_POINT('',#10929); +#10929 = CARTESIAN_POINT('',(140.,0.,130.)); +#10930 = LINE('',#10931,#10932); +#10931 = CARTESIAN_POINT('',(140.,0.,0.)); +#10932 = VECTOR('',#10933,1.); +#10933 = DIRECTION('',(0.,0.,1.)); +#10934 = ORIENTED_EDGE('',*,*,#10935,.T.); +#10935 = EDGE_CURVE('',#10928,#10503,#10936,.T.); +#10936 = CIRCLE('',#10937,10.); +#10937 = AXIS2_PLACEMENT_3D('',#10938,#10939,#10940); +#10938 = CARTESIAN_POINT('',(130.,0.,130.)); +#10939 = DIRECTION('',(0.,-1.,0.)); +#10940 = DIRECTION('',(0.,0.,-1.)); +#10941 = ORIENTED_EDGE('',*,*,#10502,.T.); +#10942 = ORIENTED_EDGE('',*,*,#10439,.T.); +#10943 = ORIENTED_EDGE('',*,*,#10414,.T.); +#10944 = ORIENTED_EDGE('',*,*,#10300,.T.); +#10945 = ORIENTED_EDGE('',*,*,#10487,.T.); +#10946 = ORIENTED_EDGE('',*,*,#10947,.T.); +#10947 = EDGE_CURVE('',#10479,#10926,#10948,.T.); +#10948 = ELLIPSE('',#10949,10.514622242383,10.); +#10949 = AXIS2_PLACEMENT_3D('',#10950,#10951,#10952); +#10950 = CARTESIAN_POINT('',(130.,1.734723475977E-15,24.278441447094)); +#10951 = DIRECTION('',(0.,-1.,0.)); +#10952 = DIRECTION('',(0.,0.,1.)); +#10953 = FACE_BOUND('',#10954,.T.); +#10954 = EDGE_LOOP('',(#10955)); +#10955 = ORIENTED_EDGE('',*,*,#10265,.F.); +#10956 = FACE_BOUND('',#10957,.T.); +#10957 = EDGE_LOOP('',(#10958,#10959)); +#10958 = ORIENTED_EDGE('',*,*,#10217,.T.); +#10959 = ORIENTED_EDGE('',*,*,#10158,.T.); +#10960 = FACE_BOUND('',#10961,.T.); +#10961 = EDGE_LOOP('',(#10962,#10963)); +#10962 = ORIENTED_EDGE('',*,*,#10057,.T.); +#10963 = ORIENTED_EDGE('',*,*,#9998,.T.); +#10964 = FACE_BOUND('',#10965,.T.); +#10965 = EDGE_LOOP('',(#10966,#10967)); +#10966 = ORIENTED_EDGE('',*,*,#9959,.T.); +#10967 = ORIENTED_EDGE('',*,*,#9906,.T.); +#10968 = FACE_BOUND('',#10969,.T.); +#10969 = EDGE_LOOP('',(#10970,#10971)); +#10970 = ORIENTED_EDGE('',*,*,#9867,.T.); +#10971 = ORIENTED_EDGE('',*,*,#9814,.T.); +#10972 = FACE_BOUND('',#10973,.T.); +#10973 = EDGE_LOOP('',(#10974,#10975)); +#10974 = ORIENTED_EDGE('',*,*,#9769,.T.); +#10975 = ORIENTED_EDGE('',*,*,#9654,.T.); +#10976 = PLANE('',#10977); +#10977 = AXIS2_PLACEMENT_3D('',#10978,#10979,#10980); +#10978 = CARTESIAN_POINT('',(75.,0.,0.)); +#10979 = DIRECTION('',(0.,-1.,0.)); +#10980 = DIRECTION('',(0.,0.,-1.)); +#10981 = ADVANCED_FACE('',(#10982),#10994,.T.); +#10982 = FACE_BOUND('',#10983,.T.); +#10983 = EDGE_LOOP('',(#10984,#10985,#10986,#10993)); +#10984 = ORIENTED_EDGE('',*,*,#10478,.T.); +#10985 = ORIENTED_EDGE('',*,*,#8438,.F.); +#10986 = ORIENTED_EDGE('',*,*,#10987,.F.); +#10987 = EDGE_CURVE('',#10926,#6603,#10988,.T.); +#10988 = CIRCLE('',#10989,10.); +#10989 = AXIS2_PLACEMENT_3D('',#10990,#10991,#10992); +#10990 = CARTESIAN_POINT('',(140.,10.,24.278441447094)); +#10991 = DIRECTION('',(-6.938893903907E-16,0.,1.)); +#10992 = DIRECTION('',(1.,0.,6.938893903907E-16)); +#10993 = ORIENTED_EDGE('',*,*,#10947,.F.); +#10994 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#10995,#10996,#10997) + ,(#10998,#10999,#11000) + ,(#11001,#11002,#11003) + ,(#11004,#11005,#11006) + ,(#11007,#11008,#11009) + ,(#11010,#11011,#11012) + ,(#11013,#11014,#11015) + ,(#11016,#11017,#11018) + ,(#11019,#11020,#11021) + ,(#11022,#11023,#11024) + ,(#11025,#11026,#11027) + ,(#11028,#11029,#11030) + ,(#11031,#11032,#11033) + ,(#11034,#11035,#11036) + ,(#11037,#11038,#11039) + ,(#11040,#11041,#11042) + ,(#11043,#11044,#11045) + ,(#11046,#11047,#11048) + ,(#11049,#11050,#11051) + ,(#11052,#11053,#11054) + ,(#11055,#11056,#11057) + ,(#11058,#11059,#11060) + ,(#11061,#11062,#11063) + ,(#11064,#11065,#11066) + ,(#11067,#11068,#11069) + ,(#11070,#11071,#11072) + ,(#11073,#11074,#11075) + ,(#11076,#11077,#11078) + ,(#11079,#11080,#11081) + ,(#11082,#11083,#11084) + ,(#11085,#11086,#11087) + ,(#11088,#11089,#11090) + ,(#11091,#11092,#11093) + ,(#11094,#11095,#11096 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.587785252292,1.) + ,(1.,0.587785146445,1.) + ,(1.,0.58799666566,1.) + ,(1.,0.588838927714,1.) + ,(1.,0.589469767943,1.) + ,(1.,0.591140820289,1.) + ,(1.,0.592181016258,1.) + ,(1.,0.594654417706,1.) + ,(1.,0.596087600756,1.) + ,(1.,0.599324900181,1.) + ,(1.,0.601128989674,1.) + ,(1.,0.605081059709,1.) + ,(1.,0.607229010897,1.) + ,(1.,0.611837648061,1.) + ,(1.,0.614298304101,1.) + ,(1.,0.619497978177,1.) + ,(1.,0.622236967303,1.) + ,(1.,0.627956607929,1.) + ,(1.,0.630937232756,1.) + ,(1.,0.63710195755,1.) + ,(1.,0.640286033873,1.) + ,(1.,0.646818745411,1.) + ,(1.,0.650167360408,1.) + ,(1.,0.656990164321,1.) + ,(1.,0.660464336519,1.) + ,(1.,0.667499756319,1.) + ,(1.,0.67106099054,1.) + ,(1.,0.678232974111,1.) + ,(1.,0.681843713095,1.) + ,(1.,0.689078440099,1.) + ,(1.,0.692702420366,1.) + ,(1.,0.6999289292,1.) + ,(1.,0.703531481009,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#10995 = CARTESIAN_POINT('',(130.,13.090169943749,4.25325404176)); +#10996 = CARTESIAN_POINT('',(130.,1.734723475977E-15,-3.469446951954E-15 + )); +#10997 = CARTESIAN_POINT('',(130.,1.734723475977E-15,13.763819204712)); +#10998 = CARTESIAN_POINT('',(130.65449893348,13.090169943749, + 4.25325404176)); +#10999 = CARTESIAN_POINT('',(130.80085373291,1.734723475977E-15, + 3.118827945768E-12)); +#11000 = CARTESIAN_POINT('',(130.32724946674,1.734723475977E-15, + 13.763819204712)); +#11001 = CARTESIAN_POINT('',(131.3089959272,13.085201970494, + 4.285447933127)); +#11002 = CARTESIAN_POINT('',(131.60111841367,5.683815437197E-13, + 4.892598548468E-02)); +#11003 = CARTESIAN_POINT('',(130.6544979636,0.,13.780723246575)); +#11004 = CARTESIAN_POINT('',(132.61168968598,13.065377891188, + 4.413913651988)); +#11005 = CARTESIAN_POINT('',(133.18902638705,-5.67568543451E-13, + 0.243616671697)); +#11006 = CARTESIAN_POINT('',(131.30584484299,0.,13.848176722919)); +#11007 = CARTESIAN_POINT('',(133.25988397645,13.05052181572, + 4.510185281313)); +#11008 = CARTESIAN_POINT('',(133.9755467907,2.865510090197E-13, + 0.389102516882)); +#11009 = CARTESIAN_POINT('',(131.62994198822,1.734723475977E-15, + 13.898726053347)); +#11010 = CARTESIAN_POINT('',(134.54372890419,13.011064573828, + 4.76587952394)); +#11011 = CARTESIAN_POINT('',(135.52270754093,-2.82276435936E-13, + 0.773385938699)); +#11012 = CARTESIAN_POINT('',(132.27186445209,1.734723475977E-15, + 14.032983392184)); +#11013 = CARTESIAN_POINT('',(135.17937756098,12.986463468275, + 4.925301742803)); +#11014 = CARTESIAN_POINT('',(136.28234627828,-8.570958779316E-13, + 1.011650945756)); +#11015 = CARTESIAN_POINT('',(132.58968878049,1.734723475977E-15, + 14.116691193488)); +#11016 = CARTESIAN_POINT('',(136.43200952919,12.927753058608, + 5.305762033864)); +#11017 = CARTESIAN_POINT('',(137.76359806107,8.535308793004E-13, + 1.575703066075)); +#11018 = CARTESIAN_POINT('',(133.21600476459,1.734723475977E-15, + 14.316459423254)); +#11019 = CARTESIAN_POINT('',(137.04899090825,12.893643845064, + 5.526799519146)); +#11020 = CARTESIAN_POINT('',(138.48438862476,5.71877215424E-13, + 1.90075040808)); +#11021 = CARTESIAN_POINT('',(133.52449545412,1.734723475977E-15, + 14.432519543549)); +#11022 = CARTESIAN_POINT('',(138.25834638634,12.816245680959, + 6.028361818061)); +#11023 = CARTESIAN_POINT('',(139.87734746514,-5.722482534841E-13, + 2.630709611991)); +#11024 = CARTESIAN_POINT('',(134.12917319317,1.734723475977E-15, + 14.695874786989)); +#11025 = CARTESIAN_POINT('',(138.85071861972,12.772956849798, + 6.308885857947)); +#11026 = CARTESIAN_POINT('',(140.54891599899,-2.846281123254E-13, + 3.034735740254)); +#11027 = CARTESIAN_POINT('',(134.42535930986,1.734723475977E-15, + 14.843169503869)); +#11028 = CARTESIAN_POINT('',(140.00515085331,12.677616317887, + 6.926719845592)); +#11029 = CARTESIAN_POINT('',(141.83467701419,2.896853050708E-13, + 3.913610579189)); +#11030 = CARTESIAN_POINT('',(135.00257542665,1.734723475977E-15, + 15.167575506025)); +#11031 = CARTESIAN_POINT('',(140.56720907258,12.625564764218, + 7.264028840224)); +#11032 = CARTESIAN_POINT('',(142.44851420968,2.929950303905E-13, + 4.387495530076)); +#11033 = CARTESIAN_POINT('',(135.28360453629,1.734723475977E-15, + 15.344686290844)); +#11034 = CARTESIAN_POINT('',(141.6556002482,12.513200045939, + 7.992184437567)); +#11035 = CARTESIAN_POINT('',(143.61203304463,-2.838752991878E-13, + 5.396173783619)); +#11036 = CARTESIAN_POINT('',(135.8278001241,1.734723475977E-15, + 15.727018844581)); +#11037 = CARTESIAN_POINT('',(142.18193152545,12.452887054678, + 8.383029916928)); +#11038 = CARTESIAN_POINT('',(144.16160431433,-2.89302566191E-13, + 5.929992119806)); +#11039 = CARTESIAN_POINT('',(136.09096576272,1.734723475977E-15, + 15.932240023662)); +#11040 = CARTESIAN_POINT('',(143.19379984109,12.324580283693, + 9.214494587519)); +#11041 = CARTESIAN_POINT('',(145.19176840319,2.903292302707E-13, + 7.048236282233)); +#11042 = CARTESIAN_POINT('',(136.59689992054,1.734723475977E-15, + 16.368817057483)); +#11043 = CARTESIAN_POINT('',(143.6793353184,12.256586701918, + 9.65511249598)); +#11044 = CARTESIAN_POINT('',(145.67247823501,1.734723475977E-15, + 7.63173531777)); +#11045 = CARTESIAN_POINT('',(136.8396676592,1.734723475977E-15, + 16.600172238683)); +#11046 = CARTESIAN_POINT('',(144.60493592905,12.11357354257, + 10.581878780523)); +#11047 = CARTESIAN_POINT('',(146.56191656762,1.734723475977E-15, + 8.839071619071)); +#11048 = CARTESIAN_POINT('',(137.30246796453,1.734723475977E-15, + 17.086789277099)); +#11049 = CARTESIAN_POINT('',(145.04499963436,12.038554185642, + 11.068025726759)); +#11050 = CARTESIAN_POINT('',(146.9709587467,2.958240894086E-13, + 9.462078086606)); +#11051 = CARTESIAN_POINT('',(137.52249981718,1.734723475977E-15, + 17.34205038355)); +#11052 = CARTESIAN_POINT('',(145.87541850014,11.882211932836, + 12.081168359305)); +#11053 = CARTESIAN_POINT('',(147.71566181164,-2.895089754729E-13, + 10.73851876098)); +#11054 = CARTESIAN_POINT('',(137.93770925007,1.734723475977E-15, + 17.874021038468)); +#11055 = CARTESIAN_POINT('',(146.2657723794,11.80088927817, + 12.608162482472)); +#11056 = CARTESIAN_POINT('',(148.05179437788,1.734723475977E-15, + 11.391252570989)); +#11057 = CARTESIAN_POINT('',(138.1328861897,1.734723475977E-15, + 18.150729766175)); +#11058 = CARTESIAN_POINT('',(146.99301211269,11.632723593268, + 13.697924345631)); +#11059 = CARTESIAN_POINT('',(148.65062231131,1.734723475977E-15, + 12.71782538754)); +#11060 = CARTESIAN_POINT('',(138.49650605634,1.734723475977E-15, + 18.722930869386)); +#11061 = CARTESIAN_POINT('',(147.32989684466,11.545880822488, + 14.260690404231)); +#11062 = CARTESIAN_POINT('',(148.9139055339,1.734723475977E-15, + 13.391115487148)); +#11063 = CARTESIAN_POINT('',(138.66494842233,1.734723475977E-15, + 19.018422362035)); +#11064 = CARTESIAN_POINT('',(147.94695372927,11.367511232954, + 15.416576495551)); +#11065 = CARTESIAN_POINT('',(149.36805553321,1.734723475977E-15, + 14.750203706679)); +#11066 = CARTESIAN_POINT('',(138.97347686463,1.734723475977E-15, + 19.625343304119)); +#11067 = CARTESIAN_POINT('',(148.22712492982,11.275984689418, + 16.009694744795)); +#11068 = CARTESIAN_POINT('',(149.55958515329,3.469446951954E-15, + 15.435613606188)); +#11069 = CARTESIAN_POINT('',(139.11356246491,1.734723475977E-15, + 19.936771817103)); +#11070 = CARTESIAN_POINT('',(148.72805637062,11.089128991913, + 17.220573249339)); +#11071 = CARTESIAN_POINT('',(149.87207410596,3.469446951954E-15, + 16.811129875002)); +#11072 = CARTESIAN_POINT('',(139.36402818531,1.734723475977E-15, + 20.572567617611)); +#11073 = CARTESIAN_POINT('',(148.94881583795,10.993800126263, + 17.838331636266)); +#11074 = CARTESIAN_POINT('',(149.99373336211,3.469446951954E-15, + 17.501008167863)); +#11075 = CARTESIAN_POINT('',(139.47440791897,1.734723475977E-15, + 20.896933924108)); +#11076 = CARTESIAN_POINT('',(149.32879759133,10.800257843302, + 19.092541132087)); +#11077 = CARTESIAN_POINT('',(150.16893354779,3.469446951954E-15, + 18.878436777244)); +#11078 = CARTESIAN_POINT('',(139.66439879566,1.734723475977E-15, + 21.555481521916)); +#11079 = CARTESIAN_POINT('',(149.48801929108,10.702044724627, + 19.728990305732)); +#11080 = CARTESIAN_POINT('',(150.22317839573,3.029577662983E-13, + 19.56591124316)); +#11081 = CARTESIAN_POINT('',(139.74400964554,3.469446951954E-15, + 21.889661797079)); +#11082 = CARTESIAN_POINT('',(149.74339192504,10.503679774194, + 21.014452069777)); +#11083 = CARTESIAN_POINT('',(150.26642696106,-2.92874504344E-13, + 20.93225611312)); +#11084 = CARTESIAN_POINT('',(139.87169596252,3.469446951954E-15, + 22.564619018821)); +#11085 = CARTESIAN_POINT('',(149.83954246521,10.403528248517, + 21.663462676676)); +#11086 = CARTESIAN_POINT('',(150.25611098567,3.016045261966E-13, + 21.611189820518)); +#11087 = CARTESIAN_POINT('',(139.9197712326,1.734723475977E-15, + 22.90539492392)); +#11088 = CARTESIAN_POINT('',(149.96784660167,10.20225099352, + 22.967797009444)); +#11089 = CARTESIAN_POINT('',(150.17339995264,-2.95039033792E-13, + 22.954862899524)); +#11090 = CARTESIAN_POINT('',(139.98392330083,1.734723475977E-15, + 23.590261562581)); +#11091 = CARTESIAN_POINT('',(150.,10.101125646634,23.623118257036)); +#11092 = CARTESIAN_POINT('',(150.10163821701,1.734723475977E-15, + 23.619796659292)); +#11093 = CARTESIAN_POINT('',(139.99999999999,1.734723475977E-15, + 23.934350994872)); +#11094 = CARTESIAN_POINT('',(150.,10.,24.278441447094)); +#11095 = CARTESIAN_POINT('',(150.,1.734723475977E-15,24.278441447094)); +#11096 = CARTESIAN_POINT('',(140.,1.734723475977E-15,24.278441447094)); +#11097 = ADVANCED_FACE('',(#11098),#11110,.T.); +#11098 = FACE_BOUND('',#11099,.T.); +#11099 = EDGE_LOOP('',(#11100,#11107,#11108,#11109)); +#11100 = ORIENTED_EDGE('',*,*,#11101,.T.); +#11101 = EDGE_CURVE('',#10928,#6595,#11102,.T.); +#11102 = CIRCLE('',#11103,10.); +#11103 = AXIS2_PLACEMENT_3D('',#11104,#11105,#11106); +#11104 = CARTESIAN_POINT('',(140.,10.,130.)); +#11105 = DIRECTION('',(0.,0.,1.)); +#11106 = DIRECTION('',(1.,0.,-0.)); +#11107 = ORIENTED_EDGE('',*,*,#8420,.F.); +#11108 = ORIENTED_EDGE('',*,*,#10510,.T.); +#11109 = ORIENTED_EDGE('',*,*,#10935,.F.); +#11110 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,3,( + (#11111,#11112,#11113,#11114) + ,(#11115,#11116,#11117,#11118) + ,(#11119,#11120,#11121,#11122) + ,(#11123,#11124,#11125,#11126 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,4),(4,4),( + 0.,1.),(0.,1.),.PIECEWISE_BEZIER_KNOTS.) +GEOMETRIC_REPRESENTATION_ITEM() RATIONAL_B_SPLINE_SURFACE(( + (1.,0.804737854124,0.804737854124,1.) + ,(0.804737854124,0.647603013861,0.647603013861,0.804737854124) + ,(0.804737854124,0.647603013861,0.647603013861,0.804737854124) +,(1.,0.804737854124,0.804737854124,1. +))) REPRESENTATION_ITEM('') SURFACE() ); +#11111 = CARTESIAN_POINT('',(140.,-5.20417042793E-15,130.)); +#11112 = CARTESIAN_POINT('',(140.,-5.20417042793E-15,135.85786437626)); +#11113 = CARTESIAN_POINT('',(135.85786437626,-5.20417042793E-15,140.)); +#11114 = CARTESIAN_POINT('',(130.,-5.20417042793E-15,140.)); +#11115 = CARTESIAN_POINT('',(145.85786437626,-1.973658437279E-14,130.)); +#11116 = CARTESIAN_POINT('',(145.85786437626,-1.973658437279E-14, + 139.28932188134)); +#11117 = CARTESIAN_POINT('',(139.28932188134,-1.973658437279E-14, + 145.85786437626)); +#11118 = CARTESIAN_POINT('',(130.,-1.973658437279E-14,145.85786437626)); +#11119 = CARTESIAN_POINT('',(150.,4.142135623731,130.)); +#11120 = CARTESIAN_POINT('',(150.,4.142135623731,141.71572875253)); +#11121 = CARTESIAN_POINT('',(141.71572875253,4.142135623731,150.)); +#11122 = CARTESIAN_POINT('',(130.,4.142135623731,150.)); +#11123 = CARTESIAN_POINT('',(150.,10.,130.)); +#11124 = CARTESIAN_POINT('',(150.,10.,141.71572875253)); +#11125 = CARTESIAN_POINT('',(141.71572875253,10.,150.)); +#11126 = CARTESIAN_POINT('',(130.,10.,150.)); +#11127 = ADVANCED_FACE('',(#11128),#11148,.F.); +#11128 = FACE_BOUND('',#11129,.F.); +#11129 = EDGE_LOOP('',(#11130,#11131,#11132,#11141)); +#11130 = ORIENTED_EDGE('',*,*,#8396,.F.); +#11131 = ORIENTED_EDGE('',*,*,#10562,.T.); +#11132 = ORIENTED_EDGE('',*,*,#11133,.F.); +#11133 = EDGE_CURVE('',#11134,#10553,#11136,.T.); +#11134 = VERTEX_POINT('',#11135); +#11135 = CARTESIAN_POINT('',(140.,2.5,130.)); +#11136 = CIRCLE('',#11137,10.); +#11137 = AXIS2_PLACEMENT_3D('',#11138,#11139,#11140); +#11138 = CARTESIAN_POINT('',(130.,2.5,130.)); +#11139 = DIRECTION('',(0.,-1.,0.)); +#11140 = DIRECTION('',(0.,0.,-1.)); +#11141 = ORIENTED_EDGE('',*,*,#11142,.T.); +#11142 = EDGE_CURVE('',#11134,#7065,#11143,.T.); +#11143 = CIRCLE('',#11144,7.5); +#11144 = AXIS2_PLACEMENT_3D('',#11145,#11146,#11147); +#11145 = CARTESIAN_POINT('',(140.,10.,130.)); +#11146 = DIRECTION('',(6.123233995737E-17,0.,1.)); +#11147 = DIRECTION('',(-1.,0.,6.123233995737E-17)); +#11148 = TOROIDAL_SURFACE('',#11149,10.,7.5); +#11149 = AXIS2_PLACEMENT_3D('',#11150,#11151,#11152); +#11150 = CARTESIAN_POINT('',(130.,10.,130.)); +#11151 = DIRECTION('',(0.,-1.,0.)); +#11152 = DIRECTION('',(0.,0.,-1.)); +#11153 = ADVANCED_FACE('',(#11154,#11157,#11160,#11163,#11166,#11189), + #11192,.F.); +#11154 = FACE_BOUND('',#11155,.T.); +#11155 = EDGE_LOOP('',(#11156)); +#11156 = ORIENTED_EDGE('',*,*,#10872,.T.); +#11157 = FACE_BOUND('',#11158,.T.); +#11158 = EDGE_LOOP('',(#11159)); +#11159 = ORIENTED_EDGE('',*,*,#10840,.T.); +#11160 = FACE_BOUND('',#11161,.T.); +#11161 = EDGE_LOOP('',(#11162)); +#11162 = ORIENTED_EDGE('',*,*,#10808,.T.); +#11163 = FACE_BOUND('',#11164,.T.); +#11164 = EDGE_LOOP('',(#11165)); +#11165 = ORIENTED_EDGE('',*,*,#10776,.T.); +#11166 = FACE_BOUND('',#11167,.T.); +#11167 = EDGE_LOOP('',(#11168,#11176,#11183,#11184,#11185,#11186,#11187, + #11188)); +#11168 = ORIENTED_EDGE('',*,*,#11169,.F.); +#11169 = EDGE_CURVE('',#11170,#11134,#11172,.T.); +#11170 = VERTEX_POINT('',#11171); +#11171 = CARTESIAN_POINT('',(140.,2.5,24.278441447094)); +#11172 = LINE('',#11173,#11174); +#11173 = CARTESIAN_POINT('',(140.,2.5,0.)); +#11174 = VECTOR('',#11175,1.); +#11175 = DIRECTION('',(0.,0.,1.)); +#11176 = ORIENTED_EDGE('',*,*,#11177,.F.); +#11177 = EDGE_CURVE('',#10890,#11170,#11178,.T.); +#11178 = ELLIPSE('',#11179,10.514622242383,10.); +#11179 = AXIS2_PLACEMENT_3D('',#11180,#11181,#11182); +#11180 = CARTESIAN_POINT('',(130.,2.5,24.278441447094)); +#11181 = DIRECTION('',(0.,-1.,0.)); +#11182 = DIRECTION('',(0.,0.,1.)); +#11183 = ORIENTED_EDGE('',*,*,#10898,.F.); +#11184 = ORIENTED_EDGE('',*,*,#10637,.F.); +#11185 = ORIENTED_EDGE('',*,*,#10611,.F.); +#11186 = ORIENTED_EDGE('',*,*,#10585,.F.); +#11187 = ORIENTED_EDGE('',*,*,#10552,.F.); +#11188 = ORIENTED_EDGE('',*,*,#11133,.F.); +#11189 = FACE_BOUND('',#11190,.T.); +#11190 = EDGE_LOOP('',(#11191)); +#11191 = ORIENTED_EDGE('',*,*,#10534,.T.); +#11192 = PLANE('',#11193); +#11193 = AXIS2_PLACEMENT_3D('',#11194,#11195,#11196); +#11194 = CARTESIAN_POINT('',(75.,2.5,0.)); +#11195 = DIRECTION('',(0.,-1.,0.)); +#11196 = DIRECTION('',(0.,0.,-1.)); +#11197 = ADVANCED_FACE('',(#11198),#11210,.T.); +#11198 = FACE_BOUND('',#11199,.T.); +#11199 = EDGE_LOOP('',(#11200,#11201,#11202,#11209)); +#11200 = ORIENTED_EDGE('',*,*,#10889,.F.); +#11201 = ORIENTED_EDGE('',*,*,#11177,.T.); +#11202 = ORIENTED_EDGE('',*,*,#11203,.T.); +#11203 = EDGE_CURVE('',#11170,#7067,#11204,.T.); +#11204 = CIRCLE('',#11205,7.5); +#11205 = AXIS2_PLACEMENT_3D('',#11206,#11207,#11208); +#11206 = CARTESIAN_POINT('',(140.,10.,24.278441447094)); +#11207 = DIRECTION('',(0.,0.,1.)); +#11208 = DIRECTION('',(1.,0.,-0.)); +#11209 = ORIENTED_EDGE('',*,*,#8364,.T.); +#11210 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#11211,#11212,#11213) + ,(#11214,#11215,#11216) + ,(#11217,#11218,#11219) + ,(#11220,#11221,#11222) + ,(#11223,#11224,#11225) + ,(#11226,#11227,#11228) + ,(#11229,#11230,#11231) + ,(#11232,#11233,#11234) + ,(#11235,#11236,#11237) + ,(#11238,#11239,#11240) + ,(#11241,#11242,#11243) + ,(#11244,#11245,#11246) + ,(#11247,#11248,#11249) + ,(#11250,#11251,#11252) + ,(#11253,#11254,#11255) + ,(#11256,#11257,#11258) + ,(#11259,#11260,#11261) + ,(#11262,#11263,#11264) + ,(#11265,#11266,#11267) + ,(#11268,#11269,#11270) + ,(#11271,#11272,#11273) + ,(#11274,#11275,#11276) + ,(#11277,#11278,#11279) + ,(#11280,#11281,#11282) + ,(#11283,#11284,#11285) + ,(#11286,#11287,#11288) + ,(#11289,#11290,#11291) + ,(#11292,#11293,#11294) + ,(#11295,#11296,#11297) + ,(#11298,#11299,#11300) + ,(#11301,#11302,#11303) + ,(#11304,#11305,#11306) + ,(#11307,#11308,#11309) + ,(#11310,#11311,#11312 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.703531481009,1.) + ,(1.,0.6999289292,1.) + ,(1.,0.692702420366,1.) + ,(1.,0.689078440099,1.) + ,(1.,0.681843713095,1.) + ,(1.,0.678232974111,1.) + ,(1.,0.67106099054,1.) + ,(1.,0.667499756319,1.) + ,(1.,0.660464336519,1.) + ,(1.,0.656990164321,1.) + ,(1.,0.650167360408,1.) + ,(1.,0.646818745411,1.) + ,(1.,0.640286033873,1.) + ,(1.,0.63710195755,1.) + ,(1.,0.630937232756,1.) + ,(1.,0.627956607929,1.) + ,(1.,0.622236967303,1.) + ,(1.,0.619497978177,1.) + ,(1.,0.614298304101,1.) + ,(1.,0.611837648061,1.) + ,(1.,0.607229010897,1.) + ,(1.,0.605081059709,1.) + ,(1.,0.601128989674,1.) + ,(1.,0.599324900181,1.) + ,(1.,0.596087600756,1.) + ,(1.,0.594654417706,1.) + ,(1.,0.592181016258,1.) + ,(1.,0.591140820289,1.) + ,(1.,0.589469767943,1.) + ,(1.,0.588838927714,1.) + ,(1.,0.58799666566,1.) + ,(1.,0.587785146445,1.) +,(1.,0.587785252292,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#11211 = CARTESIAN_POINT('',(147.5,10.,24.278441447094)); +#11212 = CARTESIAN_POINT('',(147.5,2.5,24.278441447094)); +#11213 = CARTESIAN_POINT('',(140.,2.5,24.278441447094)); +#11214 = CARTESIAN_POINT('',(147.5,10.075844234976,23.700926441495)); +#11215 = CARTESIAN_POINT('',(147.57622882379,2.500000000001, + 23.697997999309)); +#11216 = CARTESIAN_POINT('',(139.99999999999,2.5,23.934350994872)); +#11217 = CARTESIAN_POINT('',(147.47186577646,10.15168824514, + 23.123413147728)); +#11218 = CARTESIAN_POINT('',(147.62598939304,2.5,23.113270628023)); +#11219 = CARTESIAN_POINT('',(139.98392330083,2.5,23.590261562581)); +#11220 = CARTESIAN_POINT('',(147.35959965705,10.302646186388, + 21.973945738488)); +#11221 = CARTESIAN_POINT('',(147.67198421888,2.5,21.934294548665)); +#11222 = CARTESIAN_POINT('',(139.9197712326,2.5,22.90539492392)); +#11223 = CARTESIAN_POINT('',(147.27546793441,10.377759830645, + 21.401993807039)); +#11224 = CARTESIAN_POINT('',(147.66766042419,2.5,21.339903935393)); +#11225 = CARTESIAN_POINT('',(139.87169596252,2.5,22.564619018821)); +#11226 = CARTESIAN_POINT('',(147.05201687969,10.526533543471, + 20.269158178568)); +#11227 = CARTESIAN_POINT('',(147.60330153191,2.5,20.146401278037)); +#11228 = CARTESIAN_POINT('',(139.74400964554,2.5,21.889661797079)); +#11229 = CARTESIAN_POINT('',(146.91269789241,10.600193382477, + 19.708276229544)); +#11230 = CARTESIAN_POINT('',(147.54267429344,2.5,19.547262724644)); +#11231 = CARTESIAN_POINT('',(139.66439879566,2.5,21.555481521916)); +#11232 = CARTESIAN_POINT('',(146.5802138582,10.745350094697, + 18.602982208226)); +#11233 = CARTESIAN_POINT('',(147.36377509302,2.5,18.349549716528)); +#11234 = CARTESIAN_POINT('',(139.47440791897,2.5,20.896933924108)); +#11235 = CARTESIAN_POINT('',(146.3870493243,10.816846743934, + 18.058571841407)); +#11236 = CARTESIAN_POINT('',(147.24489763216,2.5,17.751070481815)); +#11237 = CARTESIAN_POINT('',(139.36402818531,2.5,20.572567617611)); +#11238 = CARTESIAN_POINT('',(145.94873431359,10.956988517064, + 16.991464012872)); +#11239 = CARTESIAN_POINT('',(146.94791272999,2.5,16.560479868616)); +#11240 = CARTESIAN_POINT('',(139.11356246491,2.5,19.936771817103)); +#11241 = CARTESIAN_POINT('',(145.70358451311,11.025633424715, + 16.468768197695)); +#11242 = CARTESIAN_POINT('',(146.76921061297,2.5,15.968594678665)); +#11243 = CARTESIAN_POINT('',(138.97347686463,2.5,19.625343304119)); +#11244 = CARTESIAN_POINT('',(145.16365973907,11.159410616867, + 15.45012339368)); +#11245 = CARTESIAN_POINT('',(146.35146390146,2.5,14.797544144651)); +#11246 = CARTESIAN_POINT('',(138.66494842233,2.5,19.018422362035)); +#11247 = CARTESIAN_POINT('',(144.8688855986,11.224542694951, + 14.95417597657)); +#11248 = CARTESIAN_POINT('',(146.11186371807,2.5,14.21874056478)); +#11249 = CARTESIAN_POINT('',(138.49650605634,2.5,18.722930869386)); +#11250 = CARTESIAN_POINT('',(144.23255083198,11.350666958628, + 13.993804303398)); +#11251 = CARTESIAN_POINT('',(145.57183545949,2.5,13.08075699138)); +#11252 = CARTESIAN_POINT('',(138.1328861897,2.5,18.150729766175)); +#11253 = CARTESIAN_POINT('',(143.89099118762,11.411658949627, + 13.529381529095)); +#11254 = CARTESIAN_POINT('',(145.2709225682,2.5,12.52207261451)); +#11255 = CARTESIAN_POINT('',(137.93770925007,2.5,17.874021038468)); +#11256 = CARTESIAN_POINT('',(143.16437468006,11.528915639232, + 12.636531890957)); +#11257 = CARTESIAN_POINT('',(144.60859045781,2.5,11.431746301597)); +#11258 = CARTESIAN_POINT('',(137.52249981718,2.5,17.34205038355)); +#11259 = CARTESIAN_POINT('',(142.77931893792,11.585180156927, + 12.208106404668)); +#11260 = CARTESIAN_POINT('',(144.24679095802,2.5,10.900724016569)); +#11261 = CARTESIAN_POINT('',(137.30246796453,2.5,17.086789277099)); +#11262 = CARTESIAN_POINT('',(141.9694184036,11.692440026439, + 11.391377431654)); +#11263 = CARTESIAN_POINT('',(143.46400971049,2.5,9.873564984632)); +#11264 = CARTESIAN_POINT('',(136.8396676592,2.5,16.600172238683)); +#11265 = CARTESIAN_POINT('',(141.54457486095,11.74343521277, + 11.003075205009)); +#11266 = CARTESIAN_POINT('',(143.04278587682,2.5,9.378152454082)); +#11267 = CARTESIAN_POINT('',(136.59689992054,2.5,16.368817057483)); +#11268 = CARTESIAN_POINT('',(140.65919008477,11.839665291008, + 10.270332443612)); +#11269 = CARTESIAN_POINT('',(142.14367702423,2.5,8.430323135272)); +#11270 = CARTESIAN_POINT('',(136.09096576272,2.5,15.932240023662)); +#11271 = CARTESIAN_POINT('',(140.19865021717,11.884900034454, + 9.92589303932)); +#11272 = CARTESIAN_POINT('',(141.66571861908,2.5,7.978705055031)); +#11273 = CARTESIAN_POINT('',(135.8278001241,2.5,15.727018844581)); +#11274 = CARTESIAN_POINT('',(139.24630793851,11.969173573163, + 9.284193202879)); +#11275 = CARTESIAN_POINT('',(140.65702865149,2.5,7.126611860353)); +#11276 = CARTESIAN_POINT('',(135.28360453629,2.5,15.344686290844)); +#11277 = CARTESIAN_POINT('',(138.75450699665,12.008212238415, + 8.986933760701)); +#11278 = CARTESIAN_POINT('',(140.12641598787,2.5,6.726969382853)); +#11279 = CARTESIAN_POINT('',(135.00257542665,2.5,15.167575506025)); +#11280 = CARTESIAN_POINT('',(137.74437879225,12.079717637349, + 8.442456769426)); +#11281 = CARTESIAN_POINT('',(139.01778964815,2.5,5.986710882474)); +#11282 = CARTESIAN_POINT('',(134.42535930986,2.5,14.843169503869)); +#11283 = CARTESIAN_POINT('',(137.22605308805,12.112184260719, + 8.195240060293)); +#11284 = CARTESIAN_POINT('',(138.44009975882,2.5,5.646911997394)); +#11285 = CARTESIAN_POINT('',(134.12917319317,2.5,14.695874786989)); +#11286 = CARTESIAN_POINT('',(136.16786704472,12.170232883798, + 7.753229525246)); +#11287 = CARTESIAN_POINT('',(137.24421008512,2.5,5.033603300746)); +#11288 = CARTESIAN_POINT('',(133.52449545412,2.5,14.432519543549)); +#11289 = CARTESIAN_POINT('',(135.62800833804,12.195814793956, + 7.558436381212)); +#11290 = CARTESIAN_POINT('',(136.62653691856,2.500000000001, + 4.760840223209)); +#11291 = CARTESIAN_POINT('',(133.21600476459,2.5,14.316459423254)); +#11292 = CARTESIAN_POINT('',(134.53195536585,12.239847601206, + 7.223149105474)); +#11293 = CARTESIAN_POINT('',(135.35901840538,2.499999999999, + 4.287858858618)); +#11294 = CARTESIAN_POINT('',(132.58968878049,2.5,14.116691193488)); +#11295 = CARTESIAN_POINT('',(133.97576279116,12.258298430371,7.082655491 + )); +#11296 = CARTESIAN_POINT('',(134.70988335601,2.5,4.088261581935)); +#11297 = CARTESIAN_POINT('',(132.27186445209,2.5,14.032983392184)); +#11298 = CARTESIAN_POINT('',(132.85239847939,12.28789136179, + 6.857320474322)); +#11299 = CARTESIAN_POINT('',(133.38903185588,2.5,3.766484613621)); +#11300 = CARTESIAN_POINT('',(131.62994198822,2.5,13.898726053347)); +#11301 = CARTESIAN_POINT('',(132.28522847523,12.299033418391, + 6.772479419721)); +#11302 = CARTESIAN_POINT('',(132.71817277153,2.5,3.644750654256)); +#11303 = CARTESIAN_POINT('',(131.30584484299,2.5,13.848176722919)); +#11304 = CARTESIAN_POINT('',(131.1453714363,12.31390147787, + 6.659266761489)); +#11305 = CARTESIAN_POINT('',(131.36440498824,2.5,3.481869261873)); +#11306 = CARTESIAN_POINT('',(130.6544979636,2.5,13.780723246575)); +#11307 = CARTESIAN_POINT('',(130.5726865668,12.317627457812, + 6.630895332498)); +#11308 = CARTESIAN_POINT('',(130.68245268109,2.5,3.44095480118)); +#11309 = CARTESIAN_POINT('',(130.32724946674,2.5,13.763819204712)); +#11310 = CARTESIAN_POINT('',(130.,12.317627457812,6.630895332498)); +#11311 = CARTESIAN_POINT('',(130.,2.5,3.440954801178)); +#11312 = CARTESIAN_POINT('',(130.,2.5,13.763819204712)); +#11313 = ADVANCED_FACE('',(#11314),#11320,.T.); +#11314 = FACE_BOUND('',#11315,.T.); +#11315 = EDGE_LOOP('',(#11316,#11317,#11318,#11319)); +#11316 = ORIENTED_EDGE('',*,*,#10987,.T.); +#11317 = ORIENTED_EDGE('',*,*,#6602,.F.); +#11318 = ORIENTED_EDGE('',*,*,#11101,.F.); +#11319 = ORIENTED_EDGE('',*,*,#10925,.F.); +#11320 = CYLINDRICAL_SURFACE('',#11321,10.); +#11321 = AXIS2_PLACEMENT_3D('',#11322,#11323,#11324); +#11322 = CARTESIAN_POINT('',(140.,10.,0.)); +#11323 = DIRECTION('',(0.,0.,1.)); +#11324 = DIRECTION('',(1.,0.,-0.)); +#11325 = ADVANCED_FACE('',(#11326),#11332,.F.); +#11326 = FACE_BOUND('',#11327,.F.); +#11327 = EDGE_LOOP('',(#11328,#11329,#11330,#11331)); +#11328 = ORIENTED_EDGE('',*,*,#7064,.F.); +#11329 = ORIENTED_EDGE('',*,*,#11142,.F.); +#11330 = ORIENTED_EDGE('',*,*,#11169,.F.); +#11331 = ORIENTED_EDGE('',*,*,#11203,.T.); +#11332 = CYLINDRICAL_SURFACE('',#11333,7.5); +#11333 = AXIS2_PLACEMENT_3D('',#11334,#11335,#11336); +#11334 = CARTESIAN_POINT('',(140.,10.,0.)); +#11335 = DIRECTION('',(0.,0.,1.)); +#11336 = DIRECTION('',(1.,0.,-0.)); +#11337 = ADVANCED_FACE('',(#11338),#11354,.F.); +#11338 = FACE_BOUND('',#11339,.F.); +#11339 = EDGE_LOOP('',(#11340,#11346,#11347,#11353)); +#11340 = ORIENTED_EDGE('',*,*,#11341,.F.); +#11341 = EDGE_CURVE('',#7304,#6203,#11342,.T.); +#11342 = LINE('',#11343,#11344); +#11343 = CARTESIAN_POINT('',(151.63,81.120449921805,113.87081213738)); +#11344 = VECTOR('',#11345,1.); +#11345 = DIRECTION('',(-1.,0.,0.)); +#11346 = ORIENTED_EDGE('',*,*,#7311,.F.); +#11347 = ORIENTED_EDGE('',*,*,#11348,.T.); +#11348 = EDGE_CURVE('',#7287,#6193,#11349,.T.); +#11349 = LINE('',#11350,#11351); +#11350 = CARTESIAN_POINT('',(151.63,82.356517899305,110.0665860722)); +#11351 = VECTOR('',#11352,1.); +#11352 = DIRECTION('',(-1.,0.,0.)); +#11353 = ORIENTED_EDGE('',*,*,#6202,.F.); +#11354 = CYLINDRICAL_SURFACE('',#11355,2.); +#11355 = AXIS2_PLACEMENT_3D('',#11356,#11357,#11358); +#11356 = CARTESIAN_POINT('',(151.63,81.738483910555,111.96869910479)); +#11357 = DIRECTION('',(-1.,0.,0.)); +#11358 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11359 = ADVANCED_FACE('',(#11360),#11371,.F.); +#11360 = FACE_BOUND('',#11361,.T.); +#11361 = EDGE_LOOP('',(#11362,#11363,#11364,#11365)); +#11362 = ORIENTED_EDGE('',*,*,#6211,.T.); +#11363 = ORIENTED_EDGE('',*,*,#11341,.F.); +#11364 = ORIENTED_EDGE('',*,*,#7303,.T.); +#11365 = ORIENTED_EDGE('',*,*,#11366,.F.); +#11366 = EDGE_CURVE('',#6212,#7295,#11367,.T.); +#11367 = LINE('',#11368,#11369); +#11368 = CARTESIAN_POINT('',(151.63,43.078189269999,101.51013236238)); +#11369 = VECTOR('',#11370,1.); +#11370 = DIRECTION('',(1.,0.,0.)); +#11371 = PLANE('',#11372); +#11372 = AXIS2_PLACEMENT_3D('',#11373,#11374,#11375); +#11373 = CARTESIAN_POINT('',(151.63,41.176076237409,100.89209837363)); +#11374 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11375 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11376 = ADVANCED_FACE('',(#11377),#11388,.F.); +#11377 = FACE_BOUND('',#11378,.F.); +#11378 = EDGE_LOOP('',(#11379,#11385,#11386,#11387)); +#11379 = ORIENTED_EDGE('',*,*,#11380,.T.); +#11380 = EDGE_CURVE('',#6195,#7285,#11381,.T.); +#11381 = LINE('',#11382,#11383); +#11382 = CARTESIAN_POINT('',(151.63,44.314257247499,97.705906297207)); +#11383 = VECTOR('',#11384,1.); +#11384 = DIRECTION('',(1.,0.,0.)); +#11385 = ORIENTED_EDGE('',*,*,#7294,.F.); +#11386 = ORIENTED_EDGE('',*,*,#11366,.F.); +#11387 = ORIENTED_EDGE('',*,*,#6219,.F.); +#11388 = CYLINDRICAL_SURFACE('',#11389,2.); +#11389 = AXIS2_PLACEMENT_3D('',#11390,#11391,#11392); +#11390 = CARTESIAN_POINT('',(151.63,43.696223258749,99.608019329798)); +#11391 = DIRECTION('',(-1.,0.,0.)); +#11392 = DIRECTION('',(0.,0.,1.)); +#11393 = ADVANCED_FACE('',(#11394),#11400,.F.); +#11394 = FACE_BOUND('',#11395,.T.); +#11395 = EDGE_LOOP('',(#11396,#11397,#11398,#11399)); +#11396 = ORIENTED_EDGE('',*,*,#6192,.T.); +#11397 = ORIENTED_EDGE('',*,*,#11380,.T.); +#11398 = ORIENTED_EDGE('',*,*,#7284,.T.); +#11399 = ORIENTED_EDGE('',*,*,#11348,.T.); +#11400 = PLANE('',#11401); +#11401 = AXIS2_PLACEMENT_3D('',#11402,#11403,#11404); +#11402 = CARTESIAN_POINT('',(151.63,63.335387573402,103.8862461847)); +#11403 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11404 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11405 = ADVANCED_FACE('',(#11406),#11422,.F.); +#11406 = FACE_BOUND('',#11407,.F.); +#11407 = EDGE_LOOP('',(#11408,#11409,#11415,#11416)); +#11408 = ORIENTED_EDGE('',*,*,#6281,.T.); +#11409 = ORIENTED_EDGE('',*,*,#11410,.T.); +#11410 = EDGE_CURVE('',#6282,#7355,#11411,.T.); +#11411 = LINE('',#11412,#11413); +#11412 = CARTESIAN_POINT('',(151.63,45.643292420841,64.490944826388)); +#11413 = VECTOR('',#11414,1.); +#11414 = DIRECTION('',(1.,0.,0.)); +#11415 = ORIENTED_EDGE('',*,*,#7354,.T.); +#11416 = ORIENTED_EDGE('',*,*,#11417,.F.); +#11417 = EDGE_CURVE('',#6274,#7357,#11418,.T.); +#11418 = LINE('',#11419,#11420); +#11419 = CARTESIAN_POINT('',(151.63,44.407224443341,68.295170891569)); +#11420 = VECTOR('',#11421,1.); +#11421 = DIRECTION('',(1.,0.,0.)); +#11422 = CYLINDRICAL_SURFACE('',#11423,2.); +#11423 = AXIS2_PLACEMENT_3D('',#11424,#11425,#11426); +#11424 = CARTESIAN_POINT('',(151.63,45.025258432091,66.393057858978)); +#11425 = DIRECTION('',(-1.,0.,0.)); +#11426 = DIRECTION('',(0.,0.,1.)); +#11427 = ADVANCED_FACE('',(#11428),#11439,.T.); +#11428 = FACE_BOUND('',#11429,.T.); +#11429 = EDGE_LOOP('',(#11430,#11431,#11432,#11438)); +#11430 = ORIENTED_EDGE('',*,*,#11410,.T.); +#11431 = ORIENTED_EDGE('',*,*,#7382,.F.); +#11432 = ORIENTED_EDGE('',*,*,#11433,.T.); +#11433 = EDGE_CURVE('',#7374,#6263,#11434,.T.); +#11434 = LINE('',#11435,#11436); +#11435 = CARTESIAN_POINT('',(151.63,100.80457036596,82.413930500135)); +#11436 = VECTOR('',#11437,1.); +#11437 = DIRECTION('',(-1.,0.,0.)); +#11438 = ORIENTED_EDGE('',*,*,#6290,.F.); +#11439 = PLANE('',#11440); +#11440 = AXIS2_PLACEMENT_3D('',#11441,#11442,#11443); +#11441 = CARTESIAN_POINT('',(151.63,102.70668339855,83.031964488885)); +#11442 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11443 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11444 = ADVANCED_FACE('',(#11445),#11456,.F.); +#11445 = FACE_BOUND('',#11446,.F.); +#11446 = EDGE_LOOP('',(#11447,#11448,#11454,#11455)); +#11447 = ORIENTED_EDGE('',*,*,#6262,.T.); +#11448 = ORIENTED_EDGE('',*,*,#11449,.F.); +#11449 = EDGE_CURVE('',#7366,#6265,#11450,.T.); +#11450 = LINE('',#11451,#11452); +#11451 = CARTESIAN_POINT('',(151.63,99.56850238846,86.218156565315)); +#11452 = VECTOR('',#11453,1.); +#11453 = DIRECTION('',(-1.,0.,0.)); +#11454 = ORIENTED_EDGE('',*,*,#7373,.T.); +#11455 = ORIENTED_EDGE('',*,*,#11433,.T.); +#11456 = CYLINDRICAL_SURFACE('',#11457,2.); +#11457 = AXIS2_PLACEMENT_3D('',#11458,#11459,#11460); +#11458 = CARTESIAN_POINT('',(151.63,100.18653637721,84.316043532725)); +#11459 = DIRECTION('',(-1.,0.,0.)); +#11460 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11461 = ADVANCED_FACE('',(#11462),#11468,.T.); +#11462 = FACE_BOUND('',#11463,.T.); +#11463 = EDGE_LOOP('',(#11464,#11465,#11466,#11467)); +#11464 = ORIENTED_EDGE('',*,*,#11449,.F.); +#11465 = ORIENTED_EDGE('',*,*,#7365,.F.); +#11466 = ORIENTED_EDGE('',*,*,#11417,.F.); +#11467 = ORIENTED_EDGE('',*,*,#6273,.F.); +#11468 = PLANE('',#11469); +#11469 = AXIS2_PLACEMENT_3D('',#11470,#11471,#11472); +#11470 = CARTESIAN_POINT('',(151.63,71.987863415901,77.256663728442)); +#11471 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11472 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11473 = ADVANCED_FACE('',(#11474),#11490,.F.); +#11474 = FACE_BOUND('',#11475,.F.); +#11475 = EDGE_LOOP('',(#11476,#11477,#11483,#11484)); +#11476 = ORIENTED_EDGE('',*,*,#6317,.T.); +#11477 = ORIENTED_EDGE('',*,*,#11478,.T.); +#11478 = EDGE_CURVE('',#6318,#7391,#11479,.T.); +#11479 = LINE('',#11480,#11481); +#11480 = CARTESIAN_POINT('',(151.63,42.220099949546,71.790379962374)); +#11481 = VECTOR('',#11482,1.); +#11482 = DIRECTION('',(1.,0.,0.)); +#11483 = ORIENTED_EDGE('',*,*,#7390,.T.); +#11484 = ORIENTED_EDGE('',*,*,#11485,.F.); +#11485 = EDGE_CURVE('',#6310,#7393,#11486,.T.); +#11486 = LINE('',#11487,#11488); +#11487 = CARTESIAN_POINT('',(151.63,40.984031972046,75.594606027555)); +#11488 = VECTOR('',#11489,1.); +#11489 = DIRECTION('',(1.,0.,0.)); +#11490 = CYLINDRICAL_SURFACE('',#11491,2.); +#11491 = AXIS2_PLACEMENT_3D('',#11492,#11493,#11494); +#11492 = CARTESIAN_POINT('',(151.63,41.602065960796,73.692492994964)); +#11493 = DIRECTION('',(-1.,0.,0.)); +#11494 = DIRECTION('',(0.,0.,1.)); +#11495 = ADVANCED_FACE('',(#11496),#11507,.T.); +#11496 = FACE_BOUND('',#11497,.T.); +#11497 = EDGE_LOOP('',(#11498,#11499,#11500,#11506)); +#11498 = ORIENTED_EDGE('',*,*,#11478,.T.); +#11499 = ORIENTED_EDGE('',*,*,#7418,.F.); +#11500 = ORIENTED_EDGE('',*,*,#11501,.T.); +#11501 = EDGE_CURVE('',#7410,#6299,#11502,.T.); +#11502 = LINE('',#11503,#11504); +#11503 = CARTESIAN_POINT('',(151.63,99.283490927255,90.331399624871)); +#11504 = VECTOR('',#11505,1.); +#11505 = DIRECTION('',(-1.,0.,0.)); +#11506 = ORIENTED_EDGE('',*,*,#6326,.F.); +#11507 = PLANE('',#11508); +#11508 = AXIS2_PLACEMENT_3D('',#11509,#11510,#11511); +#11509 = CARTESIAN_POINT('',(151.63,101.18560395984,90.949433613621)); +#11510 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11511 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11512 = ADVANCED_FACE('',(#11513),#11524,.F.); +#11513 = FACE_BOUND('',#11514,.F.); +#11514 = EDGE_LOOP('',(#11515,#11516,#11522,#11523)); +#11515 = ORIENTED_EDGE('',*,*,#6298,.T.); +#11516 = ORIENTED_EDGE('',*,*,#11517,.F.); +#11517 = EDGE_CURVE('',#7402,#6301,#11518,.T.); +#11518 = LINE('',#11519,#11520); +#11519 = CARTESIAN_POINT('',(151.63,98.047422949756,94.135625690052)); +#11520 = VECTOR('',#11521,1.); +#11521 = DIRECTION('',(-1.,0.,0.)); +#11522 = ORIENTED_EDGE('',*,*,#7409,.T.); +#11523 = ORIENTED_EDGE('',*,*,#11501,.T.); +#11524 = CYLINDRICAL_SURFACE('',#11525,2.); +#11525 = AXIS2_PLACEMENT_3D('',#11526,#11527,#11528); +#11526 = CARTESIAN_POINT('',(151.63,98.665456938505,92.233512657461)); +#11527 = DIRECTION('',(-1.,0.,0.)); +#11528 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11529 = ADVANCED_FACE('',(#11530),#11536,.T.); +#11530 = FACE_BOUND('',#11531,.T.); +#11531 = EDGE_LOOP('',(#11532,#11533,#11534,#11535)); +#11532 = ORIENTED_EDGE('',*,*,#11517,.F.); +#11533 = ORIENTED_EDGE('',*,*,#7401,.F.); +#11534 = ORIENTED_EDGE('',*,*,#11485,.F.); +#11535 = ORIENTED_EDGE('',*,*,#6309,.F.); +#11536 = PLANE('',#11537); +#11537 = AXIS2_PLACEMENT_3D('',#11538,#11539,#11540); +#11538 = CARTESIAN_POINT('',(151.63,69.515727460901,84.865115858803)); +#11539 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11540 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11541 = ADVANCED_FACE('',(#11542),#11558,.F.); +#11542 = FACE_BOUND('',#11543,.F.); +#11543 = EDGE_LOOP('',(#11544,#11545,#11551,#11552)); +#11544 = ORIENTED_EDGE('',*,*,#6353,.T.); +#11545 = ORIENTED_EDGE('',*,*,#11546,.T.); +#11546 = EDGE_CURVE('',#6354,#7427,#11547,.T.); +#11547 = LINE('',#11548,#11549); +#11548 = CARTESIAN_POINT('',(151.63,73.031887128038,48.154945317178)); +#11549 = VECTOR('',#11550,1.); +#11550 = DIRECTION('',(1.,0.,0.)); +#11551 = ORIENTED_EDGE('',*,*,#7426,.T.); +#11552 = ORIENTED_EDGE('',*,*,#11553,.F.); +#11553 = EDGE_CURVE('',#6346,#7429,#11554,.T.); +#11554 = LINE('',#11555,#11556); +#11555 = CARTESIAN_POINT('',(151.63,71.795819150538,51.959171382359)); +#11556 = VECTOR('',#11557,1.); +#11557 = DIRECTION('',(1.,0.,0.)); +#11558 = CYLINDRICAL_SURFACE('',#11559,2.); +#11559 = AXIS2_PLACEMENT_3D('',#11560,#11561,#11562); +#11560 = CARTESIAN_POINT('',(151.63,72.413853139288,50.057058349768)); +#11561 = DIRECTION('',(-1.,0.,0.)); +#11562 = DIRECTION('',(0.,0.,1.)); +#11563 = ADVANCED_FACE('',(#11564),#11575,.T.); +#11564 = FACE_BOUND('',#11565,.T.); +#11565 = EDGE_LOOP('',(#11566,#11567,#11568,#11574)); +#11566 = ORIENTED_EDGE('',*,*,#11546,.T.); +#11567 = ORIENTED_EDGE('',*,*,#7454,.F.); +#11568 = ORIENTED_EDGE('',*,*,#11569,.T.); +#11569 = EDGE_CURVE('',#7446,#6335,#11570,.T.); +#11570 = LINE('',#11571,#11572); +#11571 = CARTESIAN_POINT('',(151.63,88.24879138876,53.099217227177)); +#11572 = VECTOR('',#11573,1.); +#11573 = DIRECTION('',(-1.,0.,0.)); +#11574 = ORIENTED_EDGE('',*,*,#6362,.F.); +#11575 = PLANE('',#11576); +#11576 = AXIS2_PLACEMENT_3D('',#11577,#11578,#11579); +#11577 = CARTESIAN_POINT('',(151.63,90.150904421351,53.717251215927)); +#11578 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11579 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11580 = ADVANCED_FACE('',(#11581),#11592,.F.); +#11581 = FACE_BOUND('',#11582,.F.); +#11582 = EDGE_LOOP('',(#11583,#11584,#11590,#11591)); +#11583 = ORIENTED_EDGE('',*,*,#6334,.T.); +#11584 = ORIENTED_EDGE('',*,*,#11585,.F.); +#11585 = EDGE_CURVE('',#7438,#6337,#11586,.T.); +#11586 = LINE('',#11587,#11588); +#11587 = CARTESIAN_POINT('',(151.63,87.01272341126,56.903443292358)); +#11588 = VECTOR('',#11589,1.); +#11589 = DIRECTION('',(-1.,0.,0.)); +#11590 = ORIENTED_EDGE('',*,*,#7445,.T.); +#11591 = ORIENTED_EDGE('',*,*,#11569,.T.); +#11592 = CYLINDRICAL_SURFACE('',#11593,2.); +#11593 = AXIS2_PLACEMENT_3D('',#11594,#11595,#11596); +#11594 = CARTESIAN_POINT('',(151.63,87.63075740001,55.001330259768)); +#11595 = DIRECTION('',(-1.,0.,0.)); +#11596 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11597 = ADVANCED_FACE('',(#11598),#11604,.T.); +#11598 = FACE_BOUND('',#11599,.T.); +#11599 = EDGE_LOOP('',(#11600,#11601,#11602,#11603)); +#11600 = ORIENTED_EDGE('',*,*,#11585,.F.); +#11601 = ORIENTED_EDGE('',*,*,#7437,.F.); +#11602 = ORIENTED_EDGE('',*,*,#11553,.F.); +#11603 = ORIENTED_EDGE('',*,*,#6345,.F.); +#11604 = PLANE('',#11605); +#11605 = AXIS2_PLACEMENT_3D('',#11606,#11607,#11608); +#11606 = CARTESIAN_POINT('',(151.63,79.404271280899,54.431307337358)); +#11607 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11608 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11609 = ADVANCED_FACE('',(#11610),#11626,.F.); +#11610 = FACE_BOUND('',#11611,.F.); +#11611 = EDGE_LOOP('',(#11612,#11613,#11619,#11620)); +#11612 = ORIENTED_EDGE('',*,*,#6389,.T.); +#11613 = ORIENTED_EDGE('',*,*,#11614,.T.); +#11614 = EDGE_CURVE('',#6390,#7463,#11615,.T.); +#11615 = LINE('',#11616,#11617); +#11616 = CARTESIAN_POINT('',(151.63,50.968597924726,57.809543679152)); +#11617 = VECTOR('',#11618,1.); +#11618 = DIRECTION('',(1.,0.,0.)); +#11619 = ORIENTED_EDGE('',*,*,#7462,.T.); +#11620 = ORIENTED_EDGE('',*,*,#11621,.F.); +#11621 = EDGE_CURVE('',#6382,#7465,#11622,.T.); +#11622 = LINE('',#11623,#11624); +#11623 = CARTESIAN_POINT('',(151.63,49.732529947226,61.613769744332)); +#11624 = VECTOR('',#11625,1.); +#11625 = DIRECTION('',(1.,0.,0.)); +#11626 = CYLINDRICAL_SURFACE('',#11627,2.); +#11627 = AXIS2_PLACEMENT_3D('',#11628,#11629,#11630); +#11628 = CARTESIAN_POINT('',(151.63,50.350563935976,59.711656711742)); +#11629 = DIRECTION('',(-1.,0.,0.)); +#11630 = DIRECTION('',(0.,0.,1.)); +#11631 = ADVANCED_FACE('',(#11632),#11643,.T.); +#11632 = FACE_BOUND('',#11633,.T.); +#11633 = EDGE_LOOP('',(#11634,#11635,#11636,#11642)); +#11634 = ORIENTED_EDGE('',*,*,#11614,.T.); +#11635 = ORIENTED_EDGE('',*,*,#7490,.F.); +#11636 = ORIENTED_EDGE('',*,*,#11637,.T.); +#11637 = EDGE_CURVE('',#7482,#6371,#11638,.T.); +#11638 = LINE('',#11639,#11640); +#11639 = CARTESIAN_POINT('',(151.63,100.42353677207,73.878427386649)); +#11640 = VECTOR('',#11641,1.); +#11641 = DIRECTION('',(-1.,0.,0.)); +#11642 = ORIENTED_EDGE('',*,*,#6398,.F.); +#11643 = PLANE('',#11644); +#11644 = AXIS2_PLACEMENT_3D('',#11645,#11646,#11647); +#11645 = CARTESIAN_POINT('',(151.63,102.32564980466,74.496461375399)); +#11646 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11647 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11648 = ADVANCED_FACE('',(#11649),#11660,.F.); +#11649 = FACE_BOUND('',#11650,.F.); +#11650 = EDGE_LOOP('',(#11651,#11652,#11658,#11659)); +#11651 = ORIENTED_EDGE('',*,*,#6370,.T.); +#11652 = ORIENTED_EDGE('',*,*,#11653,.F.); +#11653 = EDGE_CURVE('',#7474,#6373,#11654,.T.); +#11654 = LINE('',#11655,#11656); +#11655 = CARTESIAN_POINT('',(151.63,99.187468794574,77.682653451829)); +#11656 = VECTOR('',#11657,1.); +#11657 = DIRECTION('',(-1.,0.,0.)); +#11658 = ORIENTED_EDGE('',*,*,#7481,.T.); +#11659 = ORIENTED_EDGE('',*,*,#11637,.T.); +#11660 = CYLINDRICAL_SURFACE('',#11661,2.); +#11661 = AXIS2_PLACEMENT_3D('',#11662,#11663,#11664); +#11662 = CARTESIAN_POINT('',(151.63,99.805502783324,75.780540419239)); +#11663 = DIRECTION('',(-1.,0.,0.)); +#11664 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11665 = ADVANCED_FACE('',(#11666),#11672,.T.); +#11666 = FACE_BOUND('',#11667,.T.); +#11667 = EDGE_LOOP('',(#11668,#11669,#11670,#11671)); +#11668 = ORIENTED_EDGE('',*,*,#11653,.F.); +#11669 = ORIENTED_EDGE('',*,*,#7473,.F.); +#11670 = ORIENTED_EDGE('',*,*,#11621,.F.); +#11671 = ORIENTED_EDGE('',*,*,#6381,.F.); +#11672 = PLANE('',#11673); +#11673 = AXIS2_PLACEMENT_3D('',#11674,#11675,#11676); +#11674 = CARTESIAN_POINT('',(151.63,74.4599993709,69.648211598081)); +#11675 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11676 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11677 = ADVANCED_FACE('',(#11678),#11694,.F.); +#11678 = FACE_BOUND('',#11679,.F.); +#11679 = EDGE_LOOP('',(#11680,#11681,#11687,#11688)); +#11680 = ORIENTED_EDGE('',*,*,#6406,.T.); +#11681 = ORIENTED_EDGE('',*,*,#11682,.F.); +#11682 = EDGE_CURVE('',#7510,#6409,#11683,.T.); +#11683 = LINE('',#11684,#11685); +#11684 = CARTESIAN_POINT('',(151.63,67.235635771264,117.77106033524)); +#11685 = VECTOR('',#11686,1.); +#11686 = DIRECTION('',(-1.,0.,0.)); +#11687 = ORIENTED_EDGE('',*,*,#7517,.T.); +#11688 = ORIENTED_EDGE('',*,*,#11689,.T.); +#11689 = EDGE_CURVE('',#7518,#6407,#11690,.T.); +#11690 = LINE('',#11691,#11692); +#11691 = CARTESIAN_POINT('',(151.63,68.471703748764,113.96683427006)); +#11692 = VECTOR('',#11693,1.); +#11693 = DIRECTION('',(-1.,0.,0.)); +#11694 = CYLINDRICAL_SURFACE('',#11695,2.); +#11695 = AXIS2_PLACEMENT_3D('',#11696,#11697,#11698); +#11696 = CARTESIAN_POINT('',(151.63,67.853669760014,115.86894730265)); +#11697 = DIRECTION('',(-1.,0.,0.)); +#11698 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11699 = ADVANCED_FACE('',(#11700),#11711,.T.); +#11700 = FACE_BOUND('',#11701,.T.); +#11701 = EDGE_LOOP('',(#11702,#11708,#11709,#11710)); +#11702 = ORIENTED_EDGE('',*,*,#11703,.T.); +#11703 = EDGE_CURVE('',#6426,#7499,#11704,.T.); +#11704 = LINE('',#11705,#11706); +#11705 = CARTESIAN_POINT('',(151.63,53.254799488041,109.02256236006)); +#11706 = VECTOR('',#11707,1.); +#11707 = DIRECTION('',(1.,0.,0.)); +#11708 = ORIENTED_EDGE('',*,*,#7526,.F.); +#11709 = ORIENTED_EDGE('',*,*,#11689,.T.); +#11710 = ORIENTED_EDGE('',*,*,#6434,.F.); +#11711 = PLANE('',#11712); +#11712 = AXIS2_PLACEMENT_3D('',#11713,#11714,#11715); +#11713 = CARTESIAN_POINT('',(151.63,51.352686455451,108.40452837131)); +#11714 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11715 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11716 = ADVANCED_FACE('',(#11717),#11728,.F.); +#11717 = FACE_BOUND('',#11718,.F.); +#11718 = EDGE_LOOP('',(#11719,#11720,#11721,#11722)); +#11719 = ORIENTED_EDGE('',*,*,#6425,.T.); +#11720 = ORIENTED_EDGE('',*,*,#11703,.T.); +#11721 = ORIENTED_EDGE('',*,*,#7498,.T.); +#11722 = ORIENTED_EDGE('',*,*,#11723,.F.); +#11723 = EDGE_CURVE('',#6418,#7501,#11724,.T.); +#11724 = LINE('',#11725,#11726); +#11725 = CARTESIAN_POINT('',(151.63,52.018731510541,112.82678842524)); +#11726 = VECTOR('',#11727,1.); +#11727 = DIRECTION('',(1.,0.,0.)); +#11728 = CYLINDRICAL_SURFACE('',#11729,2.); +#11729 = AXIS2_PLACEMENT_3D('',#11730,#11731,#11732); +#11730 = CARTESIAN_POINT('',(151.63,52.636765499291,110.92467539265)); +#11731 = DIRECTION('',(-1.,0.,0.)); +#11732 = DIRECTION('',(0.,0.,1.)); +#11733 = ADVANCED_FACE('',(#11734),#11740,.T.); +#11734 = FACE_BOUND('',#11735,.T.); +#11735 = EDGE_LOOP('',(#11736,#11737,#11738,#11739)); +#11736 = ORIENTED_EDGE('',*,*,#11682,.F.); +#11737 = ORIENTED_EDGE('',*,*,#7509,.F.); +#11738 = ORIENTED_EDGE('',*,*,#11723,.F.); +#11739 = ORIENTED_EDGE('',*,*,#6417,.F.); +#11740 = PLANE('',#11741); +#11741 = AXIS2_PLACEMENT_3D('',#11742,#11743,#11744); +#11742 = CARTESIAN_POINT('',(151.63,59.627183640903,115.29892438024)); +#11743 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11744 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11745 = ADVANCED_FACE('',(#11746),#11762,.F.); +#11746 = FACE_BOUND('',#11747,.F.); +#11747 = EDGE_LOOP('',(#11748,#11749,#11755,#11756)); +#11748 = ORIENTED_EDGE('',*,*,#6442,.T.); +#11749 = ORIENTED_EDGE('',*,*,#11750,.F.); +#11750 = EDGE_CURVE('',#7546,#6445,#11751,.T.); +#11751 = LINE('',#11752,#11753); +#11752 = CARTESIAN_POINT('',(151.63,95.953265651803,68.220099355218)); +#11753 = VECTOR('',#11754,1.); +#11754 = DIRECTION('',(-1.,0.,0.)); +#11755 = ORIENTED_EDGE('',*,*,#7553,.T.); +#11756 = ORIENTED_EDGE('',*,*,#11757,.T.); +#11757 = EDGE_CURVE('',#7554,#6443,#11758,.T.); +#11758 = LINE('',#11759,#11760); +#11759 = CARTESIAN_POINT('',(151.63,97.189333629303,64.415873290038)); +#11760 = VECTOR('',#11761,1.); +#11761 = DIRECTION('',(-1.,0.,0.)); +#11762 = CYLINDRICAL_SURFACE('',#11763,2.); +#11763 = AXIS2_PLACEMENT_3D('',#11764,#11765,#11766); +#11764 = CARTESIAN_POINT('',(151.63,96.571299640553,66.317986322628)); +#11765 = DIRECTION('',(-1.,0.,0.)); +#11766 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11767 = ADVANCED_FACE('',(#11768),#11779,.T.); +#11768 = FACE_BOUND('',#11769,.T.); +#11769 = EDGE_LOOP('',(#11770,#11776,#11777,#11778)); +#11770 = ORIENTED_EDGE('',*,*,#11771,.T.); +#11771 = EDGE_CURVE('',#6462,#7535,#11772,.T.); +#11772 = LINE('',#11773,#11774); +#11773 = CARTESIAN_POINT('',(151.63,59.147072977496,52.05519351504)); +#11774 = VECTOR('',#11775,1.); +#11775 = DIRECTION('',(1.,0.,0.)); +#11776 = ORIENTED_EDGE('',*,*,#7562,.F.); +#11777 = ORIENTED_EDGE('',*,*,#11757,.T.); +#11778 = ORIENTED_EDGE('',*,*,#6470,.F.); +#11779 = PLANE('',#11780); +#11780 = AXIS2_PLACEMENT_3D('',#11781,#11782,#11783); +#11781 = CARTESIAN_POINT('',(151.63,57.244959944906,51.43715952629)); +#11782 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11783 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11784 = ADVANCED_FACE('',(#11785),#11796,.F.); +#11785 = FACE_BOUND('',#11786,.F.); +#11786 = EDGE_LOOP('',(#11787,#11788,#11789,#11790)); +#11787 = ORIENTED_EDGE('',*,*,#6461,.T.); +#11788 = ORIENTED_EDGE('',*,*,#11771,.T.); +#11789 = ORIENTED_EDGE('',*,*,#7534,.T.); +#11790 = ORIENTED_EDGE('',*,*,#11791,.F.); +#11791 = EDGE_CURVE('',#6454,#7537,#11792,.T.); +#11792 = LINE('',#11793,#11794); +#11793 = CARTESIAN_POINT('',(151.63,57.911004999996,55.85941958022)); +#11794 = VECTOR('',#11795,1.); +#11795 = DIRECTION('',(1.,0.,0.)); +#11796 = CYLINDRICAL_SURFACE('',#11797,2.); +#11797 = AXIS2_PLACEMENT_3D('',#11798,#11799,#11800); +#11798 = CARTESIAN_POINT('',(151.63,58.529038988746,53.95730654763)); +#11799 = DIRECTION('',(-1.,0.,0.)); +#11800 = DIRECTION('',(0.,0.,1.)); +#11801 = ADVANCED_FACE('',(#11802),#11808,.T.); +#11802 = FACE_BOUND('',#11803,.T.); +#11803 = EDGE_LOOP('',(#11804,#11805,#11806,#11807)); +#11804 = ORIENTED_EDGE('',*,*,#11750,.F.); +#11805 = ORIENTED_EDGE('',*,*,#7545,.F.); +#11806 = ORIENTED_EDGE('',*,*,#11791,.F.); +#11807 = ORIENTED_EDGE('',*,*,#6453,.F.); +#11808 = PLANE('',#11809); +#11809 = AXIS2_PLACEMENT_3D('',#11810,#11811,#11812); +#11810 = CARTESIAN_POINT('',(151.63,76.9321353259,62.039759467719)); +#11811 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11812 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11813 = ADVANCED_FACE('',(#11814),#11830,.F.); +#11814 = FACE_BOUND('',#11815,.F.); +#11815 = EDGE_LOOP('',(#11816,#11822,#11823,#11829)); +#11816 = ORIENTED_EDGE('',*,*,#11817,.T.); +#11817 = EDGE_CURVE('',#6159,#7249,#11818,.T.); +#11818 = LINE('',#11819,#11820); +#11819 = CARTESIAN_POINT('',(151.63,40.699020510842,79.70784908711)); +#11820 = VECTOR('',#11821,1.); +#11821 = DIRECTION('',(1.,0.,0.)); +#11822 = ORIENTED_EDGE('',*,*,#7258,.F.); +#11823 = ORIENTED_EDGE('',*,*,#11824,.F.); +#11824 = EDGE_CURVE('',#6176,#7259,#11825,.T.); +#11825 = LINE('',#11826,#11827); +#11826 = CARTESIAN_POINT('',(151.63,39.462952533342,83.512075152291)); +#11827 = VECTOR('',#11828,1.); +#11828 = DIRECTION('',(1.,0.,0.)); +#11829 = ORIENTED_EDGE('',*,*,#6183,.F.); +#11830 = CYLINDRICAL_SURFACE('',#11831,2.); +#11831 = AXIS2_PLACEMENT_3D('',#11832,#11833,#11834); +#11832 = CARTESIAN_POINT('',(151.63,40.080986522092,81.609962119701)); +#11833 = DIRECTION('',(-1.,0.,0.)); +#11834 = DIRECTION('',(0.,0.,1.)); +#11835 = ADVANCED_FACE('',(#11836),#11847,.F.); +#11836 = FACE_BOUND('',#11837,.T.); +#11837 = EDGE_LOOP('',(#11838,#11839,#11845,#11846)); +#11838 = ORIENTED_EDGE('',*,*,#6175,.T.); +#11839 = ORIENTED_EDGE('',*,*,#11840,.F.); +#11840 = EDGE_CURVE('',#7268,#6167,#11841,.T.); +#11841 = LINE('',#11842,#11843); +#11842 = CARTESIAN_POINT('',(151.63,94.624230478461,101.43506082603)); +#11843 = VECTOR('',#11844,1.); +#11844 = DIRECTION('',(-1.,0.,0.)); +#11845 = ORIENTED_EDGE('',*,*,#7267,.T.); +#11846 = ORIENTED_EDGE('',*,*,#11824,.F.); +#11847 = PLANE('',#11848); +#11848 = AXIS2_PLACEMENT_3D('',#11849,#11850,#11851); +#11849 = CARTESIAN_POINT('',(151.63,96.526343511051,102.05309481478)); +#11850 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11851 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11852 = ADVANCED_FACE('',(#11853),#11864,.F.); +#11853 = FACE_BOUND('',#11854,.F.); +#11854 = EDGE_LOOP('',(#11855,#11856,#11857,#11863)); +#11855 = ORIENTED_EDGE('',*,*,#11840,.F.); +#11856 = ORIENTED_EDGE('',*,*,#7275,.F.); +#11857 = ORIENTED_EDGE('',*,*,#11858,.T.); +#11858 = EDGE_CURVE('',#7251,#6157,#11859,.T.); +#11859 = LINE('',#11860,#11861); +#11860 = CARTESIAN_POINT('',(151.63,95.860298455961,97.630834760857)); +#11861 = VECTOR('',#11862,1.); +#11862 = DIRECTION('',(-1.,0.,0.)); +#11863 = ORIENTED_EDGE('',*,*,#6166,.F.); +#11864 = CYLINDRICAL_SURFACE('',#11865,2.); +#11865 = AXIS2_PLACEMENT_3D('',#11866,#11867,#11868); +#11866 = CARTESIAN_POINT('',(151.63,95.242264467211,99.532947793448)); +#11867 = DIRECTION('',(-1.,0.,0.)); +#11868 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11869 = ADVANCED_FACE('',(#11870),#11876,.F.); +#11870 = FACE_BOUND('',#11871,.T.); +#11871 = EDGE_LOOP('',(#11872,#11873,#11874,#11875)); +#11872 = ORIENTED_EDGE('',*,*,#6156,.T.); +#11873 = ORIENTED_EDGE('',*,*,#11817,.T.); +#11874 = ORIENTED_EDGE('',*,*,#7248,.T.); +#11875 = ORIENTED_EDGE('',*,*,#11858,.T.); +#11876 = PLANE('',#11877); +#11877 = AXIS2_PLACEMENT_3D('',#11878,#11879,#11880); +#11878 = CARTESIAN_POINT('',(151.63,68.279659483401,88.669341923984)); +#11879 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11880 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11881 = ADVANCED_FACE('',(#11882),#11898,.F.); +#11882 = FACE_BOUND('',#11883,.F.); +#11883 = EDGE_LOOP('',(#11884,#11890,#11891,#11897)); +#11884 = ORIENTED_EDGE('',*,*,#11885,.T.); +#11885 = EDGE_CURVE('',#6123,#7213,#11886,.T.); +#11886 = LINE('',#11887,#11888); +#11887 = CARTESIAN_POINT('',(151.63,41.080054104728,88.243352200596)); +#11888 = VECTOR('',#11889,1.); +#11889 = DIRECTION('',(1.,0.,0.)); +#11890 = ORIENTED_EDGE('',*,*,#7222,.F.); +#11891 = ORIENTED_EDGE('',*,*,#11892,.F.); +#11892 = EDGE_CURVE('',#6140,#7223,#11893,.T.); +#11893 = LINE('',#11894,#11895); +#11894 = CARTESIAN_POINT('',(151.63,39.843986127228,92.047578265777)); +#11895 = VECTOR('',#11896,1.); +#11896 = DIRECTION('',(1.,0.,0.)); +#11897 = ORIENTED_EDGE('',*,*,#6147,.F.); +#11898 = CYLINDRICAL_SURFACE('',#11899,2.); +#11899 = AXIS2_PLACEMENT_3D('',#11900,#11901,#11902); +#11900 = CARTESIAN_POINT('',(151.63,40.462020115978,90.145465233187)); +#11901 = DIRECTION('',(-1.,0.,0.)); +#11902 = DIRECTION('',(0.,0.,1.)); +#11903 = ADVANCED_FACE('',(#11904),#11915,.F.); +#11904 = FACE_BOUND('',#11905,.T.); +#11905 = EDGE_LOOP('',(#11906,#11907,#11913,#11914)); +#11906 = ORIENTED_EDGE('',*,*,#6139,.T.); +#11907 = ORIENTED_EDGE('',*,*,#11908,.F.); +#11908 = EDGE_CURVE('',#7232,#6131,#11909,.T.); +#11909 = LINE('',#11910,#11911); +#11910 = CARTESIAN_POINT('',(151.63,89.298924974576,108.11646197327)); +#11911 = VECTOR('',#11912,1.); +#11912 = DIRECTION('',(-1.,0.,0.)); +#11913 = ORIENTED_EDGE('',*,*,#7231,.T.); +#11914 = ORIENTED_EDGE('',*,*,#11892,.F.); +#11915 = PLANE('',#11916); +#11916 = AXIS2_PLACEMENT_3D('',#11917,#11918,#11919); +#11917 = CARTESIAN_POINT('',(151.63,91.201038007166,108.73449596202)); +#11918 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#11919 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11920 = ADVANCED_FACE('',(#11921),#11932,.F.); +#11921 = FACE_BOUND('',#11922,.F.); +#11922 = EDGE_LOOP('',(#11923,#11924,#11925,#11931)); +#11923 = ORIENTED_EDGE('',*,*,#11908,.F.); +#11924 = ORIENTED_EDGE('',*,*,#7239,.F.); +#11925 = ORIENTED_EDGE('',*,*,#11926,.T.); +#11926 = EDGE_CURVE('',#7215,#6121,#11927,.T.); +#11927 = LINE('',#11928,#11929); +#11928 = CARTESIAN_POINT('',(151.63,90.534992952076,104.31223590809)); +#11929 = VECTOR('',#11930,1.); +#11930 = DIRECTION('',(-1.,0.,0.)); +#11931 = ORIENTED_EDGE('',*,*,#6130,.F.); +#11932 = CYLINDRICAL_SURFACE('',#11933,2.); +#11933 = AXIS2_PLACEMENT_3D('',#11934,#11935,#11936); +#11934 = CARTESIAN_POINT('',(151.63,89.916958963326,106.21434894068)); +#11935 = DIRECTION('',(-1.,0.,0.)); +#11936 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#11937 = ADVANCED_FACE('',(#11938),#11944,.F.); +#11938 = FACE_BOUND('',#11939,.T.); +#11939 = EDGE_LOOP('',(#11940,#11941,#11942,#11943)); +#11940 = ORIENTED_EDGE('',*,*,#6120,.T.); +#11941 = ORIENTED_EDGE('',*,*,#11885,.T.); +#11942 = ORIENTED_EDGE('',*,*,#7212,.T.); +#11943 = ORIENTED_EDGE('',*,*,#11926,.T.); +#11944 = PLANE('',#11945); +#11945 = AXIS2_PLACEMENT_3D('',#11946,#11947,#11948); +#11946 = CARTESIAN_POINT('',(151.63,65.807523528402,96.277794054345)); +#11947 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11948 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#11949 = ADVANCED_FACE('',(#11950),#11966,.F.); +#11950 = FACE_BOUND('',#11951,.T.); +#11951 = EDGE_LOOP('',(#11952,#11953,#11959,#11960)); +#11952 = ORIENTED_EDGE('',*,*,#6556,.T.); +#11953 = ORIENTED_EDGE('',*,*,#11954,.T.); +#11954 = EDGE_CURVE('',#6559,#7040,#11955,.T.); +#11955 = LINE('',#11956,#11957); +#11956 = CARTESIAN_POINT('',(151.63,82.356517899305,110.0665860722)); +#11957 = VECTOR('',#11958,1.); +#11958 = DIRECTION('',(-1.,0.,0.)); +#11959 = ORIENTED_EDGE('',*,*,#7039,.F.); +#11960 = ORIENTED_EDGE('',*,*,#11961,.T.); +#11961 = EDGE_CURVE('',#7031,#6557,#11962,.T.); +#11962 = LINE('',#11963,#11964); +#11963 = CARTESIAN_POINT('',(151.63,44.314257247499,97.705906297207)); +#11964 = VECTOR('',#11965,1.); +#11965 = DIRECTION('',(1.,0.,0.)); +#11966 = PLANE('',#11967); +#11967 = AXIS2_PLACEMENT_3D('',#11968,#11969,#11970); +#11968 = CARTESIAN_POINT('',(151.63,63.335387573402,103.8862461847)); +#11969 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#11970 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#11971 = ADVANCED_FACE('',(#11972),#11983,.F.); +#11972 = FACE_BOUND('',#11973,.F.); +#11973 = EDGE_LOOP('',(#11974,#11980,#11981,#11982)); +#11974 = ORIENTED_EDGE('',*,*,#11975,.F.); +#11975 = EDGE_CURVE('',#7029,#6567,#11976,.T.); +#11976 = LINE('',#11977,#11978); +#11977 = CARTESIAN_POINT('',(151.63,43.078189269999,101.51013236238)); +#11978 = VECTOR('',#11979,1.); +#11979 = DIRECTION('',(1.,0.,0.)); +#11980 = ORIENTED_EDGE('',*,*,#7028,.T.); +#11981 = ORIENTED_EDGE('',*,*,#11961,.T.); +#11982 = ORIENTED_EDGE('',*,*,#6566,.F.); +#11983 = CYLINDRICAL_SURFACE('',#11984,2.); +#11984 = AXIS2_PLACEMENT_3D('',#11985,#11986,#11987); +#11985 = CARTESIAN_POINT('',(151.63,43.696223258749,99.608019329798)); +#11986 = DIRECTION('',(-1.,0.,0.)); +#11987 = DIRECTION('',(0.,0.,1.)); +#11988 = ADVANCED_FACE('',(#11989),#12000,.F.); +#11989 = FACE_BOUND('',#11990,.T.); +#11990 = EDGE_LOOP('',(#11991,#11992,#11993,#11994)); +#11991 = ORIENTED_EDGE('',*,*,#6575,.T.); +#11992 = ORIENTED_EDGE('',*,*,#11975,.F.); +#11993 = ORIENTED_EDGE('',*,*,#7056,.F.); +#11994 = ORIENTED_EDGE('',*,*,#11995,.F.); +#11995 = EDGE_CURVE('',#6576,#7048,#11996,.T.); +#11996 = LINE('',#11997,#11998); +#11997 = CARTESIAN_POINT('',(151.63,81.120449921805,113.87081213738)); +#11998 = VECTOR('',#11999,1.); +#11999 = DIRECTION('',(-1.,0.,0.)); +#12000 = PLANE('',#12001); +#12001 = AXIS2_PLACEMENT_3D('',#12002,#12003,#12004); +#12002 = CARTESIAN_POINT('',(151.63,41.176076237409,100.89209837363)); +#12003 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12004 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12005 = ADVANCED_FACE('',(#12006),#12012,.F.); +#12006 = FACE_BOUND('',#12007,.F.); +#12007 = EDGE_LOOP('',(#12008,#12009,#12010,#12011)); +#12008 = ORIENTED_EDGE('',*,*,#11954,.T.); +#12009 = ORIENTED_EDGE('',*,*,#7047,.T.); +#12010 = ORIENTED_EDGE('',*,*,#11995,.F.); +#12011 = ORIENTED_EDGE('',*,*,#6583,.F.); +#12012 = CYLINDRICAL_SURFACE('',#12013,2.); +#12013 = AXIS2_PLACEMENT_3D('',#12014,#12015,#12016); +#12014 = CARTESIAN_POINT('',(151.63,81.738483910555,111.96869910479)); +#12015 = DIRECTION('',(-1.,0.,0.)); +#12016 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12017 = ADVANCED_FACE('',(#12018),#12034,.T.); +#12018 = FACE_BOUND('',#12019,.T.); +#12019 = EDGE_LOOP('',(#12020,#12026,#12027,#12033)); +#12020 = ORIENTED_EDGE('',*,*,#12021,.F.); +#12021 = EDGE_CURVE('',#6993,#6629,#12022,.T.); +#12022 = LINE('',#12023,#12024); +#12023 = CARTESIAN_POINT('',(151.63,44.407224443341,68.295170891569)); +#12024 = VECTOR('',#12025,1.); +#12025 = DIRECTION('',(1.,0.,0.)); +#12026 = ORIENTED_EDGE('',*,*,#6992,.T.); +#12027 = ORIENTED_EDGE('',*,*,#12028,.F.); +#12028 = EDGE_CURVE('',#6638,#6995,#12029,.T.); +#12029 = LINE('',#12030,#12031); +#12030 = CARTESIAN_POINT('',(151.63,99.56850238846,86.218156565315)); +#12031 = VECTOR('',#12032,1.); +#12032 = DIRECTION('',(-1.,0.,0.)); +#12033 = ORIENTED_EDGE('',*,*,#6637,.F.); +#12034 = PLANE('',#12035); +#12035 = AXIS2_PLACEMENT_3D('',#12036,#12037,#12038); +#12036 = CARTESIAN_POINT('',(151.63,71.987863415901,77.256663728442)); +#12037 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12038 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12039 = ADVANCED_FACE('',(#12040),#12051,.F.); +#12040 = FACE_BOUND('',#12041,.F.); +#12041 = EDGE_LOOP('',(#12042,#12043,#12049,#12050)); +#12042 = ORIENTED_EDGE('',*,*,#6645,.T.); +#12043 = ORIENTED_EDGE('',*,*,#12044,.T.); +#12044 = EDGE_CURVE('',#6646,#7012,#12045,.T.); +#12045 = LINE('',#12046,#12047); +#12046 = CARTESIAN_POINT('',(151.63,100.80457036596,82.413930500135)); +#12047 = VECTOR('',#12048,1.); +#12048 = DIRECTION('',(-1.,0.,0.)); +#12049 = ORIENTED_EDGE('',*,*,#7019,.F.); +#12050 = ORIENTED_EDGE('',*,*,#12028,.F.); +#12051 = CYLINDRICAL_SURFACE('',#12052,2.); +#12052 = AXIS2_PLACEMENT_3D('',#12053,#12054,#12055); +#12053 = CARTESIAN_POINT('',(151.63,100.18653637721,84.316043532725)); +#12054 = DIRECTION('',(-1.,0.,0.)); +#12055 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12056 = ADVANCED_FACE('',(#12057),#12068,.T.); +#12057 = FACE_BOUND('',#12058,.T.); +#12058 = EDGE_LOOP('',(#12059,#12060,#12061,#12067)); +#12059 = ORIENTED_EDGE('',*,*,#12044,.T.); +#12060 = ORIENTED_EDGE('',*,*,#7011,.T.); +#12061 = ORIENTED_EDGE('',*,*,#12062,.T.); +#12062 = EDGE_CURVE('',#7003,#6627,#12063,.T.); +#12063 = LINE('',#12064,#12065); +#12064 = CARTESIAN_POINT('',(151.63,45.643292420841,64.490944826388)); +#12065 = VECTOR('',#12066,1.); +#12066 = DIRECTION('',(1.,0.,0.)); +#12067 = ORIENTED_EDGE('',*,*,#6654,.F.); +#12068 = PLANE('',#12069); +#12069 = AXIS2_PLACEMENT_3D('',#12070,#12071,#12072); +#12070 = CARTESIAN_POINT('',(151.63,102.70668339855,83.031964488885)); +#12071 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12072 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12073 = ADVANCED_FACE('',(#12074),#12080,.F.); +#12074 = FACE_BOUND('',#12075,.F.); +#12075 = EDGE_LOOP('',(#12076,#12077,#12078,#12079)); +#12076 = ORIENTED_EDGE('',*,*,#6626,.T.); +#12077 = ORIENTED_EDGE('',*,*,#12021,.F.); +#12078 = ORIENTED_EDGE('',*,*,#7002,.F.); +#12079 = ORIENTED_EDGE('',*,*,#12062,.T.); +#12080 = CYLINDRICAL_SURFACE('',#12081,2.); +#12081 = AXIS2_PLACEMENT_3D('',#12082,#12083,#12084); +#12082 = CARTESIAN_POINT('',(151.63,45.025258432091,66.393057858978)); +#12083 = DIRECTION('',(-1.,0.,0.)); +#12084 = DIRECTION('',(0.,0.,1.)); +#12085 = ADVANCED_FACE('',(#12086),#12102,.T.); +#12086 = FACE_BOUND('',#12087,.T.); +#12087 = EDGE_LOOP('',(#12088,#12094,#12095,#12101)); +#12088 = ORIENTED_EDGE('',*,*,#12089,.F.); +#12089 = EDGE_CURVE('',#7099,#6665,#12090,.T.); +#12090 = LINE('',#12091,#12092); +#12091 = CARTESIAN_POINT('',(151.63,40.984031972046,75.594606027555)); +#12092 = VECTOR('',#12093,1.); +#12093 = DIRECTION('',(1.,0.,0.)); +#12094 = ORIENTED_EDGE('',*,*,#7098,.T.); +#12095 = ORIENTED_EDGE('',*,*,#12096,.F.); +#12096 = EDGE_CURVE('',#6674,#7101,#12097,.T.); +#12097 = LINE('',#12098,#12099); +#12098 = CARTESIAN_POINT('',(151.63,98.047422949756,94.135625690052)); +#12099 = VECTOR('',#12100,1.); +#12100 = DIRECTION('',(-1.,0.,0.)); +#12101 = ORIENTED_EDGE('',*,*,#6673,.F.); +#12102 = PLANE('',#12103); +#12103 = AXIS2_PLACEMENT_3D('',#12104,#12105,#12106); +#12104 = CARTESIAN_POINT('',(151.63,69.515727460901,84.865115858803)); +#12105 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12106 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12107 = ADVANCED_FACE('',(#12108),#12119,.F.); +#12108 = FACE_BOUND('',#12109,.F.); +#12109 = EDGE_LOOP('',(#12110,#12111,#12117,#12118)); +#12110 = ORIENTED_EDGE('',*,*,#6681,.T.); +#12111 = ORIENTED_EDGE('',*,*,#12112,.T.); +#12112 = EDGE_CURVE('',#6682,#7118,#12113,.T.); +#12113 = LINE('',#12114,#12115); +#12114 = CARTESIAN_POINT('',(151.63,99.283490927255,90.331399624871)); +#12115 = VECTOR('',#12116,1.); +#12116 = DIRECTION('',(-1.,0.,0.)); +#12117 = ORIENTED_EDGE('',*,*,#7125,.F.); +#12118 = ORIENTED_EDGE('',*,*,#12096,.F.); +#12119 = CYLINDRICAL_SURFACE('',#12120,2.); +#12120 = AXIS2_PLACEMENT_3D('',#12121,#12122,#12123); +#12121 = CARTESIAN_POINT('',(151.63,98.665456938505,92.233512657461)); +#12122 = DIRECTION('',(-1.,0.,0.)); +#12123 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12124 = ADVANCED_FACE('',(#12125),#12136,.T.); +#12125 = FACE_BOUND('',#12126,.T.); +#12126 = EDGE_LOOP('',(#12127,#12128,#12129,#12135)); +#12127 = ORIENTED_EDGE('',*,*,#12112,.T.); +#12128 = ORIENTED_EDGE('',*,*,#7117,.T.); +#12129 = ORIENTED_EDGE('',*,*,#12130,.T.); +#12130 = EDGE_CURVE('',#7109,#6663,#12131,.T.); +#12131 = LINE('',#12132,#12133); +#12132 = CARTESIAN_POINT('',(151.63,42.220099949546,71.790379962374)); +#12133 = VECTOR('',#12134,1.); +#12134 = DIRECTION('',(1.,0.,0.)); +#12135 = ORIENTED_EDGE('',*,*,#6690,.F.); +#12136 = PLANE('',#12137); +#12137 = AXIS2_PLACEMENT_3D('',#12138,#12139,#12140); +#12138 = CARTESIAN_POINT('',(151.63,101.18560395984,90.949433613621)); +#12139 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12140 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12141 = ADVANCED_FACE('',(#12142),#12148,.F.); +#12142 = FACE_BOUND('',#12143,.F.); +#12143 = EDGE_LOOP('',(#12144,#12145,#12146,#12147)); +#12144 = ORIENTED_EDGE('',*,*,#6662,.T.); +#12145 = ORIENTED_EDGE('',*,*,#12089,.F.); +#12146 = ORIENTED_EDGE('',*,*,#7108,.F.); +#12147 = ORIENTED_EDGE('',*,*,#12130,.T.); +#12148 = CYLINDRICAL_SURFACE('',#12149,2.); +#12149 = AXIS2_PLACEMENT_3D('',#12150,#12151,#12152); +#12150 = CARTESIAN_POINT('',(151.63,41.602065960796,73.692492994964)); +#12151 = DIRECTION('',(-1.,0.,0.)); +#12152 = DIRECTION('',(0.,0.,1.)); +#12153 = ADVANCED_FACE('',(#12154),#12170,.T.); +#12154 = FACE_BOUND('',#12155,.T.); +#12155 = EDGE_LOOP('',(#12156,#12162,#12163,#12169)); +#12156 = ORIENTED_EDGE('',*,*,#12157,.F.); +#12157 = EDGE_CURVE('',#6957,#6701,#12158,.T.); +#12158 = LINE('',#12159,#12160); +#12159 = CARTESIAN_POINT('',(151.63,71.795819150538,51.959171382359)); +#12160 = VECTOR('',#12161,1.); +#12161 = DIRECTION('',(1.,0.,0.)); +#12162 = ORIENTED_EDGE('',*,*,#6956,.T.); +#12163 = ORIENTED_EDGE('',*,*,#12164,.F.); +#12164 = EDGE_CURVE('',#6710,#6959,#12165,.T.); +#12165 = LINE('',#12166,#12167); +#12166 = CARTESIAN_POINT('',(151.63,87.01272341126,56.903443292358)); +#12167 = VECTOR('',#12168,1.); +#12168 = DIRECTION('',(-1.,0.,0.)); +#12169 = ORIENTED_EDGE('',*,*,#6709,.F.); +#12170 = PLANE('',#12171); +#12171 = AXIS2_PLACEMENT_3D('',#12172,#12173,#12174); +#12172 = CARTESIAN_POINT('',(151.63,79.404271280899,54.431307337358)); +#12173 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12174 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12175 = ADVANCED_FACE('',(#12176),#12187,.F.); +#12176 = FACE_BOUND('',#12177,.F.); +#12177 = EDGE_LOOP('',(#12178,#12179,#12185,#12186)); +#12178 = ORIENTED_EDGE('',*,*,#6717,.T.); +#12179 = ORIENTED_EDGE('',*,*,#12180,.T.); +#12180 = EDGE_CURVE('',#6718,#6976,#12181,.T.); +#12181 = LINE('',#12182,#12183); +#12182 = CARTESIAN_POINT('',(151.63,88.24879138876,53.099217227177)); +#12183 = VECTOR('',#12184,1.); +#12184 = DIRECTION('',(-1.,0.,0.)); +#12185 = ORIENTED_EDGE('',*,*,#6983,.F.); +#12186 = ORIENTED_EDGE('',*,*,#12164,.F.); +#12187 = CYLINDRICAL_SURFACE('',#12188,2.); +#12188 = AXIS2_PLACEMENT_3D('',#12189,#12190,#12191); +#12189 = CARTESIAN_POINT('',(151.63,87.63075740001,55.001330259768)); +#12190 = DIRECTION('',(-1.,0.,0.)); +#12191 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12192 = ADVANCED_FACE('',(#12193),#12204,.T.); +#12193 = FACE_BOUND('',#12194,.T.); +#12194 = EDGE_LOOP('',(#12195,#12196,#12197,#12203)); +#12195 = ORIENTED_EDGE('',*,*,#12180,.T.); +#12196 = ORIENTED_EDGE('',*,*,#6975,.T.); +#12197 = ORIENTED_EDGE('',*,*,#12198,.T.); +#12198 = EDGE_CURVE('',#6967,#6699,#12199,.T.); +#12199 = LINE('',#12200,#12201); +#12200 = CARTESIAN_POINT('',(151.63,73.031887128038,48.154945317178)); +#12201 = VECTOR('',#12202,1.); +#12202 = DIRECTION('',(1.,0.,0.)); +#12203 = ORIENTED_EDGE('',*,*,#6726,.F.); +#12204 = PLANE('',#12205); +#12205 = AXIS2_PLACEMENT_3D('',#12206,#12207,#12208); +#12206 = CARTESIAN_POINT('',(151.63,90.150904421351,53.717251215927)); +#12207 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12208 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12209 = ADVANCED_FACE('',(#12210),#12216,.F.); +#12210 = FACE_BOUND('',#12211,.F.); +#12211 = EDGE_LOOP('',(#12212,#12213,#12214,#12215)); +#12212 = ORIENTED_EDGE('',*,*,#6698,.T.); +#12213 = ORIENTED_EDGE('',*,*,#12157,.F.); +#12214 = ORIENTED_EDGE('',*,*,#6966,.F.); +#12215 = ORIENTED_EDGE('',*,*,#12198,.T.); +#12216 = CYLINDRICAL_SURFACE('',#12217,2.); +#12217 = AXIS2_PLACEMENT_3D('',#12218,#12219,#12220); +#12218 = CARTESIAN_POINT('',(151.63,72.413853139288,50.057058349768)); +#12219 = DIRECTION('',(-1.,0.,0.)); +#12220 = DIRECTION('',(0.,0.,1.)); +#12221 = ADVANCED_FACE('',(#12222),#12238,.T.); +#12222 = FACE_BOUND('',#12223,.T.); +#12223 = EDGE_LOOP('',(#12224,#12230,#12231,#12237)); +#12224 = ORIENTED_EDGE('',*,*,#12225,.F.); +#12225 = EDGE_CURVE('',#7135,#6737,#12226,.T.); +#12226 = LINE('',#12227,#12228); +#12227 = CARTESIAN_POINT('',(151.63,49.732529947226,61.613769744332)); +#12228 = VECTOR('',#12229,1.); +#12229 = DIRECTION('',(1.,0.,0.)); +#12230 = ORIENTED_EDGE('',*,*,#7134,.T.); +#12231 = ORIENTED_EDGE('',*,*,#12232,.F.); +#12232 = EDGE_CURVE('',#6746,#7137,#12233,.T.); +#12233 = LINE('',#12234,#12235); +#12234 = CARTESIAN_POINT('',(151.63,99.187468794574,77.682653451829)); +#12235 = VECTOR('',#12236,1.); +#12236 = DIRECTION('',(-1.,0.,0.)); +#12237 = ORIENTED_EDGE('',*,*,#6745,.F.); +#12238 = PLANE('',#12239); +#12239 = AXIS2_PLACEMENT_3D('',#12240,#12241,#12242); +#12240 = CARTESIAN_POINT('',(151.63,74.4599993709,69.648211598081)); +#12241 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12242 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12243 = ADVANCED_FACE('',(#12244),#12255,.F.); +#12244 = FACE_BOUND('',#12245,.F.); +#12245 = EDGE_LOOP('',(#12246,#12247,#12253,#12254)); +#12246 = ORIENTED_EDGE('',*,*,#6753,.T.); +#12247 = ORIENTED_EDGE('',*,*,#12248,.T.); +#12248 = EDGE_CURVE('',#6754,#7154,#12249,.T.); +#12249 = LINE('',#12250,#12251); +#12250 = CARTESIAN_POINT('',(151.63,100.42353677207,73.878427386649)); +#12251 = VECTOR('',#12252,1.); +#12252 = DIRECTION('',(-1.,0.,0.)); +#12253 = ORIENTED_EDGE('',*,*,#7161,.F.); +#12254 = ORIENTED_EDGE('',*,*,#12232,.F.); +#12255 = CYLINDRICAL_SURFACE('',#12256,2.); +#12256 = AXIS2_PLACEMENT_3D('',#12257,#12258,#12259); +#12257 = CARTESIAN_POINT('',(151.63,99.805502783324,75.780540419239)); +#12258 = DIRECTION('',(-1.,0.,0.)); +#12259 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12260 = ADVANCED_FACE('',(#12261),#12272,.T.); +#12261 = FACE_BOUND('',#12262,.T.); +#12262 = EDGE_LOOP('',(#12263,#12264,#12265,#12271)); +#12263 = ORIENTED_EDGE('',*,*,#12248,.T.); +#12264 = ORIENTED_EDGE('',*,*,#7153,.T.); +#12265 = ORIENTED_EDGE('',*,*,#12266,.T.); +#12266 = EDGE_CURVE('',#7145,#6735,#12267,.T.); +#12267 = LINE('',#12268,#12269); +#12268 = CARTESIAN_POINT('',(151.63,50.968597924726,57.809543679152)); +#12269 = VECTOR('',#12270,1.); +#12270 = DIRECTION('',(1.,0.,0.)); +#12271 = ORIENTED_EDGE('',*,*,#6762,.F.); +#12272 = PLANE('',#12273); +#12273 = AXIS2_PLACEMENT_3D('',#12274,#12275,#12276); +#12274 = CARTESIAN_POINT('',(151.63,102.32564980466,74.496461375399)); +#12275 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12276 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12277 = ADVANCED_FACE('',(#12278),#12284,.F.); +#12278 = FACE_BOUND('',#12279,.F.); +#12279 = EDGE_LOOP('',(#12280,#12281,#12282,#12283)); +#12280 = ORIENTED_EDGE('',*,*,#6734,.T.); +#12281 = ORIENTED_EDGE('',*,*,#12225,.F.); +#12282 = ORIENTED_EDGE('',*,*,#7144,.F.); +#12283 = ORIENTED_EDGE('',*,*,#12266,.T.); +#12284 = CYLINDRICAL_SURFACE('',#12285,2.); +#12285 = AXIS2_PLACEMENT_3D('',#12286,#12287,#12288); +#12286 = CARTESIAN_POINT('',(151.63,50.350563935976,59.711656711742)); +#12287 = DIRECTION('',(-1.,0.,0.)); +#12288 = DIRECTION('',(0.,0.,1.)); +#12289 = ADVANCED_FACE('',(#12290),#12306,.T.); +#12290 = FACE_BOUND('',#12291,.T.); +#12291 = EDGE_LOOP('',(#12292,#12298,#12299,#12305)); +#12292 = ORIENTED_EDGE('',*,*,#12293,.F.); +#12293 = EDGE_CURVE('',#6921,#6773,#12294,.T.); +#12294 = LINE('',#12295,#12296); +#12295 = CARTESIAN_POINT('',(151.63,52.018731510541,112.82678842524)); +#12296 = VECTOR('',#12297,1.); +#12297 = DIRECTION('',(1.,0.,0.)); +#12298 = ORIENTED_EDGE('',*,*,#6920,.T.); +#12299 = ORIENTED_EDGE('',*,*,#12300,.F.); +#12300 = EDGE_CURVE('',#6782,#6923,#12301,.T.); +#12301 = LINE('',#12302,#12303); +#12302 = CARTESIAN_POINT('',(151.63,67.235635771264,117.77106033524)); +#12303 = VECTOR('',#12304,1.); +#12304 = DIRECTION('',(-1.,0.,0.)); +#12305 = ORIENTED_EDGE('',*,*,#6781,.F.); +#12306 = PLANE('',#12307); +#12307 = AXIS2_PLACEMENT_3D('',#12308,#12309,#12310); +#12308 = CARTESIAN_POINT('',(151.63,59.627183640903,115.29892438024)); +#12309 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12310 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12311 = ADVANCED_FACE('',(#12312),#12323,.F.); +#12312 = FACE_BOUND('',#12313,.F.); +#12313 = EDGE_LOOP('',(#12314,#12315,#12316,#12317)); +#12314 = ORIENTED_EDGE('',*,*,#6770,.T.); +#12315 = ORIENTED_EDGE('',*,*,#12293,.F.); +#12316 = ORIENTED_EDGE('',*,*,#6930,.F.); +#12317 = ORIENTED_EDGE('',*,*,#12318,.T.); +#12318 = EDGE_CURVE('',#6931,#6771,#12319,.T.); +#12319 = LINE('',#12320,#12321); +#12320 = CARTESIAN_POINT('',(151.63,53.254799488041,109.02256236006)); +#12321 = VECTOR('',#12322,1.); +#12322 = DIRECTION('',(1.,0.,0.)); +#12323 = CYLINDRICAL_SURFACE('',#12324,2.); +#12324 = AXIS2_PLACEMENT_3D('',#12325,#12326,#12327); +#12325 = CARTESIAN_POINT('',(151.63,52.636765499291,110.92467539265)); +#12326 = DIRECTION('',(-1.,0.,0.)); +#12327 = DIRECTION('',(0.,0.,1.)); +#12328 = ADVANCED_FACE('',(#12329),#12340,.T.); +#12329 = FACE_BOUND('',#12330,.T.); +#12330 = EDGE_LOOP('',(#12331,#12337,#12338,#12339)); +#12331 = ORIENTED_EDGE('',*,*,#12332,.T.); +#12332 = EDGE_CURVE('',#6790,#6940,#12333,.T.); +#12333 = LINE('',#12334,#12335); +#12334 = CARTESIAN_POINT('',(151.63,68.471703748764,113.96683427006)); +#12335 = VECTOR('',#12336,1.); +#12336 = DIRECTION('',(-1.,0.,0.)); +#12337 = ORIENTED_EDGE('',*,*,#6939,.T.); +#12338 = ORIENTED_EDGE('',*,*,#12318,.T.); +#12339 = ORIENTED_EDGE('',*,*,#6798,.F.); +#12340 = PLANE('',#12341); +#12341 = AXIS2_PLACEMENT_3D('',#12342,#12343,#12344); +#12342 = CARTESIAN_POINT('',(151.63,51.352686455451,108.40452837131)); +#12343 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12344 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12345 = ADVANCED_FACE('',(#12346),#12352,.F.); +#12346 = FACE_BOUND('',#12347,.F.); +#12347 = EDGE_LOOP('',(#12348,#12349,#12350,#12351)); +#12348 = ORIENTED_EDGE('',*,*,#6789,.T.); +#12349 = ORIENTED_EDGE('',*,*,#12332,.T.); +#12350 = ORIENTED_EDGE('',*,*,#6947,.F.); +#12351 = ORIENTED_EDGE('',*,*,#12300,.F.); +#12352 = CYLINDRICAL_SURFACE('',#12353,2.); +#12353 = AXIS2_PLACEMENT_3D('',#12354,#12355,#12356); +#12354 = CARTESIAN_POINT('',(151.63,67.853669760014,115.86894730265)); +#12355 = DIRECTION('',(-1.,0.,0.)); +#12356 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12357 = ADVANCED_FACE('',(#12358),#12374,.T.); +#12358 = FACE_BOUND('',#12359,.T.); +#12359 = EDGE_LOOP('',(#12360,#12366,#12367,#12373)); +#12360 = ORIENTED_EDGE('',*,*,#12361,.F.); +#12361 = EDGE_CURVE('',#7171,#6809,#12362,.T.); +#12362 = LINE('',#12363,#12364); +#12363 = CARTESIAN_POINT('',(151.63,57.911004999996,55.85941958022)); +#12364 = VECTOR('',#12365,1.); +#12365 = DIRECTION('',(1.,0.,0.)); +#12366 = ORIENTED_EDGE('',*,*,#7170,.T.); +#12367 = ORIENTED_EDGE('',*,*,#12368,.F.); +#12368 = EDGE_CURVE('',#6818,#7173,#12369,.T.); +#12369 = LINE('',#12370,#12371); +#12370 = CARTESIAN_POINT('',(151.63,95.953265651803,68.220099355218)); +#12371 = VECTOR('',#12372,1.); +#12372 = DIRECTION('',(-1.,0.,0.)); +#12373 = ORIENTED_EDGE('',*,*,#6817,.F.); +#12374 = PLANE('',#12375); +#12375 = AXIS2_PLACEMENT_3D('',#12376,#12377,#12378); +#12376 = CARTESIAN_POINT('',(151.63,76.9321353259,62.039759467719)); +#12377 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12378 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12379 = ADVANCED_FACE('',(#12380),#12391,.F.); +#12380 = FACE_BOUND('',#12381,.F.); +#12381 = EDGE_LOOP('',(#12382,#12383,#12384,#12385)); +#12382 = ORIENTED_EDGE('',*,*,#6806,.T.); +#12383 = ORIENTED_EDGE('',*,*,#12361,.F.); +#12384 = ORIENTED_EDGE('',*,*,#7180,.F.); +#12385 = ORIENTED_EDGE('',*,*,#12386,.T.); +#12386 = EDGE_CURVE('',#7181,#6807,#12387,.T.); +#12387 = LINE('',#12388,#12389); +#12388 = CARTESIAN_POINT('',(151.63,59.147072977496,52.05519351504)); +#12389 = VECTOR('',#12390,1.); +#12390 = DIRECTION('',(1.,0.,0.)); +#12391 = CYLINDRICAL_SURFACE('',#12392,2.); +#12392 = AXIS2_PLACEMENT_3D('',#12393,#12394,#12395); +#12393 = CARTESIAN_POINT('',(151.63,58.529038988746,53.95730654763)); +#12394 = DIRECTION('',(-1.,0.,0.)); +#12395 = DIRECTION('',(0.,0.,1.)); +#12396 = ADVANCED_FACE('',(#12397),#12408,.T.); +#12397 = FACE_BOUND('',#12398,.T.); +#12398 = EDGE_LOOP('',(#12399,#12405,#12406,#12407)); +#12399 = ORIENTED_EDGE('',*,*,#12400,.T.); +#12400 = EDGE_CURVE('',#6826,#7190,#12401,.T.); +#12401 = LINE('',#12402,#12403); +#12402 = CARTESIAN_POINT('',(151.63,97.189333629303,64.415873290038)); +#12403 = VECTOR('',#12404,1.); +#12404 = DIRECTION('',(-1.,0.,0.)); +#12405 = ORIENTED_EDGE('',*,*,#7189,.T.); +#12406 = ORIENTED_EDGE('',*,*,#12386,.T.); +#12407 = ORIENTED_EDGE('',*,*,#6834,.F.); +#12408 = PLANE('',#12409); +#12409 = AXIS2_PLACEMENT_3D('',#12410,#12411,#12412); +#12410 = CARTESIAN_POINT('',(151.63,57.244959944906,51.43715952629)); +#12411 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12412 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12413 = ADVANCED_FACE('',(#12414),#12420,.F.); +#12414 = FACE_BOUND('',#12415,.F.); +#12415 = EDGE_LOOP('',(#12416,#12417,#12418,#12419)); +#12416 = ORIENTED_EDGE('',*,*,#6825,.T.); +#12417 = ORIENTED_EDGE('',*,*,#12400,.T.); +#12418 = ORIENTED_EDGE('',*,*,#7197,.F.); +#12419 = ORIENTED_EDGE('',*,*,#12368,.F.); +#12420 = CYLINDRICAL_SURFACE('',#12421,2.); +#12421 = AXIS2_PLACEMENT_3D('',#12422,#12423,#12424); +#12422 = CARTESIAN_POINT('',(151.63,96.571299640553,66.317986322628)); +#12423 = DIRECTION('',(-1.,0.,0.)); +#12424 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12425 = ADVANCED_FACE('',(#12426),#12442,.F.); +#12426 = FACE_BOUND('',#12427,.T.); +#12427 = EDGE_LOOP('',(#12428,#12429,#12435,#12436)); +#12428 = ORIENTED_EDGE('',*,*,#6520,.T.); +#12429 = ORIENTED_EDGE('',*,*,#12430,.T.); +#12430 = EDGE_CURVE('',#6523,#6896,#12431,.T.); +#12431 = LINE('',#12432,#12433); +#12432 = CARTESIAN_POINT('',(151.63,95.860298455961,97.630834760857)); +#12433 = VECTOR('',#12434,1.); +#12434 = DIRECTION('',(-1.,0.,0.)); +#12435 = ORIENTED_EDGE('',*,*,#6895,.F.); +#12436 = ORIENTED_EDGE('',*,*,#12437,.T.); +#12437 = EDGE_CURVE('',#6887,#6521,#12438,.T.); +#12438 = LINE('',#12439,#12440); +#12439 = CARTESIAN_POINT('',(151.63,40.699020510842,79.70784908711)); +#12440 = VECTOR('',#12441,1.); +#12441 = DIRECTION('',(1.,0.,0.)); +#12442 = PLANE('',#12443); +#12443 = AXIS2_PLACEMENT_3D('',#12444,#12445,#12446); +#12444 = CARTESIAN_POINT('',(151.63,68.279659483401,88.669341923984)); +#12445 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12446 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12447 = ADVANCED_FACE('',(#12448),#12459,.F.); +#12448 = FACE_BOUND('',#12449,.F.); +#12449 = EDGE_LOOP('',(#12450,#12451,#12452,#12458)); +#12450 = ORIENTED_EDGE('',*,*,#12430,.T.); +#12451 = ORIENTED_EDGE('',*,*,#6903,.T.); +#12452 = ORIENTED_EDGE('',*,*,#12453,.F.); +#12453 = EDGE_CURVE('',#6540,#6904,#12454,.T.); +#12454 = LINE('',#12455,#12456); +#12455 = CARTESIAN_POINT('',(151.63,94.624230478461,101.43506082603)); +#12456 = VECTOR('',#12457,1.); +#12457 = DIRECTION('',(-1.,0.,0.)); +#12458 = ORIENTED_EDGE('',*,*,#6547,.F.); +#12459 = CYLINDRICAL_SURFACE('',#12460,2.); +#12460 = AXIS2_PLACEMENT_3D('',#12461,#12462,#12463); +#12461 = CARTESIAN_POINT('',(151.63,95.242264467211,99.532947793448)); +#12462 = DIRECTION('',(-1.,0.,0.)); +#12463 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12464 = ADVANCED_FACE('',(#12465),#12476,.F.); +#12465 = FACE_BOUND('',#12466,.T.); +#12466 = EDGE_LOOP('',(#12467,#12468,#12474,#12475)); +#12467 = ORIENTED_EDGE('',*,*,#6539,.T.); +#12468 = ORIENTED_EDGE('',*,*,#12469,.F.); +#12469 = EDGE_CURVE('',#6885,#6531,#12470,.T.); +#12470 = LINE('',#12471,#12472); +#12471 = CARTESIAN_POINT('',(151.63,39.462952533342,83.512075152291)); +#12472 = VECTOR('',#12473,1.); +#12473 = DIRECTION('',(1.,0.,0.)); +#12474 = ORIENTED_EDGE('',*,*,#6912,.F.); +#12475 = ORIENTED_EDGE('',*,*,#12453,.F.); +#12476 = PLANE('',#12477); +#12477 = AXIS2_PLACEMENT_3D('',#12478,#12479,#12480); +#12478 = CARTESIAN_POINT('',(151.63,96.526343511051,102.05309481478)); +#12479 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12480 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12481 = ADVANCED_FACE('',(#12482),#12488,.F.); +#12482 = FACE_BOUND('',#12483,.F.); +#12483 = EDGE_LOOP('',(#12484,#12485,#12486,#12487)); +#12484 = ORIENTED_EDGE('',*,*,#12469,.F.); +#12485 = ORIENTED_EDGE('',*,*,#6884,.T.); +#12486 = ORIENTED_EDGE('',*,*,#12437,.T.); +#12487 = ORIENTED_EDGE('',*,*,#6530,.F.); +#12488 = CYLINDRICAL_SURFACE('',#12489,2.); +#12489 = AXIS2_PLACEMENT_3D('',#12490,#12491,#12492); +#12490 = CARTESIAN_POINT('',(151.63,40.080986522092,81.609962119701)); +#12491 = DIRECTION('',(-1.,0.,0.)); +#12492 = DIRECTION('',(0.,0.,1.)); +#12493 = ADVANCED_FACE('',(#12494),#12510,.F.); +#12494 = FACE_BOUND('',#12495,.T.); +#12495 = EDGE_LOOP('',(#12496,#12497,#12503,#12504)); +#12496 = ORIENTED_EDGE('',*,*,#6484,.T.); +#12497 = ORIENTED_EDGE('',*,*,#12498,.T.); +#12498 = EDGE_CURVE('',#6487,#6860,#12499,.T.); +#12499 = LINE('',#12500,#12501); +#12500 = CARTESIAN_POINT('',(151.63,90.534992952076,104.31223590809)); +#12501 = VECTOR('',#12502,1.); +#12502 = DIRECTION('',(-1.,0.,0.)); +#12503 = ORIENTED_EDGE('',*,*,#6859,.F.); +#12504 = ORIENTED_EDGE('',*,*,#12505,.T.); +#12505 = EDGE_CURVE('',#6851,#6485,#12506,.T.); +#12506 = LINE('',#12507,#12508); +#12507 = CARTESIAN_POINT('',(151.63,41.080054104728,88.243352200596)); +#12508 = VECTOR('',#12509,1.); +#12509 = DIRECTION('',(1.,0.,0.)); +#12510 = PLANE('',#12511); +#12511 = AXIS2_PLACEMENT_3D('',#12512,#12513,#12514); +#12512 = CARTESIAN_POINT('',(151.63,65.807523528402,96.277794054345)); +#12513 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12514 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12515 = ADVANCED_FACE('',(#12516),#12527,.F.); +#12516 = FACE_BOUND('',#12517,.F.); +#12517 = EDGE_LOOP('',(#12518,#12519,#12520,#12526)); +#12518 = ORIENTED_EDGE('',*,*,#12498,.T.); +#12519 = ORIENTED_EDGE('',*,*,#6867,.T.); +#12520 = ORIENTED_EDGE('',*,*,#12521,.F.); +#12521 = EDGE_CURVE('',#6504,#6868,#12522,.T.); +#12522 = LINE('',#12523,#12524); +#12523 = CARTESIAN_POINT('',(151.63,89.298924974576,108.11646197327)); +#12524 = VECTOR('',#12525,1.); +#12525 = DIRECTION('',(-1.,0.,0.)); +#12526 = ORIENTED_EDGE('',*,*,#6511,.F.); +#12527 = CYLINDRICAL_SURFACE('',#12528,2.); +#12528 = AXIS2_PLACEMENT_3D('',#12529,#12530,#12531); +#12529 = CARTESIAN_POINT('',(151.63,89.916958963326,106.21434894068)); +#12530 = DIRECTION('',(-1.,0.,0.)); +#12531 = DIRECTION('',(0.,-0.587785252292,0.809016994375)); +#12532 = ADVANCED_FACE('',(#12533),#12544,.F.); +#12533 = FACE_BOUND('',#12534,.T.); +#12534 = EDGE_LOOP('',(#12535,#12536,#12542,#12543)); +#12535 = ORIENTED_EDGE('',*,*,#6503,.T.); +#12536 = ORIENTED_EDGE('',*,*,#12537,.F.); +#12537 = EDGE_CURVE('',#6849,#6495,#12538,.T.); +#12538 = LINE('',#12539,#12540); +#12539 = CARTESIAN_POINT('',(151.63,39.843986127228,92.047578265777)); +#12540 = VECTOR('',#12541,1.); +#12541 = DIRECTION('',(1.,0.,0.)); +#12542 = ORIENTED_EDGE('',*,*,#6876,.F.); +#12543 = ORIENTED_EDGE('',*,*,#12521,.F.); +#12544 = PLANE('',#12545); +#12545 = AXIS2_PLACEMENT_3D('',#12546,#12547,#12548); +#12546 = CARTESIAN_POINT('',(151.63,91.201038007166,108.73449596202)); +#12547 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12548 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12549 = ADVANCED_FACE('',(#12550),#12556,.F.); +#12550 = FACE_BOUND('',#12551,.F.); +#12551 = EDGE_LOOP('',(#12552,#12553,#12554,#12555)); +#12552 = ORIENTED_EDGE('',*,*,#12537,.F.); +#12553 = ORIENTED_EDGE('',*,*,#6848,.T.); +#12554 = ORIENTED_EDGE('',*,*,#12505,.T.); +#12555 = ORIENTED_EDGE('',*,*,#6494,.F.); +#12556 = CYLINDRICAL_SURFACE('',#12557,2.); +#12557 = AXIS2_PLACEMENT_3D('',#12558,#12559,#12560); +#12558 = CARTESIAN_POINT('',(151.63,40.462020115978,90.145465233187)); +#12559 = DIRECTION('',(-1.,0.,0.)); +#12560 = DIRECTION('',(0.,0.,1.)); +#12561 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#12565)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#12562,#12563,#12564)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#12562 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#12563 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#12564 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#12565 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-06),#12562, + 'distance_accuracy_value','confusion accuracy'); +#12566 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#12567,#12569); +#12567 = ( REPRESENTATION_RELATIONSHIP('','',#6113,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#12568) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#12568 = ITEM_DEFINED_TRANSFORMATION('','',#11,#27); +#12569 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #12570); +#12570 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','housing','',#5,#6108,$); +#12571 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#6110)); +#12572 = SHAPE_DEFINITION_REPRESENTATION(#12573,#12579); +#12573 = PRODUCT_DEFINITION_SHAPE('','',#12574); +#12574 = PRODUCT_DEFINITION('design','',#12575,#12578); +#12575 = PRODUCT_DEFINITION_FORMATION('','',#12576); +#12576 = PRODUCT('back_panel','back_panel','',(#12577)); +#12577 = PRODUCT_CONTEXT('',#2,'mechanical'); +#12578 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#12579 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#12580),#27013); +#12580 = MANIFOLD_SOLID_BREP('',#12581); +#12581 = CLOSED_SHELL('',(#12582,#12895,#12926,#12957,#12975,#13017, + #13149,#13181,#13313,#13345,#13477,#13509,#13631,#13717,#13821, + #13852,#13877,#13901,#13926,#13950,#13975,#13999,#14017,#14049, + #14073,#14098,#14122,#14147,#14171,#14196,#14213,#14244,#14268, + #14292,#14316,#14340,#14364,#14388,#14412,#14436,#14460,#14484, + #14501,#14526,#14550,#14575,#14599,#14617,#14641,#14665,#14683, + #14701,#14719,#14737,#14755,#14773,#14785,#14828,#14859,#14890, + #14914,#14945,#14976,#15000,#15042,#15054,#15066,#15078,#15090, + #15121,#15152,#15183,#15214,#15232,#15250,#15268,#15286,#17813, + #17844,#17868,#17892,#17916,#17940,#17964,#17988,#18012,#18036, + #18060,#18084,#18108,#18132,#18156,#18180,#18204,#18228,#18245, + #18271,#18302,#18326,#18350,#18374,#18398,#18422,#18446,#18470, + #18494,#18518,#18542,#18566,#18590,#18614,#18638,#18662,#18686, + #18710,#18734,#18758,#18782,#18806,#18830,#18854,#18878,#18902, + #18926,#18950,#18974,#18998,#19022,#19046,#19070,#19094,#19118, + #19142,#19166,#19190,#19214,#19238,#19262,#19286,#19303,#19354, + #19385,#19409,#19433,#19457,#19481,#19505,#19529,#19553,#19577, + #19601,#19625,#19649,#19673,#19697,#19721,#19751,#19781,#19805, + #19829,#19853,#19877,#19907,#19937,#19961,#19985,#20009,#20033, + #20057,#20081,#20105,#20129,#20153,#20170,#20211,#20251,#20282, + #20313,#20344,#20375,#20406,#20437,#20468,#20499,#20530,#20561, + #20592,#20623,#20654,#20685,#20716,#20747,#20778,#20809,#20840, + #20864,#20888,#20912,#20936,#20960,#20984,#21008,#21032,#21056, + #21080,#21104,#21128,#21152,#21176,#21200,#21224,#21248,#21272, + #21296,#21320,#21344,#21368,#21385,#21407,#21461,#21492,#21516, + #21540,#21564,#21588,#21612,#21636,#21660,#21684,#21708,#21732, + #21756,#21780,#21804,#21828,#21858,#21888,#21912,#21936,#21960, + #21984,#22014,#22044,#22068,#22092,#22116,#22140,#22164,#22188, + #22212,#22236,#22260,#22277,#22318,#22349,#22373,#22397,#22421, + #22445,#22469,#22493,#22517,#22541,#22565,#22589,#22613,#22637, + #22661,#22685,#22709,#22733,#22757,#22781,#22805,#22829,#22853, + #22877,#22894,#22926,#22966,#22997,#23028,#23059,#23090,#23121, + #23152,#23183,#23214,#23245,#23276,#23307,#23331,#23355,#23379, + #23403,#23427,#23451,#23475,#23499,#23523,#23547,#23571,#23595, + #23619,#23643,#23667,#23691,#23715,#23739,#23763,#23787,#23811, + #23835,#23852,#23874,#23920,#23951,#23975,#23999,#24023,#24047, + #24071,#24095,#24119,#24143,#24167,#24191,#24215,#24239,#24263, + #24287,#24311,#24335,#24359,#24383,#24407,#24431,#24455,#24479, + #24503,#24527,#24551,#24575,#24599,#24623,#24647,#24671,#24695, + #24719,#24743,#24767,#24791,#24815,#24832,#24878,#24909,#24933, + #24957,#24981,#25005,#25029,#25053,#25077,#25101,#25125,#25149, + #25173,#25197,#25221,#25245,#25269,#25293,#25310,#25336,#25367, + #25391,#25415,#25439,#25463,#25487,#25511,#25535,#25559,#25583, + #25607,#25624,#25644,#25684,#25715,#25746,#25777,#25808,#25839, + #25870,#25901,#25932,#25956,#25980,#26004,#26028,#26052,#26076, + #26100,#26124,#26148,#26172,#26196,#26220,#26244,#26268,#26292, + #26316,#26340,#26364,#26388,#26412,#26436,#26460,#26484,#26508, + #26532,#26556,#26580,#26604,#26628,#26645,#26667,#26717,#26745, + #26765,#26782,#26806,#26815,#26839,#26848,#26872,#26881,#26905, + #26914,#26938,#26947,#26971,#26980,#27004)); +#12582 = ADVANCED_FACE('',(#12583,#12653,#12723,#12734,#12804),#12890, + .F.); +#12583 = FACE_BOUND('',#12584,.T.); +#12584 = EDGE_LOOP('',(#12585,#12595,#12604,#12612,#12621,#12629,#12638, + #12646)); +#12585 = ORIENTED_EDGE('',*,*,#12586,.T.); +#12586 = EDGE_CURVE('',#12587,#12589,#12591,.T.); +#12587 = VERTEX_POINT('',#12588); +#12588 = CARTESIAN_POINT('',(30.054889344345,106.54086249463, + 114.80161471444)); +#12589 = VERTEX_POINT('',#12590); +#12590 = CARTESIAN_POINT('',(119.94511065565,106.54086249463, + 114.80161471444)); +#12591 = LINE('',#12592,#12593); +#12592 = CARTESIAN_POINT('',(130.,106.54086249463,114.80161471444)); +#12593 = VECTOR('',#12594,1.); +#12594 = DIRECTION('',(1.,0.,0.)); +#12595 = ORIENTED_EDGE('',*,*,#12596,.T.); +#12596 = EDGE_CURVE('',#12589,#12597,#12599,.T.); +#12597 = VERTEX_POINT('',#12598); +#12598 = CARTESIAN_POINT('',(121.94511065565,105.92282850589, + 116.70372774703)); +#12599 = CIRCLE('',#12600,2.); +#12600 = AXIS2_PLACEMENT_3D('',#12601,#12602,#12603); +#12601 = CARTESIAN_POINT('',(119.94511065565,105.92282850589, + 116.70372774703)); +#12602 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12603 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12604 = ORIENTED_EDGE('',*,*,#12605,.T.); +#12605 = EDGE_CURVE('',#12597,#12606,#12608,.T.); +#12606 = VERTEX_POINT('',#12607); +#12607 = CARTESIAN_POINT('',(121.94511065565,102.46332365465, + 127.35098887447)); +#12608 = LINE('',#12609,#12610); +#12609 = CARTESIAN_POINT('',(121.94511065565,127.47981900615, + 50.35813297333)); +#12610 = VECTOR('',#12611,1.); +#12611 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12612 = ORIENTED_EDGE('',*,*,#12613,.T.); +#12613 = EDGE_CURVE('',#12606,#12614,#12616,.T.); +#12614 = VERTEX_POINT('',#12615); +#12615 = CARTESIAN_POINT('',(119.94511065565,101.8452896659, + 129.25310190706)); +#12616 = CIRCLE('',#12617,2.); +#12617 = AXIS2_PLACEMENT_3D('',#12618,#12619,#12620); +#12618 = CARTESIAN_POINT('',(119.94511065565,102.46332365465, + 127.35098887447)); +#12619 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12620 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12621 = ORIENTED_EDGE('',*,*,#12622,.T.); +#12622 = EDGE_CURVE('',#12614,#12623,#12625,.T.); +#12623 = VERTEX_POINT('',#12624); +#12624 = CARTESIAN_POINT('',(30.054889344345,101.8452896659, + 129.25310190706)); +#12625 = LINE('',#12626,#12627); +#12626 = CARTESIAN_POINT('',(130.,101.8452896659,129.25310190706)); +#12627 = VECTOR('',#12628,1.); +#12628 = DIRECTION('',(-1.,0.,0.)); +#12629 = ORIENTED_EDGE('',*,*,#12630,.T.); +#12630 = EDGE_CURVE('',#12623,#12631,#12633,.T.); +#12631 = VERTEX_POINT('',#12632); +#12632 = CARTESIAN_POINT('',(28.054889344345,102.46332365465, + 127.35098887447)); +#12633 = CIRCLE('',#12634,2.); +#12634 = AXIS2_PLACEMENT_3D('',#12635,#12636,#12637); +#12635 = CARTESIAN_POINT('',(30.054889344345,102.46332365465, + 127.35098887447)); +#12636 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12637 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12638 = ORIENTED_EDGE('',*,*,#12639,.T.); +#12639 = EDGE_CURVE('',#12631,#12640,#12642,.T.); +#12640 = VERTEX_POINT('',#12641); +#12641 = CARTESIAN_POINT('',(28.054889344345,105.92282850589, + 116.70372774703)); +#12642 = LINE('',#12643,#12644); +#12643 = CARTESIAN_POINT('',(28.054889344345,127.47981900615, + 50.35813297333)); +#12644 = VECTOR('',#12645,1.); +#12645 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12646 = ORIENTED_EDGE('',*,*,#12647,.T.); +#12647 = EDGE_CURVE('',#12640,#12587,#12648,.T.); +#12648 = CIRCLE('',#12649,2.); +#12649 = AXIS2_PLACEMENT_3D('',#12650,#12651,#12652); +#12650 = CARTESIAN_POINT('',(30.054889344345,105.92282850589, + 116.70372774703)); +#12651 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12652 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12653 = FACE_BOUND('',#12654,.T.); +#12654 = EDGE_LOOP('',(#12655,#12665,#12674,#12682,#12691,#12699,#12708, + #12716)); +#12655 = ORIENTED_EDGE('',*,*,#12656,.F.); +#12656 = EDGE_CURVE('',#12657,#12659,#12661,.T.); +#12657 = VERTEX_POINT('',#12658); +#12658 = CARTESIAN_POINT('',(79.954638982813,122.04111990515, + 67.096727660125)); +#12659 = VERTEX_POINT('',#12660); +#12660 = CARTESIAN_POINT('',(80.960079681591,122.04111990515, + 67.096727660125)); +#12661 = LINE('',#12662,#12663); +#12662 = CARTESIAN_POINT('',(74.5,122.04111990515,67.096727660125)); +#12663 = VECTOR('',#12664,1.); +#12664 = DIRECTION('',(1.,-3.330669073875E-16,1.08246744901E-15)); +#12665 = ORIENTED_EDGE('',*,*,#12666,.T.); +#12666 = EDGE_CURVE('',#12657,#12667,#12669,.T.); +#12667 = VERTEX_POINT('',#12668); +#12668 = CARTESIAN_POINT('',(79.954638982813,122.72095729277, + 65.004403324276)); +#12669 = CIRCLE('',#12670,11.1); +#12670 = AXIS2_PLACEMENT_3D('',#12671,#12672,#12673); +#12671 = CARTESIAN_POINT('',(91.,122.38103859896,66.0505654922)); +#12672 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12673 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12674 = ORIENTED_EDGE('',*,*,#12675,.F.); +#12675 = EDGE_CURVE('',#12676,#12667,#12678,.T.); +#12676 = VERTEX_POINT('',#12677); +#12677 = CARTESIAN_POINT('',(80.960079681591,122.72095729277, + 65.004403324276)); +#12678 = LINE('',#12679,#12680); +#12679 = CARTESIAN_POINT('',(74.5,122.72095729277,65.004403324276)); +#12680 = VECTOR('',#12681,1.); +#12681 = DIRECTION('',(-1.,3.330669073875E-16,-1.08246744901E-15)); +#12682 = ORIENTED_EDGE('',*,*,#12683,.T.); +#12683 = EDGE_CURVE('',#12676,#12684,#12686,.T.); +#12684 = VERTEX_POINT('',#12685); +#12685 = CARTESIAN_POINT('',(89.9,125.48354459952,56.502033850293)); +#12686 = CIRCLE('',#12687,10.1); +#12687 = AXIS2_PLACEMENT_3D('',#12688,#12689,#12690); +#12688 = CARTESIAN_POINT('',(91.,122.38103859896,66.0505654922)); +#12689 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12690 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12691 = ORIENTED_EDGE('',*,*,#12692,.T.); +#12692 = EDGE_CURVE('',#12684,#12693,#12695,.T.); +#12693 = VERTEX_POINT('',#12694); +#12694 = CARTESIAN_POINT('',(89.9,125.79424286228,55.545802921972)); +#12695 = LINE('',#12696,#12697); +#12696 = CARTESIAN_POINT('',(89.9,127.47981900615,50.35813297333)); +#12697 = VECTOR('',#12698,1.); +#12698 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12699 = ORIENTED_EDGE('',*,*,#12700,.T.); +#12700 = EDGE_CURVE('',#12693,#12701,#12703,.T.); +#12701 = VERTEX_POINT('',#12702); +#12702 = CARTESIAN_POINT('',(92.1,125.79424286228,55.545802921972)); +#12703 = CIRCLE('',#12704,11.1); +#12704 = AXIS2_PLACEMENT_3D('',#12705,#12706,#12707); +#12705 = CARTESIAN_POINT('',(91.,122.38103859896,66.0505654922)); +#12706 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12707 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12708 = ORIENTED_EDGE('',*,*,#12709,.T.); +#12709 = EDGE_CURVE('',#12701,#12710,#12712,.T.); +#12710 = VERTEX_POINT('',#12711); +#12711 = CARTESIAN_POINT('',(92.1,125.48354459952,56.502033850293)); +#12712 = LINE('',#12713,#12714); +#12713 = CARTESIAN_POINT('',(92.1,127.47981900615,50.35813297333)); +#12714 = VECTOR('',#12715,1.); +#12715 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12716 = ORIENTED_EDGE('',*,*,#12717,.T.); +#12717 = EDGE_CURVE('',#12710,#12659,#12718,.T.); +#12718 = CIRCLE('',#12719,10.1); +#12719 = AXIS2_PLACEMENT_3D('',#12720,#12721,#12722); +#12720 = CARTESIAN_POINT('',(91.,122.38103859896,66.0505654922)); +#12721 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12722 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12723 = FACE_BOUND('',#12724,.T.); +#12724 = EDGE_LOOP('',(#12725)); +#12725 = ORIENTED_EDGE('',*,*,#12726,.T.); +#12726 = EDGE_CURVE('',#12727,#12727,#12729,.T.); +#12727 = VERTEX_POINT('',#12728); +#12728 = CARTESIAN_POINT('',(115.,125.70297128849,55.826707942027)); +#12729 = CIRCLE('',#12730,5.75); +#12730 = AXIS2_PLACEMENT_3D('',#12731,#12732,#12733); +#12731 = CARTESIAN_POINT('',(115.,123.92612357084,61.295282910725)); +#12732 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12733 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12734 = FACE_BOUND('',#12735,.T.); +#12735 = EDGE_LOOP('',(#12736,#12747,#12755,#12764,#12772,#12781,#12789, + #12798)); +#12736 = ORIENTED_EDGE('',*,*,#12737,.T.); +#12737 = EDGE_CURVE('',#12738,#12740,#12742,.T.); +#12738 = VERTEX_POINT('',#12739); +#12739 = CARTESIAN_POINT('',(142.5,123.92612357084,61.295282910725)); +#12740 = VERTEX_POINT('',#12741); +#12741 = CARTESIAN_POINT('',(130.,127.78883600052,49.407076457035)); +#12742 = CIRCLE('',#12743,12.5); +#12743 = AXIS2_PLACEMENT_3D('',#12744,#12745,#12746); +#12744 = CARTESIAN_POINT('',(130.,123.92612357084,61.295282910725)); +#12745 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12746 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12747 = ORIENTED_EDGE('',*,*,#12748,.T.); +#12748 = EDGE_CURVE('',#12740,#12749,#12751,.T.); +#12749 = VERTEX_POINT('',#12750); +#12750 = CARTESIAN_POINT('',(20.,127.78883600052,49.407076457035)); +#12751 = LINE('',#12752,#12753); +#12752 = CARTESIAN_POINT('',(20.,127.78883600052,49.407076457035)); +#12753 = VECTOR('',#12754,1.); +#12754 = DIRECTION('',(-1.,0.,0.)); +#12755 = ORIENTED_EDGE('',*,*,#12756,.T.); +#12756 = EDGE_CURVE('',#12749,#12757,#12759,.T.); +#12757 = VERTEX_POINT('',#12758); +#12758 = CARTESIAN_POINT('',(7.5,123.92612357084,61.295282910725)); +#12759 = CIRCLE('',#12760,12.5); +#12760 = AXIS2_PLACEMENT_3D('',#12761,#12762,#12763); +#12761 = CARTESIAN_POINT('',(20.,123.92612357084,61.295282910725)); +#12762 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12763 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12764 = ORIENTED_EDGE('',*,*,#12765,.T.); +#12765 = EDGE_CURVE('',#12757,#12766,#12768,.T.); +#12766 = VERTEX_POINT('',#12767); +#12767 = CARTESIAN_POINT('',(7.5,103.54488313496,124.02229106743)); +#12768 = LINE('',#12769,#12770); +#12769 = CARTESIAN_POINT('',(7.5,127.47981900615,50.35813297333)); +#12770 = VECTOR('',#12771,1.); +#12771 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#12772 = ORIENTED_EDGE('',*,*,#12773,.T.); +#12773 = EDGE_CURVE('',#12766,#12774,#12776,.T.); +#12774 = VERTEX_POINT('',#12775); +#12775 = CARTESIAN_POINT('',(20.,99.682170705275,135.91049752112)); +#12776 = CIRCLE('',#12777,12.5); +#12777 = AXIS2_PLACEMENT_3D('',#12778,#12779,#12780); +#12778 = CARTESIAN_POINT('',(20.,103.54488313496,124.02229106743)); +#12779 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12780 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12781 = ORIENTED_EDGE('',*,*,#12782,.T.); +#12782 = EDGE_CURVE('',#12774,#12783,#12785,.T.); +#12783 = VERTEX_POINT('',#12784); +#12784 = CARTESIAN_POINT('',(130.,99.682170705275,135.91049752112)); +#12785 = LINE('',#12786,#12787); +#12786 = CARTESIAN_POINT('',(130.,99.682170705275,135.91049752112)); +#12787 = VECTOR('',#12788,1.); +#12788 = DIRECTION('',(1.,0.,0.)); +#12789 = ORIENTED_EDGE('',*,*,#12790,.T.); +#12790 = EDGE_CURVE('',#12783,#12791,#12793,.T.); +#12791 = VERTEX_POINT('',#12792); +#12792 = CARTESIAN_POINT('',(142.5,103.54488313496,124.02229106743)); +#12793 = CIRCLE('',#12794,12.5); +#12794 = AXIS2_PLACEMENT_3D('',#12795,#12796,#12797); +#12795 = CARTESIAN_POINT('',(130.,103.54488313496,124.02229106743)); +#12796 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12797 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12798 = ORIENTED_EDGE('',*,*,#12799,.T.); +#12799 = EDGE_CURVE('',#12791,#12738,#12800,.T.); +#12800 = LINE('',#12801,#12802); +#12801 = CARTESIAN_POINT('',(142.5,123.92612357084,61.295282910725)); +#12802 = VECTOR('',#12803,1.); +#12803 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12804 = FACE_BOUND('',#12805,.T.); +#12805 = EDGE_LOOP('',(#12806,#12816,#12825,#12833,#12842,#12850,#12858, + #12867,#12875,#12884)); +#12806 = ORIENTED_EDGE('',*,*,#12807,.F.); +#12807 = EDGE_CURVE('',#12808,#12810,#12812,.T.); +#12808 = VERTEX_POINT('',#12809); +#12809 = CARTESIAN_POINT('',(113.84680442814,121.54291496793, + 68.630044807131)); +#12810 = VERTEX_POINT('',#12811); +#12811 = CARTESIAN_POINT('',(114.79061914959,120.75016168891, + 71.069888522986)); +#12812 = LINE('',#12813,#12814); +#12813 = CARTESIAN_POINT('',(113.86664514959,121.52624983585, + 68.68133480978)); +#12814 = VECTOR('',#12815,1.); +#12815 = DIRECTION('',(0.345275649927,-0.290012856782,0.892567794887)); +#12816 = ORIENTED_EDGE('',*,*,#12817,.F.); +#12817 = EDGE_CURVE('',#12818,#12808,#12820,.T.); +#12818 = VERTEX_POINT('',#12819); +#12819 = CARTESIAN_POINT('',(114.24568276285,121.61246005167, + 68.416007047794)); +#12820 = CIRCLE('',#12821,0.232); +#12821 = AXIS2_PLACEMENT_3D('',#12822,#12823,#12824); +#12822 = CARTESIAN_POINT('',(114.06453673412,121.56766845003, + 68.553861422758)); +#12823 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12824 = DIRECTION('',(1.,0.,-0.)); +#12825 = ORIENTED_EDGE('',*,*,#12826,.F.); +#12826 = EDGE_CURVE('',#12827,#12818,#12829,.T.); +#12827 = VERTEX_POINT('',#12828); +#12828 = CARTESIAN_POINT('',(117.12954789913,120.4987506129, + 71.843652252699)); +#12829 = LINE('',#12830,#12831); +#12830 = CARTESIAN_POINT('',(117.10367714959,120.50874154402, + 71.812903328454)); +#12831 = VECTOR('',#12832,1.); +#12832 = DIRECTION('',(-0.624778740174,0.241281040269,-0.742586685467)); +#12833 = ORIENTED_EDGE('',*,*,#12834,.F.); +#12834 = EDGE_CURVE('',#12835,#12827,#12837,.T.); +#12835 = VERTEX_POINT('',#12836); +#12836 = CARTESIAN_POINT('',(116.9484018704,120.38226706857, + 72.202151739444)); +#12837 = CIRCLE('',#12838,0.232); +#12838 = AXIS2_PLACEMENT_3D('',#12839,#12840,#12841); +#12839 = CARTESIAN_POINT('',(116.9484018704,120.45395901126, + 71.981506627663)); +#12840 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12841 = DIRECTION('',(1.,0.,-0.)); +#12842 = ORIENTED_EDGE('',*,*,#12843,.F.); +#12843 = EDGE_CURVE('',#12844,#12835,#12846,.T.); +#12844 = VERTEX_POINT('',#12845); +#12845 = CARTESIAN_POINT('',(115.20920714959,120.38226706857, + 72.202151739444)); +#12846 = LINE('',#12847,#12848); +#12847 = CARTESIAN_POINT('',(115.20920714959,120.38226706857, + 72.202151739444)); +#12848 = VECTOR('',#12849,1.); +#12849 = DIRECTION('',(1.,0.,0.)); +#12850 = ORIENTED_EDGE('',*,*,#12851,.F.); +#12851 = EDGE_CURVE('',#12852,#12844,#12854,.T.); +#12852 = VERTEX_POINT('',#12853); +#12853 = CARTESIAN_POINT('',(116.15071124896,119.59145395728, + 74.636024233036)); +#12854 = LINE('',#12855,#12856); +#12855 = CARTESIAN_POINT('',(116.13318114959,119.6061783036, + 74.590707354763)); +#12856 = VECTOR('',#12857,1.); +#12857 = DIRECTION('',(-0.345275407748,0.290012884315,-0.892567879624)); +#12858 = ORIENTED_EDGE('',*,*,#12859,.F.); +#12859 = EDGE_CURVE('',#12860,#12852,#12862,.T.); +#12860 = VERTEX_POINT('',#12861); +#12861 = CARTESIAN_POINT('',(115.75189526714,119.5218848097, + 74.850136039649)); +#12862 = CIRCLE('',#12863,0.232); +#12863 = AXIS2_PLACEMENT_3D('',#12864,#12865,#12866); +#12864 = CARTESIAN_POINT('',(115.93297892231,119.56670049253, + 74.712207563973)); +#12865 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12866 = DIRECTION('',(1.,0.,-0.)); +#12867 = ORIENTED_EDGE('',*,*,#12868,.F.); +#12868 = EDGE_CURVE('',#12869,#12860,#12871,.T.); +#12869 = VERTEX_POINT('',#12870); +#12870 = CARTESIAN_POINT('',(112.87051446514,120.63365406738, + 71.428462111738)); +#12871 = LINE('',#12872,#12873); +#12872 = CARTESIAN_POINT('',(112.89626714959,120.62371749712, + 71.459043730436)); +#12873 = VECTOR('',#12874,1.); +#12874 = DIRECTION('',(0.625114582685,-0.241197960567,0.742330992438)); +#12875 = ORIENTED_EDGE('',*,*,#12876,.F.); +#12876 = EDGE_CURVE('',#12877,#12869,#12879,.T.); +#12877 = VERTEX_POINT('',#12878); +#12878 = CARTESIAN_POINT('',(113.05159812031,120.75016168891, + 71.069888522986)); +#12879 = CIRCLE('',#12880,0.232); +#12880 = AXIS2_PLACEMENT_3D('',#12881,#12882,#12883); +#12881 = CARTESIAN_POINT('',(113.05159812031,120.67846974622, + 71.290533634766)); +#12882 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#12883 = DIRECTION('',(1.,0.,-0.)); +#12884 = ORIENTED_EDGE('',*,*,#12885,.F.); +#12885 = EDGE_CURVE('',#12810,#12877,#12886,.T.); +#12886 = LINE('',#12887,#12888); +#12887 = CARTESIAN_POINT('',(114.79061914959,120.75016168891, + 71.069888522986)); +#12888 = VECTOR('',#12889,1.); +#12889 = DIRECTION('',(-1.,0.,0.)); +#12890 = PLANE('',#12891); +#12891 = AXIS2_PLACEMENT_3D('',#12892,#12893,#12894); +#12892 = CARTESIAN_POINT('',(130.,127.47981900615,50.35813297333)); +#12893 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12894 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12895 = ADVANCED_FACE('',(#12896),#12921,.T.); +#12896 = FACE_BOUND('',#12897,.T.); +#12897 = EDGE_LOOP('',(#12898,#12908,#12914,#12915)); +#12898 = ORIENTED_EDGE('',*,*,#12899,.T.); +#12899 = EDGE_CURVE('',#12900,#12902,#12904,.T.); +#12900 = VERTEX_POINT('',#12901); +#12901 = CARTESIAN_POINT('',(80.960079681591,119.18795035626, + 66.169676677)); +#12902 = VERTEX_POINT('',#12903); +#12903 = CARTESIAN_POINT('',(79.954638982813,119.18795035626, + 66.169676677)); +#12904 = LINE('',#12905,#12906); +#12905 = CARTESIAN_POINT('',(74.5,119.18795035626,66.169676677)); +#12906 = VECTOR('',#12907,1.); +#12907 = DIRECTION('',(-1.,3.330669073875E-16,-1.08246744901E-15)); +#12908 = ORIENTED_EDGE('',*,*,#12909,.T.); +#12909 = EDGE_CURVE('',#12902,#12657,#12910,.T.); +#12910 = LINE('',#12911,#12912); +#12911 = CARTESIAN_POINT('',(79.954638982813,120.61455217487, + 66.633207706548)); +#12912 = VECTOR('',#12913,1.); +#12913 = DIRECTION('',(2.775557561563E-16,0.951056516295,0.309016994375) + ); +#12914 = ORIENTED_EDGE('',*,*,#12656,.T.); +#12915 = ORIENTED_EDGE('',*,*,#12916,.T.); +#12916 = EDGE_CURVE('',#12659,#12900,#12917,.T.); +#12917 = LINE('',#12918,#12919); +#12918 = CARTESIAN_POINT('',(80.960079681591,100.3570313354, + 60.051140188956)); +#12919 = VECTOR('',#12920,1.); +#12920 = DIRECTION('',(-2.775557561563E-16,-0.951056516295, + -0.309016994375)); +#12921 = PLANE('',#12922); +#12922 = AXIS2_PLACEMENT_3D('',#12923,#12924,#12925); +#12923 = CARTESIAN_POINT('',(99.171071643187,127.68719154834, + 68.931247543339)); +#12924 = DIRECTION('',(1.171455364583E-15,0.309016994375,-0.951056516295 + )); +#12925 = DIRECTION('',(-0.951056516295,-0.293892626146, + -9.549150281253E-02)); +#12926 = ADVANCED_FACE('',(#12927),#12952,.F.); +#12927 = FACE_BOUND('',#12928,.T.); +#12928 = EDGE_LOOP('',(#12929,#12939,#12945,#12946)); +#12929 = ORIENTED_EDGE('',*,*,#12930,.T.); +#12930 = EDGE_CURVE('',#12931,#12933,#12935,.T.); +#12931 = VERTEX_POINT('',#12932); +#12932 = CARTESIAN_POINT('',(79.954638982813,119.86778774389, + 64.077352341151)); +#12933 = VERTEX_POINT('',#12934); +#12934 = CARTESIAN_POINT('',(80.960079681591,119.86778774389, + 64.077352341151)); +#12935 = LINE('',#12936,#12937); +#12936 = CARTESIAN_POINT('',(74.5,119.86778774389,64.077352341151)); +#12937 = VECTOR('',#12938,1.); +#12938 = DIRECTION('',(1.,-3.330669073875E-16,1.08246744901E-15)); +#12939 = ORIENTED_EDGE('',*,*,#12940,.T.); +#12940 = EDGE_CURVE('',#12933,#12676,#12941,.T.); +#12941 = LINE('',#12942,#12943); +#12942 = CARTESIAN_POINT('',(80.960079681591,101.03686872303, + 57.958815853106)); +#12943 = VECTOR('',#12944,1.); +#12944 = DIRECTION('',(2.775557561563E-16,0.951056516295,0.309016994375) + ); +#12945 = ORIENTED_EDGE('',*,*,#12675,.T.); +#12946 = ORIENTED_EDGE('',*,*,#12947,.F.); +#12947 = EDGE_CURVE('',#12931,#12667,#12948,.T.); +#12948 = LINE('',#12949,#12950); +#12949 = CARTESIAN_POINT('',(79.954638982813,121.2943895625, + 64.540883370699)); +#12950 = VECTOR('',#12951,1.); +#12951 = DIRECTION('',(2.775557561563E-16,0.951056516295,0.309016994375) + ); +#12952 = PLANE('',#12953); +#12953 = AXIS2_PLACEMENT_3D('',#12954,#12955,#12956); +#12954 = CARTESIAN_POINT('',(99.171071643187,128.36702893596, + 66.838923207489)); +#12955 = DIRECTION('',(1.171455364583E-15,0.309016994375,-0.951056516295 + )); +#12956 = DIRECTION('',(-0.951056516295,-0.293892626146, + -9.549150281253E-02)); +#12957 = ADVANCED_FACE('',(#12958),#12970,.F.); +#12958 = FACE_BOUND('',#12959,.F.); +#12959 = EDGE_LOOP('',(#12960,#12961,#12962,#12963)); +#12960 = ORIENTED_EDGE('',*,*,#12909,.T.); +#12961 = ORIENTED_EDGE('',*,*,#12666,.T.); +#12962 = ORIENTED_EDGE('',*,*,#12947,.F.); +#12963 = ORIENTED_EDGE('',*,*,#12964,.F.); +#12964 = EDGE_CURVE('',#12902,#12931,#12965,.T.); +#12965 = CIRCLE('',#12966,11.1); +#12966 = AXIS2_PLACEMENT_3D('',#12967,#12968,#12969); +#12967 = CARTESIAN_POINT('',(91.,119.52786905008,65.123514509076)); +#12968 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#12969 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#12970 = CYLINDRICAL_SURFACE('',#12971,11.1); +#12971 = AXIS2_PLACEMENT_3D('',#12972,#12973,#12974); +#12972 = CARTESIAN_POINT('',(91.,100.69695002922,59.004978021031)); +#12973 = DIRECTION('',(2.775557561563E-16,0.951056516295,0.309016994375) + ); +#12974 = DIRECTION('',(1.250251153857E-15,0.309016994375,-0.951056516295 + )); +#12975 = ADVANCED_FACE('',(#12976),#13012,.T.); +#12976 = FACE_BOUND('',#12977,.T.); +#12977 = EDGE_LOOP('',(#12978,#12989,#12997,#13006)); +#12978 = ORIENTED_EDGE('',*,*,#12979,.T.); +#12979 = EDGE_CURVE('',#12980,#12982,#12984,.T.); +#12980 = VERTEX_POINT('',#12981); +#12981 = CARTESIAN_POINT('',(146.5,132.43819143286,63.732051553649)); +#12982 = VERTEX_POINT('',#12983); +#12983 = CARTESIAN_POINT('',(144.5,130.46281475167,63.419182623568)); +#12984 = CIRCLE('',#12985,2.); +#12985 = AXIS2_PLACEMENT_3D('',#12986,#12987,#12988); +#12986 = CARTESIAN_POINT('',(146.5,130.46281475167,63.419182623568)); +#12987 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#12988 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#12989 = ORIENTED_EDGE('',*,*,#12990,.F.); +#12990 = EDGE_CURVE('',#12991,#12982,#12993,.T.); +#12991 = VERTEX_POINT('',#12992); +#12992 = CARTESIAN_POINT('',(144.5,120.01655639592,129.37426213983)); +#12993 = LINE('',#12994,#12995); +#12994 = CARTESIAN_POINT('',(144.5,130.41326118128,63.732051553649)); +#12995 = VECTOR('',#12996,1.); +#12996 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#12997 = ORIENTED_EDGE('',*,*,#12998,.F.); +#12998 = EDGE_CURVE('',#12999,#12991,#13001,.T.); +#12999 = VERTEX_POINT('',#13000); +#13000 = CARTESIAN_POINT('',(146.5,121.99193307711,129.68713106992)); +#13001 = CIRCLE('',#13002,2.); +#13002 = AXIS2_PLACEMENT_3D('',#13003,#13004,#13005); +#13003 = CARTESIAN_POINT('',(146.5,120.01655639592,129.37426213983)); +#13004 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13005 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13006 = ORIENTED_EDGE('',*,*,#13007,.F.); +#13007 = EDGE_CURVE('',#12980,#12999,#13008,.T.); +#13008 = LINE('',#13009,#13010); +#13009 = CARTESIAN_POINT('',(146.5,121.94237950673,130.)); +#13010 = VECTOR('',#13011,1.); +#13011 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13012 = CYLINDRICAL_SURFACE('',#13013,2.); +#13013 = AXIS2_PLACEMENT_3D('',#13014,#13015,#13016); +#13014 = CARTESIAN_POINT('',(146.5,138.90434566668,10.121454022723)); +#13015 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13016 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13017 = ADVANCED_FACE('',(#13018),#13046,.T.); +#13018 = FACE_BOUND('',#13019,.T.); +#13019 = EDGE_LOOP('',(#13020,#13031,#13038,#13039)); +#13020 = ORIENTED_EDGE('',*,*,#13021,.T.); +#13021 = EDGE_CURVE('',#13022,#13024,#13026,.T.); +#13022 = VERTEX_POINT('',#13023); +#13023 = CARTESIAN_POINT('',(130.,118.02124711932,143.97214910724)); +#13024 = VERTEX_POINT('',#13025); +#13025 = CARTESIAN_POINT('',(130.,119.37858981176,146.18713106992)); +#13026 = CIRCLE('',#13027,2.); +#13027 = AXIS2_PLACEMENT_3D('',#13028,#13029,#13030); +#13028 = CARTESIAN_POINT('',(130.,117.40321313057,145.87426213983)); +#13029 = DIRECTION('',(1.,0.,0.)); +#13030 = DIRECTION('',(0.,0.,-1.)); +#13031 = ORIENTED_EDGE('',*,*,#13032,.F.); +#13032 = EDGE_CURVE('',#12999,#13024,#13033,.T.); +#13033 = ELLIPSE('',#13034,16.705674575502,16.5); +#13034 = AXIS2_PLACEMENT_3D('',#13035,#13036,#13037); +#13035 = CARTESIAN_POINT('',(130.,121.99193307711,129.68713106992)); +#13036 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13037 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13038 = ORIENTED_EDGE('',*,*,#12998,.T.); +#13039 = ORIENTED_EDGE('',*,*,#13040,.F.); +#13040 = EDGE_CURVE('',#13022,#12991,#13041,.T.); +#13041 = ELLIPSE('',#13042,14.733620160116,14.5); +#13042 = AXIS2_PLACEMENT_3D('',#13043,#13044,#13045); +#13043 = CARTESIAN_POINT('',(130.,120.01655639592,129.37426213983)); +#13044 = DIRECTION('',(0.,0.990787519209,0.135425594994)); +#13045 = DIRECTION('',(0.,0.135425594994,-0.990787519209)); +#13046 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#13047,#13048,#13049) + ,(#13050,#13051,#13052) + ,(#13053,#13054,#13055) + ,(#13056,#13057,#13058) + ,(#13059,#13060,#13061) + ,(#13062,#13063,#13064) + ,(#13065,#13066,#13067) + ,(#13068,#13069,#13070) + ,(#13071,#13072,#13073) + ,(#13074,#13075,#13076) + ,(#13077,#13078,#13079) + ,(#13080,#13081,#13082) + ,(#13083,#13084,#13085) + ,(#13086,#13087,#13088) + ,(#13089,#13090,#13091) + ,(#13092,#13093,#13094) + ,(#13095,#13096,#13097) + ,(#13098,#13099,#13100) + ,(#13101,#13102,#13103) + ,(#13104,#13105,#13106) + ,(#13107,#13108,#13109) + ,(#13110,#13111,#13112) + ,(#13113,#13114,#13115) + ,(#13116,#13117,#13118) + ,(#13119,#13120,#13121) + ,(#13122,#13123,#13124) + ,(#13125,#13126,#13127) + ,(#13128,#13129,#13130) + ,(#13131,#13132,#13133) + ,(#13134,#13135,#13136) + ,(#13137,#13138,#13139) + ,(#13140,#13141,#13142) + ,(#13143,#13144,#13145) + ,(#13146,#13147,#13148 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.7604059656,1.) + ,(1.,0.760405985457,1.) + ,(1.,0.760323294568,1.) + ,(1.,0.75999324506,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.759088305079,1.) + ,(1.,0.758678122052,1.) + ,(1.,0.757698117208,1.) + ,(1.,0.757128295704,1.) + ,(1.,0.755833435755,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.753508771185,1.) + ,(1.,0.752634183212,1.) + ,(1.,0.750742352455,1.) + ,(1.,0.749725110415,1.) + ,(1.,0.747556076766,1.) + ,(1.,0.746404286091,1.) + ,(1.,0.743975444744,1.) + ,(1.,0.742698395234,1.) + ,(1.,0.740029478675,1.) + ,(1.,0.738637613057,1.) + ,(1.,0.735750620886,1.) + ,(1.,0.734255496066,1.) + ,(1.,0.731174608952,1.) + ,(1.,0.72958884874,1.) + ,(1.,0.726340324003,1.) + ,(1.,0.724677561959,1.) + ,(1.,0.721289607928,1.) + ,(1.,0.719564418881,1.) + ,(1.,0.716067045082,1.) + ,(1.,0.714294863776,1.) + ,(1.,0.710719703807,1.) + ,(1.,0.708916738351,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#13047 = CARTESIAN_POINT('',(130.,119.37858981176,146.18713106992)); +#13048 = CARTESIAN_POINT('',(130.,119.64580512202,144.5)); +#13049 = CARTESIAN_POINT('',(130.,118.02124711932,143.97214910724)); +#13050 = CARTESIAN_POINT('',(130.53996162055,119.37858981175, + 146.18713106993)); +#13051 = CARTESIAN_POINT('',(130.4833653834,119.64580512204, + 144.50000000002)); +#13052 = CARTESIAN_POINT('',(130.47451172715,118.02124711932, + 143.97214910725)); +#13053 = CARTESIAN_POINT('',(131.07992163937,119.3827912051, + 146.16060451634)); +#13054 = CARTESIAN_POINT('',(130.96683349274,119.64963693346, + 144.47580689472)); +#13055 = CARTESIAN_POINT('',(130.94902204671,118.02445491801, + 143.94868052357)); +#13056 = CARTESIAN_POINT('',(132.1546439915,119.39955634266, + 146.05475360367)); +#13057 = CARTESIAN_POINT('',(131.92868773287,119.66491778797, + 144.37932737637)); +#13058 = CARTESIAN_POINT('',(131.89347502284,118.0372552397, + 143.8550320594)); +#13059 = CARTESIAN_POINT('',(132.68940428002,119.41212006097, + 145.97542940817)); +#13060 = CARTESIAN_POINT('',(132.40727660662,119.67637337891, + 144.30699962173)); +#13061 = CARTESIAN_POINT('',(132.36341588244,118.04684774292, + 143.78485232367)); +#13062 = CARTESIAN_POINT('',(133.7485763465,119.44548887865, + 145.76474698497)); +#13063 = CARTESIAN_POINT('',(133.3545561966,119.70677637897, + 144.1150426341)); +#13064 = CARTESIAN_POINT('',(133.29420345602,118.07232511223, + 143.59845728125)); +#13065 = CARTESIAN_POINT('',(134.27298648727,119.46629392645, + 145.63338908291)); +#13066 = CARTESIAN_POINT('',(133.82343853131,119.72573665911, + 143.9953321366)); +#13067 = CARTESIAN_POINT('',(133.75504873123,118.08820993892, + 143.48224226268)); +#13068 = CARTESIAN_POINT('',(135.30640786212,119.51594506431, + 145.31990413608)); +#13069 = CARTESIAN_POINT('',(134.74660177976,119.77094613633, + 143.70989073136)); +#13070 = CARTESIAN_POINT('',(134.66320690914,118.12611899483, + 143.20489572814)); +#13071 = CARTESIAN_POINT('',(135.8154174988,119.54479107761, + 145.13777757587)); +#13072 = CARTESIAN_POINT('',(135.20105553073,119.79721408451, + 143.54404143374)); +#13073 = CARTESIAN_POINT('',(135.11051840803,118.14814316544, + 143.04376464089)); +#13074 = CARTESIAN_POINT('',(136.81313576924,119.61024636804, + 144.72450913683)); +#13075 = CARTESIAN_POINT('',(136.09082092179,119.85676089625, + 143.16807766089)); +#13076 = CARTESIAN_POINT('',(135.98730113055,118.19811882303, + 142.67813761299)); +#13077 = CARTESIAN_POINT('',(137.30184286078,119.64685554397, + 144.49336789681)); +#13078 = CARTESIAN_POINT('',(136.52627995664,119.89006374197, + 142.9578117683)); +#13079 = CARTESIAN_POINT('',(136.41677099887,118.22607023275, + 142.47364223751)); +#13080 = CARTESIAN_POINT('',(138.25424945447,119.72748461674, + 143.98429596652)); +#13081 = CARTESIAN_POINT('',(137.37372634788,119.96333046372, + 142.49522389291)); +#13082 = CARTESIAN_POINT('',(137.25373436908,118.28763119911, + 142.02325590439)); +#13083 = CARTESIAN_POINT('',(138.71794748443,119.77150438893, + 143.70636606317)); +#13084 = CARTESIAN_POINT('',(137.78582982368,120.00332271643, + 142.24272274675)); +#13085 = CARTESIAN_POINT('',(137.66122657722,118.32124066059, + 141.77736564293)); +#13086 = CARTESIAN_POINT('',(139.61587020521,119.86653074198, + 143.10639328264)); +#13087 = CARTESIAN_POINT('',(138.58249277858,120.08955049836, + 141.69830195798)); +#13088 = CARTESIAN_POINT('',(138.45031018033,118.39379406997, + 141.24655747119)); +#13089 = CARTESIAN_POINT('',(140.05009350808,119.91753717596, + 142.78435133287)); +#13090 = CARTESIAN_POINT('',(138.96713230071,120.13581779913, + 141.40618171765)); +#13091 = CARTESIAN_POINT('',(138.83190035559,118.43273790572, + 140.9616403814)); +#13092 = CARTESIAN_POINT('',(140.88488486931,120.02604565358, + 142.09925576793)); +#13093 = CARTESIAN_POINT('',(139.7050954612,120.23411482893, + 140.78555869692)); +#13094 = CARTESIAN_POINT('',(139.56550488515,118.51558502911, + 140.3555223439)); +#13095 = CARTESIAN_POINT('',(141.2854516373,120.0835475295, + 141.73620321175)); +#13096 = CARTESIAN_POINT('',(140.05845947576,120.28617859121, + 140.45684103888)); +#13097 = CARTESIAN_POINT('',(139.91751810551,118.5594881887, + 140.0343223331)); +#13098 = CARTESIAN_POINT('',(142.04907214184,120.20449313573, + 140.97258270723)); +#13099 = CARTESIAN_POINT('',(140.73043989004,120.39553008864, + 139.76642285646)); +#13100 = CARTESIAN_POINT('',(140.58857854889,118.65183116304, + 139.35873167787)); +#13101 = CARTESIAN_POINT('',(142.41212469801,120.26793667909, + 140.57201593924)); +#13102 = CARTESIAN_POINT('',(141.04905476734,120.45285288675, + 139.40450095299)); +#13103 = CARTESIAN_POINT('',(140.90762473462,118.70027083504, + 139.00434207775)); +#13104 = CARTESIAN_POINT('',(143.09722026296,120.40015464163, + 139.73722457799)); +#13105 = CARTESIAN_POINT('',(141.6484811013,120.57213253855, + 138.6513988708)); +#13106 = CARTESIAN_POINT('',(141.50967841289,118.80122034699, + 138.26578511213)); +#13107 = CARTESIAN_POINT('',(143.41926221272,120.46892885642, + 139.30300127513)); +#13108 = CARTESIAN_POINT('',(141.92924837559,120.63412419311, + 138.25999896791)); +#13109 = CARTESIAN_POINT('',(141.79268497481,118.85373003089, + 137.88161888826)); +#13110 = CARTESIAN_POINT('',(144.01923499326,120.61114584401, + 138.40507855434)); +#13111 = CARTESIAN_POINT('',(142.4503309561,120.76210691804, + 137.4519478445)); +#13112 = CARTESIAN_POINT('',(142.31993378195,118.96231388146, + 137.08720831956)); +#13113 = CARTESIAN_POINT('',(144.29716489661,120.68458839696, + 137.94138052439)); +#13114 = CARTESIAN_POINT('',(142.69056019911,120.82813121799, + 137.03508682073)); +#13115 = CARTESIAN_POINT('',(142.56417521216,119.01838788029, + 136.6769652027)); +#13116 = CARTESIAN_POINT('',(144.80623682688,120.83543478227, + 136.9889739307)); +#13117 = CARTESIAN_POINT('',(143.12835186678,120.96350713105, + 136.18035694454)); +#13118 = CARTESIAN_POINT('',(143.01154145393,119.13356034765, + 135.83435163895)); +#13119 = CARTESIAN_POINT('',(145.03737806691,120.91283838144, + 136.50026683916)); +#13120 = CARTESIAN_POINT('',(143.32578868997,121.03288912094, + 135.74229630083)); +#13121 = CARTESIAN_POINT('',(143.21466557395,119.19265863816, + 135.40198249456)); +#13122 = CARTESIAN_POINT('',(145.45064650595,121.07086143131, + 135.50254856871)); +#13123 = CARTESIAN_POINT('',(143.67623548205,121.17427854352, + 134.84959861985)); +#13124 = CARTESIAN_POINT('',(143.57784086887,119.31331054849, + 134.51928076504)); +#13125 = CARTESIAN_POINT('',(145.63277306617,121.15148063773, + 134.99353893204)); +#13126 = CARTESIAN_POINT('',(143.82908418895,121.24631229282, + 134.39479542611)); +#13127 = CARTESIAN_POINT('',(143.73789148238,119.37486398182, + 134.06894954433)); +#13128 = CARTESIAN_POINT('',(145.94625801299,121.31515850381, + 133.96011755719)); +#13129 = CARTESIAN_POINT('',(144.08906493643,121.39228163064, + 133.47318129837)); +#13130 = CARTESIAN_POINT('',(144.01337825384,119.49983339126, + 133.1546605492)); +#13131 = CARTESIAN_POINT('',(146.07761591505,121.39821691045, + 133.43570741644)); +#13132 = CARTESIAN_POINT('',(144.19600538415,121.4662383888, + 133.00623670451)); +#13133 = CARTESIAN_POINT('',(144.12881398595,119.56324917421, + 132.69070418803)); +#13134 = CARTESIAN_POINT('',(146.28829833825,121.56597328542, + 132.37653534993)); +#13135 = CARTESIAN_POINT('',(144.3633593977,121.61531667275, + 132.06499346338)); +#13136 = CARTESIAN_POINT('',(144.31395914574,119.69133255905, + 131.75363303009)); +#13137 = CARTESIAN_POINT('',(146.36762253375,121.65067099442, + 131.84177506142)); +#13138 = CARTESIAN_POINT('',(144.42355768072,121.69045329976, + 131.59059947079)); +#13139 = CARTESIAN_POINT('',(144.38366828723,119.75599996295, + 131.28051968183)); +#13140 = CARTESIAN_POINT('',(146.47347344643,121.82089029266, + 130.76705270929)); +#13141 = CARTESIAN_POINT('',(144.49709982685,121.84114915644, + 130.63914327747)); +#13142 = CARTESIAN_POINT('',(144.47668878625,119.88596381016, + 130.32969086864)); +#13143 = CARTESIAN_POINT('',(146.5,121.90641155804,130.22709269047)); +#13144 = CARTESIAN_POINT('',(144.51021245991,121.9167167891, + 130.1620280223)); +#13145 = CARTESIAN_POINT('',(144.5,119.9512600062,129.85197721278)); +#13146 = CARTESIAN_POINT('',(146.5,121.99193307711,129.68713106992)); +#13147 = CARTESIAN_POINT('',(144.5,121.99193307711,129.68713106992)); +#13148 = CARTESIAN_POINT('',(144.5,120.01655639592,129.37426213983)); +#13149 = ADVANCED_FACE('',(#13150),#13176,.T.); +#13150 = FACE_BOUND('',#13151,.T.); +#13151 = EDGE_LOOP('',(#13152,#13160,#13161,#13169)); +#13152 = ORIENTED_EDGE('',*,*,#13153,.F.); +#13153 = EDGE_CURVE('',#13024,#13154,#13156,.T.); +#13154 = VERTEX_POINT('',#13155); +#13155 = CARTESIAN_POINT('',(20.,119.37858981176,146.18713106992)); +#13156 = LINE('',#13157,#13158); +#13157 = CARTESIAN_POINT('',(75.,119.37858981176,146.18713106992)); +#13158 = VECTOR('',#13159,1.); +#13159 = DIRECTION('',(-1.,0.,0.)); +#13160 = ORIENTED_EDGE('',*,*,#13021,.F.); +#13161 = ORIENTED_EDGE('',*,*,#13162,.F.); +#13162 = EDGE_CURVE('',#13163,#13022,#13165,.T.); +#13163 = VERTEX_POINT('',#13164); +#13164 = CARTESIAN_POINT('',(20.,118.02124711932,143.97214910724)); +#13165 = LINE('',#13166,#13167); +#13166 = CARTESIAN_POINT('',(75.,118.02124711932,143.97214910724)); +#13167 = VECTOR('',#13168,1.); +#13168 = DIRECTION('',(1.,0.,0.)); +#13169 = ORIENTED_EDGE('',*,*,#13170,.T.); +#13170 = EDGE_CURVE('',#13163,#13154,#13171,.T.); +#13171 = CIRCLE('',#13172,2.); +#13172 = AXIS2_PLACEMENT_3D('',#13173,#13174,#13175); +#13173 = CARTESIAN_POINT('',(20.,117.40321313057,145.87426213983)); +#13174 = DIRECTION('',(1.,0.,0.)); +#13175 = DIRECTION('',(0.,0.,-1.)); +#13176 = CYLINDRICAL_SURFACE('',#13177,2.); +#13177 = AXIS2_PLACEMENT_3D('',#13178,#13179,#13180); +#13178 = CARTESIAN_POINT('',(75.,117.40321313057,145.87426213983)); +#13179 = DIRECTION('',(1.,0.,0.)); +#13180 = DIRECTION('',(0.,0.,-1.)); +#13181 = ADVANCED_FACE('',(#13182),#13210,.T.); +#13182 = FACE_BOUND('',#13183,.T.); +#13183 = EDGE_LOOP('',(#13184,#13195,#13202,#13203)); +#13184 = ORIENTED_EDGE('',*,*,#13185,.T.); +#13185 = EDGE_CURVE('',#13186,#13188,#13190,.T.); +#13186 = VERTEX_POINT('',#13187); +#13187 = CARTESIAN_POINT('',(5.5,120.01655639592,129.37426213983)); +#13188 = VERTEX_POINT('',#13189); +#13189 = CARTESIAN_POINT('',(3.5,121.99193307711,129.68713106992)); +#13190 = CIRCLE('',#13191,2.); +#13191 = AXIS2_PLACEMENT_3D('',#13192,#13193,#13194); +#13192 = CARTESIAN_POINT('',(3.5,120.01655639592,129.37426213983)); +#13193 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13194 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13195 = ORIENTED_EDGE('',*,*,#13196,.F.); +#13196 = EDGE_CURVE('',#13154,#13188,#13197,.T.); +#13197 = ELLIPSE('',#13198,16.705674575502,16.5); +#13198 = AXIS2_PLACEMENT_3D('',#13199,#13200,#13201); +#13199 = CARTESIAN_POINT('',(20.,121.99193307711,129.68713106992)); +#13200 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13201 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13202 = ORIENTED_EDGE('',*,*,#13170,.F.); +#13203 = ORIENTED_EDGE('',*,*,#13204,.F.); +#13204 = EDGE_CURVE('',#13186,#13163,#13205,.T.); +#13205 = ELLIPSE('',#13206,14.733620160116,14.5); +#13206 = AXIS2_PLACEMENT_3D('',#13207,#13208,#13209); +#13207 = CARTESIAN_POINT('',(20.,120.01655639592,129.37426213983)); +#13208 = DIRECTION('',(0.,0.990787519209,0.135425594994)); +#13209 = DIRECTION('',(0.,-0.135425594994,0.990787519209)); +#13210 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#13211,#13212,#13213) + ,(#13214,#13215,#13216) + ,(#13217,#13218,#13219) + ,(#13220,#13221,#13222) + ,(#13223,#13224,#13225) + ,(#13226,#13227,#13228) + ,(#13229,#13230,#13231) + ,(#13232,#13233,#13234) + ,(#13235,#13236,#13237) + ,(#13238,#13239,#13240) + ,(#13241,#13242,#13243) + ,(#13244,#13245,#13246) + ,(#13247,#13248,#13249) + ,(#13250,#13251,#13252) + ,(#13253,#13254,#13255) + ,(#13256,#13257,#13258) + ,(#13259,#13260,#13261) + ,(#13262,#13263,#13264) + ,(#13265,#13266,#13267) + ,(#13268,#13269,#13270) + ,(#13271,#13272,#13273) + ,(#13274,#13275,#13276) + ,(#13277,#13278,#13279) + ,(#13280,#13281,#13282) + ,(#13283,#13284,#13285) + ,(#13286,#13287,#13288) + ,(#13289,#13290,#13291) + ,(#13292,#13293,#13294) + ,(#13295,#13296,#13297) + ,(#13298,#13299,#13300) + ,(#13301,#13302,#13303) + ,(#13304,#13305,#13306) + ,(#13307,#13308,#13309) + ,(#13310,#13311,#13312 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.708916738351,1.) + ,(1.,0.710719703807,1.) + ,(1.,0.714294863776,1.) + ,(1.,0.716067045082,1.) + ,(1.,0.719564418881,1.) + ,(1.,0.721289607928,1.) + ,(1.,0.724677561959,1.) + ,(1.,0.726340324003,1.) + ,(1.,0.72958884874,1.) + ,(1.,0.731174608952,1.) + ,(1.,0.734255496067,1.) + ,(1.,0.735750620886,1.) + ,(1.,0.738637613057,1.) + ,(1.,0.740029478675,1.) + ,(1.,0.742698395234,1.) + ,(1.,0.743975444744,1.) + ,(1.,0.746404286091,1.) + ,(1.,0.747556076766,1.) + ,(1.,0.749725110415,1.) + ,(1.,0.750742352455,1.) + ,(1.,0.752634183213,1.) + ,(1.,0.753508771184,1.) + ,(1.,0.755108397746,1.) + ,(1.,0.755833435755,1.) + ,(1.,0.757128295704,1.) + ,(1.,0.757698117208,1.) + ,(1.,0.758678122052,1.) + ,(1.,0.759088305079,1.) + ,(1.,0.759745866685,1.) + ,(1.,0.75999324506,1.) + ,(1.,0.760323294568,1.) + ,(1.,0.760405985457,1.) +,(1.,0.7604059656,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#13211 = CARTESIAN_POINT('',(3.5,121.99193307711,129.68713106992)); +#13212 = CARTESIAN_POINT('',(5.5,121.99193307711,129.68713106992)); +#13213 = CARTESIAN_POINT('',(5.5,120.01655639592,129.37426213983)); +#13214 = CARTESIAN_POINT('',(3.499999999998,121.90641155804, + 130.22709269047)); +#13215 = CARTESIAN_POINT('',(5.489787540118,121.91671678908, + 130.1620280223)); +#13216 = CARTESIAN_POINT('',(5.5,119.95126000618,129.85197721278)); +#13217 = CARTESIAN_POINT('',(3.526526553568,121.82089029267, + 130.76705270928)); +#13218 = CARTESIAN_POINT('',(5.502900173149,121.84114915644, + 130.63914327746)); +#13219 = CARTESIAN_POINT('',(5.523311213742,119.88596381016, + 130.32969086863)); +#13220 = CARTESIAN_POINT('',(3.63237746625,121.65067099442, + 131.84177506142)); +#13221 = CARTESIAN_POINT('',(5.576442319275,121.69045329976, + 131.5905994708)); +#13222 = CARTESIAN_POINT('',(5.616331712765,119.75599996295, + 131.28051968184)); +#13223 = CARTESIAN_POINT('',(3.711701661741,121.56597328542, + 132.37653534993)); +#13224 = CARTESIAN_POINT('',(5.636640602293,121.61531667275, + 132.06499346338)); +#13225 = CARTESIAN_POINT('',(5.686040854257,119.69133255905, + 131.75363303009)); +#13226 = CARTESIAN_POINT('',(3.922384084952,121.39821691045, + 133.43570741644)); +#13227 = CARTESIAN_POINT('',(5.803994615851,121.4662383888, + 133.00623670451)); +#13228 = CARTESIAN_POINT('',(5.871186014049,119.56324917421, + 132.69070418803)); +#13229 = CARTESIAN_POINT('',(4.053741987003,121.31515850381, + 133.96011755719)); +#13230 = CARTESIAN_POINT('',(5.910935063554,121.39228163064, + 133.47318129837)); +#13231 = CARTESIAN_POINT('',(5.986621746154,119.49983339126, + 133.1546605492)); +#13232 = CARTESIAN_POINT('',(4.367226933834,121.15148063773, + 134.99353893204)); +#13233 = CARTESIAN_POINT('',(6.170915811048,121.24631229282, + 134.39479542611)); +#13234 = CARTESIAN_POINT('',(6.262108517612,119.37486398181, + 134.06894954434)); +#13235 = CARTESIAN_POINT('',(4.54935349404,121.07086143131, + 135.50254856871)); +#13236 = CARTESIAN_POINT('',(6.323764517936,121.17427854352, + 134.84959861985)); +#13237 = CARTESIAN_POINT('',(6.422159131127,119.31331054849, + 134.51928076504)); +#13238 = CARTESIAN_POINT('',(4.962621933088,120.91283838144, + 136.50026683916)); +#13239 = CARTESIAN_POINT('',(6.674211310039,121.03288912094, + 135.74229630083)); +#13240 = CARTESIAN_POINT('',(6.785334426045,119.19265863815, + 135.40198249457)); +#13241 = CARTESIAN_POINT('',(5.193763173113,120.83543478227, + 136.9889739307)); +#13242 = CARTESIAN_POINT('',(6.871648133211,120.96350713105, + 136.18035694456)); +#13243 = CARTESIAN_POINT('',(6.98845854607,119.13356034765, + 135.83435163896)); +#13244 = CARTESIAN_POINT('',(5.702835103391,120.68458839697, + 137.94138052439)); +#13245 = CARTESIAN_POINT('',(7.309439800888,120.828131218, + 137.03508682071)); +#13246 = CARTESIAN_POINT('',(7.435824787827,119.01838788029, + 136.67696520269)); +#13247 = CARTESIAN_POINT('',(5.98076500674,120.61114584401, + 138.40507855435)); +#13248 = CARTESIAN_POINT('',(7.54966904389,120.76210691804, + 137.4519478445)); +#13249 = CARTESIAN_POINT('',(7.680066218048,118.96231388146, + 137.08720831957)); +#13250 = CARTESIAN_POINT('',(6.580737787276,120.46892885643, + 139.30300127513)); +#13251 = CARTESIAN_POINT('',(8.070751624404,120.63412419311, + 138.2599989679)); +#13252 = CARTESIAN_POINT('',(8.207315025178,118.85373003088, + 137.88161888826)); +#13253 = CARTESIAN_POINT('',(6.902779737046,120.40015464162, + 139.737224578)); +#13254 = CARTESIAN_POINT('',(8.351518898705,120.57213253855, + 138.65139887081)); +#13255 = CARTESIAN_POINT('',(8.490321587106,118.80122034699, + 138.26578511213)); +#13256 = CARTESIAN_POINT('',(7.587875301983,120.26793667909, + 140.57201593923)); +#13257 = CARTESIAN_POINT('',(8.950945232644,120.45285288675, + 139.40450095298)); +#13258 = CARTESIAN_POINT('',(9.092375265374,118.70027083504, + 139.00434207774)); +#13259 = CARTESIAN_POINT('',(7.950927858155,120.20449313573, + 140.97258270722)); +#13260 = CARTESIAN_POINT('',(9.269560109957,120.39553008863, + 139.76642285646)); +#13261 = CARTESIAN_POINT('',(9.411421451104,118.65183116304, + 139.35873167787)); +#13262 = CARTESIAN_POINT('',(8.714548362689,120.0835475295, + 141.73620321176)); +#13263 = CARTESIAN_POINT('',(9.94154052423,120.28617859122, + 140.45684103889)); +#13264 = CARTESIAN_POINT('',(10.082481894487,118.5594881887, + 140.0343223331)); +#13265 = CARTESIAN_POINT('',(9.115115130682,120.02604565358, + 142.09925576794)); +#13266 = CARTESIAN_POINT('',(10.294904538796,120.23411482893, + 140.78555869692)); +#13267 = CARTESIAN_POINT('',(10.434495114844,118.51558502911, + 140.3555223439)); +#13268 = CARTESIAN_POINT('',(9.949906491918,119.91753717596, + 142.78435133286)); +#13269 = CARTESIAN_POINT('',(11.032867699293,120.13581779913, + 141.40618171765)); +#13270 = CARTESIAN_POINT('',(11.16809964441,118.43273790571, + 140.9616403814)); +#13271 = CARTESIAN_POINT('',(10.384129794783,119.86653074198, + 143.10639328264)); +#13272 = CARTESIAN_POINT('',(11.417507221414,120.08955049836, + 141.69830195797)); +#13273 = CARTESIAN_POINT('',(11.549689819661,118.39379406996, + 141.24655747119)); +#13274 = CARTESIAN_POINT('',(11.28205251557,119.77150438893, + 143.70636606317)); +#13275 = CARTESIAN_POINT('',(12.214170176311,120.00332271644, + 142.24272274675)); +#13276 = CARTESIAN_POINT('',(12.338773422771,118.32124066059, + 141.77736564293)); +#13277 = CARTESIAN_POINT('',(11.745750545531,119.72748461673, + 143.98429596653)); +#13278 = CARTESIAN_POINT('',(12.62627365212,119.96333046371, + 142.4952238929)); +#13279 = CARTESIAN_POINT('',(12.746265630922,118.28763119911, + 142.02325590439)); +#13280 = CARTESIAN_POINT('',(12.698157139211,119.64685554397, + 144.4933678968)); +#13281 = CARTESIAN_POINT('',(13.473720043352,119.89006374198, + 142.9578117683)); +#13282 = CARTESIAN_POINT('',(13.583229001124,118.22607023275, + 142.47364223751)); +#13283 = CARTESIAN_POINT('',(13.186864230756,119.61024636803, + 144.72450913683)); +#13284 = CARTESIAN_POINT('',(13.909179078217,119.85676089625, + 143.16807766089)); +#13285 = CARTESIAN_POINT('',(14.012698869452,118.19811882303, + 142.67813761299)); +#13286 = CARTESIAN_POINT('',(14.184582501196,119.54479107761, + 145.13777757587)); +#13287 = CARTESIAN_POINT('',(14.798944469253,119.79721408451, + 143.54404143374)); +#13288 = CARTESIAN_POINT('',(14.88948159196,118.14814316544, + 143.04376464089)); +#13289 = CARTESIAN_POINT('',(14.693592137878,119.51594506431, + 145.31990413608)); +#13290 = CARTESIAN_POINT('',(15.253398220241,119.77094613633, + 143.70989073136)); +#13291 = CARTESIAN_POINT('',(15.33679309086,118.12611899483, + 143.20489572814)); +#13292 = CARTESIAN_POINT('',(15.727013512725,119.46629392645, + 145.63338908291)); +#13293 = CARTESIAN_POINT('',(16.176561468682,119.72573665911, + 143.9953321366)); +#13294 = CARTESIAN_POINT('',(16.24495126876,118.08820993892, + 143.48224226268)); +#13295 = CARTESIAN_POINT('',(16.251423653491,119.44548887865, + 145.76474698496)); +#13296 = CARTESIAN_POINT('',(16.6454438034,119.70677637897, + 144.1150426341)); +#13297 = CARTESIAN_POINT('',(16.705796543976,118.07232511223, + 143.59845728125)); +#13298 = CARTESIAN_POINT('',(17.310595719977,119.41212006097, + 145.97542940818)); +#13299 = CARTESIAN_POINT('',(17.592723393372,119.67637337891, + 144.30699962174)); +#13300 = CARTESIAN_POINT('',(17.636584117556,118.04684774292, + 143.78485232367)); +#13301 = CARTESIAN_POINT('',(17.8453560085,119.39955634266, + 146.05475360366)); +#13302 = CARTESIAN_POINT('',(18.071312267135,119.66491778797, + 144.37932737636)); +#13303 = CARTESIAN_POINT('',(18.106524977167,118.0372552397, + 143.85503205941)); +#13304 = CARTESIAN_POINT('',(18.920078360625,119.3827912051, + 146.16060451635)); +#13305 = CARTESIAN_POINT('',(19.033166507244,119.64963693346, + 144.47580689473)); +#13306 = CARTESIAN_POINT('',(19.050977953276,118.02445491801, + 143.94868052357)); +#13307 = CARTESIAN_POINT('',(19.460038379449,119.37858981176, + 146.18713106991)); +#13308 = CARTESIAN_POINT('',(19.516634616602,119.64580512204,144.5)); +#13309 = CARTESIAN_POINT('',(19.525488272849,118.02124711932, + 143.97214910724)); +#13310 = CARTESIAN_POINT('',(20.,119.37858981176,146.18713106992)); +#13311 = CARTESIAN_POINT('',(20.,119.64580512202,144.5)); +#13312 = CARTESIAN_POINT('',(20.,118.02124711932,143.97214910724)); +#13313 = ADVANCED_FACE('',(#13314),#13340,.T.); +#13314 = FACE_BOUND('',#13315,.T.); +#13315 = EDGE_LOOP('',(#13316,#13327,#13333,#13334)); +#13316 = ORIENTED_EDGE('',*,*,#13317,.T.); +#13317 = EDGE_CURVE('',#13318,#13320,#13322,.T.); +#13318 = VERTEX_POINT('',#13319); +#13319 = CARTESIAN_POINT('',(5.5,130.46281475167,63.419182623568)); +#13320 = VERTEX_POINT('',#13321); +#13321 = CARTESIAN_POINT('',(3.5,132.43819143286,63.732051553649)); +#13322 = CIRCLE('',#13323,2.); +#13323 = AXIS2_PLACEMENT_3D('',#13324,#13325,#13326); +#13324 = CARTESIAN_POINT('',(3.5,130.46281475167,63.419182623568)); +#13325 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13326 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13327 = ORIENTED_EDGE('',*,*,#13328,.F.); +#13328 = EDGE_CURVE('',#13188,#13320,#13329,.T.); +#13329 = LINE('',#13330,#13331); +#13330 = CARTESIAN_POINT('',(3.5,142.80897072025,-1.746471880511)); +#13331 = VECTOR('',#13332,1.); +#13332 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13333 = ORIENTED_EDGE('',*,*,#13185,.F.); +#13334 = ORIENTED_EDGE('',*,*,#13335,.F.); +#13335 = EDGE_CURVE('',#13318,#13186,#13336,.T.); +#13336 = LINE('',#13337,#13338); +#13337 = CARTESIAN_POINT('',(5.5,130.04160940339,66.078568529252)); +#13338 = VECTOR('',#13339,1.); +#13339 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13340 = CYLINDRICAL_SURFACE('',#13341,2.); +#13341 = AXIS2_PLACEMENT_3D('',#13342,#13343,#13344); +#13342 = CARTESIAN_POINT('',(3.5,140.83359403906,-2.059340810591)); +#13343 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13344 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13345 = ADVANCED_FACE('',(#13346),#13374,.T.); +#13346 = FACE_BOUND('',#13347,.T.); +#13347 = EDGE_LOOP('',(#13348,#13357,#13366,#13373)); +#13348 = ORIENTED_EDGE('',*,*,#13349,.F.); +#13349 = EDGE_CURVE('',#13350,#13318,#13352,.T.); +#13350 = VERTEX_POINT('',#13351); +#13351 = CARTESIAN_POINT('',(20.,132.45812402827,48.821295656158)); +#13352 = ELLIPSE('',#13353,14.733620160116,14.5); +#13353 = AXIS2_PLACEMENT_3D('',#13354,#13355,#13356); +#13354 = CARTESIAN_POINT('',(20.,130.46281475167,63.419182623568)); +#13355 = DIRECTION('',(0.,0.990787519209,0.135425594994)); +#13356 = DIRECTION('',(0.,0.135425594994,-0.990787519209)); +#13357 = ORIENTED_EDGE('',*,*,#13358,.F.); +#13358 = EDGE_CURVE('',#13359,#13350,#13361,.T.); +#13359 = VERTEX_POINT('',#13360); +#13360 = CARTESIAN_POINT('',(20.,135.05153469821,47.232051553649)); +#13361 = CIRCLE('',#13362,2.); +#13362 = AXIS2_PLACEMENT_3D('',#13363,#13364,#13365); +#13363 = CARTESIAN_POINT('',(20.,133.07615801702,46.919182623568)); +#13364 = DIRECTION('',(1.,0.,0.)); +#13365 = DIRECTION('',(0.,0.,-1.)); +#13366 = ORIENTED_EDGE('',*,*,#13367,.F.); +#13367 = EDGE_CURVE('',#13320,#13359,#13368,.T.); +#13368 = ELLIPSE('',#13369,16.705674575502,16.5); +#13369 = AXIS2_PLACEMENT_3D('',#13370,#13371,#13372); +#13370 = CARTESIAN_POINT('',(20.,132.43819143286,63.732051553649)); +#13371 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13372 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13373 = ORIENTED_EDGE('',*,*,#13317,.F.); +#13374 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#13375,#13376,#13377) + ,(#13378,#13379,#13380) + ,(#13381,#13382,#13383) + ,(#13384,#13385,#13386) + ,(#13387,#13388,#13389) + ,(#13390,#13391,#13392) + ,(#13393,#13394,#13395) + ,(#13396,#13397,#13398) + ,(#13399,#13400,#13401) + ,(#13402,#13403,#13404) + ,(#13405,#13406,#13407) + ,(#13408,#13409,#13410) + ,(#13411,#13412,#13413) + ,(#13414,#13415,#13416) + ,(#13417,#13418,#13419) + ,(#13420,#13421,#13422) + ,(#13423,#13424,#13425) + ,(#13426,#13427,#13428) + ,(#13429,#13430,#13431) + ,(#13432,#13433,#13434) + ,(#13435,#13436,#13437) + ,(#13438,#13439,#13440) + ,(#13441,#13442,#13443) + ,(#13444,#13445,#13446) + ,(#13447,#13448,#13449) + ,(#13450,#13451,#13452) + ,(#13453,#13454,#13455) + ,(#13456,#13457,#13458) + ,(#13459,#13460,#13461) + ,(#13462,#13463,#13464) + ,(#13465,#13466,#13467) + ,(#13468,#13469,#13470) + ,(#13471,#13472,#13473) + ,(#13474,#13475,#13476 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.64944804833,1.) + ,(1.,0.649448011144,1.) + ,(1.,0.649544880858,1.) + ,(1.,0.649931020933,1.) + ,(1.,0.650220326837,1.) + ,(1.,0.650987865068,1.) + ,(1.,0.651466094179,1.) + ,(1.,0.652605645032,1.) + ,(1.,0.653266962127,1.) + ,(1.,0.654764688538,1.) + ,(1.,0.655601091988,1.) + ,(1.,0.657438982651,1.) + ,(1.,0.658440463017,1.) + ,(1.,0.660596682784,1.) + ,(1.,0.661751414623,1.) + ,(1.,0.664200713666,1.) + ,(1.,0.665495272859,1.) + ,(1.,0.668209438806,1.) + ,(1.,0.669629037357,1.) + ,(1.,0.672577374464,1.) + ,(1.,0.674106104853,1.) + ,(1.,0.677255924957,1.) + ,(1.,0.678877006733,1.) + ,(1.,0.682194118266,1.) + ,(1.,0.683890140474,1.) + ,(1.,0.687339323896,1.) + ,(1.,0.689092478064,1.) + ,(1.,0.692637938338,1.) + ,(1.,0.694430237976,1.) + ,(1.,0.698036027211,1.) + ,(1.,0.699849510957,1.) + ,(1.,0.703479916575,1.) + ,(1.,0.705296840327,1.) +,(1.,0.707106781187,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#13375 = CARTESIAN_POINT('',(20.,135.05153469821,47.232051553649)); +#13376 = CARTESIAN_POINT('',(20.,134.68521224718,49.544920483729)); +#13377 = CARTESIAN_POINT('',(20.,132.45812402827,48.821295656158)); +#13378 = CARTESIAN_POINT('',(19.460038379449,135.05153469821, + 47.232051553647)); +#13379 = CARTESIAN_POINT('',(19.537625768819,134.68521224721, + 49.544920483708)); +#13380 = CARTESIAN_POINT('',(19.525488272849,132.45812402829, + 48.821295656165)); +#13381 = CARTESIAN_POINT('',(18.920078360625,135.04733330487, + 47.258578107217)); +#13382 = CARTESIAN_POINT('',(19.075388922462,134.68171168943, + 49.567022135499)); +#13383 = CARTESIAN_POINT('',(19.050977953277,132.45491622958, + 48.844764239834)); +#13384 = CARTESIAN_POINT('',(17.8453560085,135.03056816731, + 47.364429019897)); +#13385 = CARTESIAN_POINT('',(18.154679839975,134.66772741686, + 49.655315357642)); +#13386 = CARTESIAN_POINT('',(18.106524977166,132.44211590788, + 48.938412703995)); +#13387 = CARTESIAN_POINT('',(17.310595719977,135.018004449, + 47.44375321539)); +#13388 = CARTESIAN_POINT('',(17.696476592598,134.65725191209, + 49.721455091734)); +#13389 = CARTESIAN_POINT('',(17.636584117556,132.43252340467, + 49.008592439732)); +#13390 = CARTESIAN_POINT('',(16.251423653491,134.98463563131, + 47.6544356386)); +#13391 = CARTESIAN_POINT('',(16.787869040157,134.62938862012, + 49.897376993586)); +#13392 = CARTESIAN_POINT('',(16.705796543977,132.40704603536, + 49.194987482154)); +#13393 = CARTESIAN_POINT('',(15.727013512724,134.96383058352, + 47.785793540651)); +#13394 = CARTESIAN_POINT('',(16.337717776096,134.61201690976, + 50.007057656231)); +#13395 = CARTESIAN_POINT('',(16.244951268758,132.39116120866, + 49.311202500727)); +#13396 = CARTESIAN_POINT('',(14.693592137879,134.91417944566, + 48.099278487483)); +#13397 = CARTESIAN_POINT('',(15.4492253616,134.57048598587, + 50.269273589846)); +#13398 = CARTESIAN_POINT('',(15.336793090862,132.35325215276, + 49.588549035261)); +#13399 = CARTESIAN_POINT('',(14.184582501195,134.88533343235, + 48.28140504769)); +#13400 = CARTESIAN_POINT('',(15.011111672567,134.54635004471, + 50.421661924917)); +#13401 = CARTESIAN_POINT('',(14.889481591959,132.33122798214, + 49.749680122515)); +#13402 = CARTESIAN_POINT('',(13.186864230757,134.81987814193, + 48.694673486735)); +#13403 = CARTESIAN_POINT('',(14.150661413077,134.49147058973, + 50.768157166883)); +#13404 = CARTESIAN_POINT('',(14.012698869453,132.28125232456, + 50.115307150415)); +#13405 = CARTESIAN_POINT('',(12.698157139211,134.783268966, + 48.925814726762)); +#13406 = CARTESIAN_POINT('',(13.728518047734,134.46075657468, + 50.962077825911)); +#13407 = CARTESIAN_POINT('',(13.583229001126,132.25330091484, + 50.319802525897)); +#13408 = CARTESIAN_POINT('',(11.745750545531,134.70263989323, + 49.43488665704)); +#13409 = CARTESIAN_POINT('',(12.903905529827,134.39295733899, + 51.390145352997)); +#13410 = CARTESIAN_POINT('',(12.74626563092,132.19173994848, + 50.770188859015)); +#13411 = CARTESIAN_POINT('',(11.28205251557,134.65862012104, + 49.712816560391)); +#13412 = CARTESIAN_POINT('',(12.501588120709,134.35590662009, + 51.624074385594)); +#13413 = CARTESIAN_POINT('',(12.338773422773,132.158130487, + 51.01607912047)); +#13414 = CARTESIAN_POINT('',(10.384129794783,134.56359376799, + 50.312789340922)); +#13415 = CARTESIAN_POINT('',(11.720424069997,134.27572784407, + 52.130303254022)); +#13416 = CARTESIAN_POINT('',(11.549689819659,132.08557707762, + 51.546887292209)); +#13417 = CARTESIAN_POINT('',(9.949906491917,134.51258733401, + 50.634831290697)); +#13418 = CARTESIAN_POINT('',(11.341682278563,134.23263786919, + 52.402362648244)); +#13419 = CARTESIAN_POINT('',(11.168099644413,132.04663324187, + 51.831804382002)); +#13420 = CARTESIAN_POINT('',(9.115115130682,134.40407885639, + 51.31992685563)); +#13421 = CARTESIAN_POINT('',(10.611330105685,134.14073252222, + 52.982630171883)); +#13422 = CARTESIAN_POINT('',(10.434495114842,131.96378611847, + 52.437922419503)); +#13423 = CARTESIAN_POINT('',(8.714548362689,134.34657698047, + 51.682979411803)); +#13424 = CARTESIAN_POINT('',(10.259774242317,134.09195725538, + 53.290585086774)); +#13425 = CARTESIAN_POINT('',(10.082481894485,131.91988295889, + 52.759122430307)); +#13426 = CARTESIAN_POINT('',(7.950927858155,134.22563137424, + 52.446599916338)); +#13427 = CARTESIAN_POINT('',(9.587279222373,133.98909117419, + 53.940055962635)); +#13428 = CARTESIAN_POINT('',(9.411421451105,131.82753998455, + 53.434713085529)); +#13429 = CARTESIAN_POINT('',(7.587875301983,134.16218783088, + 52.847166684329)); +#13430 = CARTESIAN_POINT('',(9.266342929571,133.93504086575, + 54.281316179434)); +#13431 = CARTESIAN_POINT('',(9.092375265379,131.77910031255, + 53.789102685653)); +#13432 = CARTESIAN_POINT('',(6.902779737047,134.02996986834, + 53.681958045568)); +#13433 = CARTESIAN_POINT('',(8.658354637275,133.82209135573, + 54.99445131947)); +#13434 = CARTESIAN_POINT('',(8.490321587102,131.6781508006, + 54.527659651274)); +#13435 = CARTESIAN_POINT('',(6.580737787276,133.96119565354, + 54.116181348429)); +#13436 = CARTESIAN_POINT('',(8.371254664068,133.76323144539, + 55.366078167505)); +#13437 = CARTESIAN_POINT('',(8.207315025181,131.6256411167, + 54.911825875139)); +#13438 = CARTESIAN_POINT('',(5.98076500674,133.81897866596, + 55.014104069221)); +#13439 = CARTESIAN_POINT('',(7.833945029007,133.64118400956, + 56.136655350321)); +#13440 = CARTESIAN_POINT('',(7.680066218045,131.51705726613, + 55.706236443841)); +#13441 = CARTESIAN_POINT('',(5.702835103391,133.745536113, + 55.477802099176)); +#13442 = CARTESIAN_POINT('',(7.583639433029,133.57803302271, + 56.535374989234)); +#13443 = CARTESIAN_POINT('',(7.435824787829,131.4609832673, + 56.116479560708)); +#13444 = CARTESIAN_POINT('',(5.193763173113,133.5946897277, + 56.430208692863)); +#13445 = CARTESIAN_POINT('',(7.122619243617,133.44797601011, + 57.35652264954)); +#13446 = CARTESIAN_POINT('',(6.988458546068,131.34581079993, + 56.959093124445)); +#13447 = CARTESIAN_POINT('',(4.962621933088,133.51728612852, + 56.9189157844)); +#13448 = CARTESIAN_POINT('',(6.911765519572,133.38110237451, + 57.778746167589)); +#13449 = CARTESIAN_POINT('',(6.785334426046,131.28671250943, + 57.391462268834)); +#13450 = CARTESIAN_POINT('',(4.54935349404,133.35926307866, + 57.916634054849)); +#13451 = CARTESIAN_POINT('',(6.532002382556,133.24421947139, + 58.642990804477)); +#13452 = CARTESIAN_POINT('',(6.422159131126,131.16606059911, + 58.27416399837)); +#13453 = CARTESIAN_POINT('',(4.367226933834,133.27864387223, + 58.425643691521)); +#13454 = CARTESIAN_POINT('',(6.362917038088,133.17423724779, + 59.08484117471)); +#13455 = CARTESIAN_POINT('',(6.262108517612,131.10450716577, + 58.724495219065)); +#13456 = CARTESIAN_POINT('',(4.053741987003,133.11496600616, + 59.459065066379)); +#13457 = CARTESIAN_POINT('',(6.06865772444,133.03179786029, + 59.984168073349)); +#13458 = CARTESIAN_POINT('',(5.986621746154,130.97953775633, + 59.638784214208)); +#13459 = CARTESIAN_POINT('',(3.922384084951,133.03190759951, + 59.983475207131)); +#13460 = CARTESIAN_POINT('',(5.943278730007,132.95936143928, + 60.441513636213)); +#13461 = CARTESIAN_POINT('',(5.871186014049,130.91612197338, + 60.102740575376)); +#13462 = CARTESIAN_POINT('',(3.711701661743,132.86415122455, + 61.042647273633)); +#13463 = CARTESIAN_POINT('',(5.737978560105,132.81270912193, + 61.367439927014)); +#13464 = CARTESIAN_POINT('',(5.686040854258,130.78803858854, + 61.039811733306)); +#13465 = CARTESIAN_POINT('',(3.63237746625,132.77945351555, + 61.57740756214)); +#13466 = CARTESIAN_POINT('',(5.657831919614,132.73850698753, + 61.835933765471)); +#13467 = CARTESIAN_POINT('',(5.616331712765,130.72337118464, + 61.512925081564)); +#13468 = CARTESIAN_POINT('',(3.526526553568,132.6092342173, + 62.652129914282)); +#13469 = CARTESIAN_POINT('',(5.544093428901,132.5890461543, + 62.779592327621)); +#13470 = CARTESIAN_POINT('',(5.523311213741,130.59340733743, + 62.463753894773)); +#13471 = CARTESIAN_POINT('',(3.499999999998,132.52371295193, + 63.192089933091)); +#13472 = CARTESIAN_POINT('',(5.51026491512,132.51379406132, + 63.254715343462)); +#13473 = CARTESIAN_POINT('',(5.5,130.52811114138,62.941467550618)); +#13474 = CARTESIAN_POINT('',(3.5,132.43819143286,63.732051553649)); +#13475 = CARTESIAN_POINT('',(5.5,132.43819143286,63.732051553649)); +#13476 = CARTESIAN_POINT('',(5.5,130.46281475167,63.419182623568)); +#13477 = ADVANCED_FACE('',(#13478),#13504,.T.); +#13478 = FACE_BOUND('',#13479,.T.); +#13479 = EDGE_LOOP('',(#13480,#13488,#13497,#13503)); +#13480 = ORIENTED_EDGE('',*,*,#13481,.F.); +#13481 = EDGE_CURVE('',#13482,#13350,#13484,.T.); +#13482 = VERTEX_POINT('',#13483); +#13483 = CARTESIAN_POINT('',(130.,132.45812402827,48.821295656158)); +#13484 = LINE('',#13485,#13486); +#13485 = CARTESIAN_POINT('',(20.,132.45812402827,48.821295656158)); +#13486 = VECTOR('',#13487,1.); +#13487 = DIRECTION('',(-1.,0.,0.)); +#13488 = ORIENTED_EDGE('',*,*,#13489,.F.); +#13489 = EDGE_CURVE('',#13490,#13482,#13492,.T.); +#13490 = VERTEX_POINT('',#13491); +#13491 = CARTESIAN_POINT('',(130.,135.05153469821,47.232051553649)); +#13492 = CIRCLE('',#13493,2.); +#13493 = AXIS2_PLACEMENT_3D('',#13494,#13495,#13496); +#13494 = CARTESIAN_POINT('',(130.,133.07615801702,46.919182623568)); +#13495 = DIRECTION('',(1.,0.,0.)); +#13496 = DIRECTION('',(0.,0.,-1.)); +#13497 = ORIENTED_EDGE('',*,*,#13498,.F.); +#13498 = EDGE_CURVE('',#13359,#13490,#13499,.T.); +#13499 = LINE('',#13500,#13501); +#13500 = CARTESIAN_POINT('',(130.,135.05153469821,47.232051553649)); +#13501 = VECTOR('',#13502,1.); +#13502 = DIRECTION('',(1.,0.,0.)); +#13503 = ORIENTED_EDGE('',*,*,#13358,.T.); +#13504 = CYLINDRICAL_SURFACE('',#13505,2.); +#13505 = AXIS2_PLACEMENT_3D('',#13506,#13507,#13508); +#13506 = CARTESIAN_POINT('',(75.,133.07615801702,46.919182623568)); +#13507 = DIRECTION('',(-1.,0.,0.)); +#13508 = DIRECTION('',(0.,0.,1.)); +#13509 = ADVANCED_FACE('',(#13510),#13528,.T.); +#13510 = FACE_BOUND('',#13511,.T.); +#13511 = EDGE_LOOP('',(#13512,#13519,#13520,#13527)); +#13512 = ORIENTED_EDGE('',*,*,#13513,.F.); +#13513 = EDGE_CURVE('',#13490,#12980,#13514,.T.); +#13514 = ELLIPSE('',#13515,16.705674575502,16.5); +#13515 = AXIS2_PLACEMENT_3D('',#13516,#13517,#13518); +#13516 = CARTESIAN_POINT('',(130.,132.43819143286,63.732051553649)); +#13517 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13518 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13519 = ORIENTED_EDGE('',*,*,#13489,.T.); +#13520 = ORIENTED_EDGE('',*,*,#13521,.F.); +#13521 = EDGE_CURVE('',#12982,#13482,#13522,.T.); +#13522 = ELLIPSE('',#13523,14.733620160116,14.5); +#13523 = AXIS2_PLACEMENT_3D('',#13524,#13525,#13526); +#13524 = CARTESIAN_POINT('',(130.,130.46281475167,63.419182623568)); +#13525 = DIRECTION('',(0.,0.990787519209,0.135425594994)); +#13526 = DIRECTION('',(0.,-0.135425594994,0.990787519209)); +#13527 = ORIENTED_EDGE('',*,*,#12979,.F.); +#13528 = ( BOUNDED_SURFACE() B_SPLINE_SURFACE(3,2,( + (#13529,#13530,#13531) + ,(#13532,#13533,#13534) + ,(#13535,#13536,#13537) + ,(#13538,#13539,#13540) + ,(#13541,#13542,#13543) + ,(#13544,#13545,#13546) + ,(#13547,#13548,#13549) + ,(#13550,#13551,#13552) + ,(#13553,#13554,#13555) + ,(#13556,#13557,#13558) + ,(#13559,#13560,#13561) + ,(#13562,#13563,#13564) + ,(#13565,#13566,#13567) + ,(#13568,#13569,#13570) + ,(#13571,#13572,#13573) + ,(#13574,#13575,#13576) + ,(#13577,#13578,#13579) + ,(#13580,#13581,#13582) + ,(#13583,#13584,#13585) + ,(#13586,#13587,#13588) + ,(#13589,#13590,#13591) + ,(#13592,#13593,#13594) + ,(#13595,#13596,#13597) + ,(#13598,#13599,#13600) + ,(#13601,#13602,#13603) + ,(#13604,#13605,#13606) + ,(#13607,#13608,#13609) + ,(#13610,#13611,#13612) + ,(#13613,#13614,#13615) + ,(#13616,#13617,#13618) + ,(#13619,#13620,#13621) + ,(#13622,#13623,#13624) + ,(#13625,#13626,#13627) + ,(#13628,#13629,#13630 +)),.UNSPECIFIED.,.F.,.F.,.F.) B_SPLINE_SURFACE_WITH_KNOTS((4,2,2,2,2,2,2 + ,2,2,2,2,2,2,2,2,2,4),(3,3),(0.,6.25E-02,0.125,0.1875,0.25,0.3125, + 0.375,0.4375,0.5,0.5625,0.625,0.6875,0.75,0.8125,0.875,0.9375,1.),( +0.,1.),.UNSPECIFIED.) GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_SURFACE(( + (1.,0.707106781187,1.) + ,(1.,0.705296840327,1.) + ,(1.,0.703479916575,1.) + ,(1.,0.699849510957,1.) + ,(1.,0.698036027211,1.) + ,(1.,0.694430237976,1.) + ,(1.,0.692637938338,1.) + ,(1.,0.689092478063,1.) + ,(1.,0.687339323896,1.) + ,(1.,0.683890140474,1.) + ,(1.,0.682194118266,1.) + ,(1.,0.678877006733,1.) + ,(1.,0.677255924957,1.) + ,(1.,0.674106104852,1.) + ,(1.,0.672577374464,1.) + ,(1.,0.669629037357,1.) + ,(1.,0.668209438806,1.) + ,(1.,0.665495272859,1.) + ,(1.,0.664200713666,1.) + ,(1.,0.661751414623,1.) + ,(1.,0.660596682785,1.) + ,(1.,0.658440463016,1.) + ,(1.,0.657438982651,1.) + ,(1.,0.655601091988,1.) + ,(1.,0.654764688538,1.) + ,(1.,0.653266962127,1.) + ,(1.,0.652605645031,1.) + ,(1.,0.65146609418,1.) + ,(1.,0.650987865069,1.) + ,(1.,0.650220326836,1.) + ,(1.,0.649931020933,1.) + ,(1.,0.649544880858,1.) + ,(1.,0.649448011144,1.) +,(1.,0.64944804833,1.))) REPRESENTATION_ITEM('') SURFACE() ); +#13529 = CARTESIAN_POINT('',(146.5,132.43819143286,63.732051553649)); +#13530 = CARTESIAN_POINT('',(144.5,132.43819143286,63.732051553649)); +#13531 = CARTESIAN_POINT('',(144.5,130.46281475167,63.419182623568)); +#13532 = CARTESIAN_POINT('',(146.5,132.52371295193,63.192089933091)); +#13533 = CARTESIAN_POINT('',(144.48973508489,132.51379406132, + 63.254715343462)); +#13534 = CARTESIAN_POINT('',(144.5,130.52811114138,62.941467550618)); +#13535 = CARTESIAN_POINT('',(146.47347344643,132.6092342173, + 62.652129914282)); +#13536 = CARTESIAN_POINT('',(144.4559065711,132.5890461543, + 62.779592327621)); +#13537 = CARTESIAN_POINT('',(144.47668878625,130.59340733743, + 62.463753894773)); +#13538 = CARTESIAN_POINT('',(146.36762253374,132.77945351555, + 61.57740756214)); +#13539 = CARTESIAN_POINT('',(144.34216808038,132.73850698753, + 61.835933765471)); +#13540 = CARTESIAN_POINT('',(144.38366828723,130.72337118464, + 61.512925081564)); +#13541 = CARTESIAN_POINT('',(146.28829833825,132.86415122455, + 61.042647273632)); +#13542 = CARTESIAN_POINT('',(144.26202143988,132.81270912193, + 61.367439927012)); +#13543 = CARTESIAN_POINT('',(144.31395914574,130.78803858855, + 61.039811733304)); +#13544 = CARTESIAN_POINT('',(146.07761591505,133.03190759951, + 59.983475207133)); +#13545 = CARTESIAN_POINT('',(144.05672127,132.95936143927, + 60.441513636215)); +#13546 = CARTESIAN_POINT('',(144.12881398595,130.91612197337, + 60.102740575378)); +#13547 = CARTESIAN_POINT('',(145.94625801299,133.11496600616, + 59.459065066379)); +#13548 = CARTESIAN_POINT('',(143.93134227555,133.03179786029, + 59.984168073349)); +#13549 = CARTESIAN_POINT('',(144.01337825384,130.97953775633, + 59.638784214209)); +#13550 = CARTESIAN_POINT('',(145.63277306616,133.27864387223, + 58.425643691521)); +#13551 = CARTESIAN_POINT('',(143.63708296191,133.17423724779, + 59.08484117471)); +#13552 = CARTESIAN_POINT('',(143.73789148238,131.10450716577, + 58.724495219064)); +#13553 = CARTESIAN_POINT('',(145.45064650595,133.35926307866, + 57.916634054851)); +#13554 = CARTESIAN_POINT('',(143.46799761743,133.24421947139, + 58.642990804479)); +#13555 = CARTESIAN_POINT('',(143.57784086887,131.16606059911, + 58.27416399837)); +#13556 = CARTESIAN_POINT('',(145.03737806691,133.51728612852, + 56.918915784398)); +#13557 = CARTESIAN_POINT('',(143.08823448043,133.38110237451, + 57.778746167587)); +#13558 = CARTESIAN_POINT('',(143.21466557395,131.28671250943, + 57.391462268834)); +#13559 = CARTESIAN_POINT('',(144.80623682689,133.5946897277, + 56.430208692862)); +#13560 = CARTESIAN_POINT('',(142.87738075638,133.44797601012, + 57.356522649538)); +#13561 = CARTESIAN_POINT('',(143.01154145393,131.34581079994, + 56.959093124446)); +#13562 = CARTESIAN_POINT('',(144.2971648966,133.745536113, + 55.477802099177)); +#13563 = CARTESIAN_POINT('',(142.41636056696,133.5780330227, + 56.535374989236)); +#13564 = CARTESIAN_POINT('',(142.56417521217,131.46098326729, + 56.116479560707)); +#13565 = CARTESIAN_POINT('',(144.01923499325,133.81897866596, + 55.014104069221)); +#13566 = CARTESIAN_POINT('',(142.16605497098,133.64118400956, + 56.136655350321)); +#13567 = CARTESIAN_POINT('',(142.31993378195,131.51705726613, + 55.706236443838)); +#13568 = CARTESIAN_POINT('',(143.41926221272,133.96119565354, + 54.116181348429)); +#13569 = CARTESIAN_POINT('',(141.62874533594,133.76323144539, + 55.366078167506)); +#13570 = CARTESIAN_POINT('',(141.79268497482,131.6256411167, + 54.911825875143)); +#13571 = CARTESIAN_POINT('',(143.09722026295,134.02996986834, + 53.681958045567)); +#13572 = CARTESIAN_POINT('',(141.34164536273,133.82209135573, + 54.994451319471)); +#13573 = CARTESIAN_POINT('',(141.5096784129,131.6781508006, + 54.527659651276)); +#13574 = CARTESIAN_POINT('',(142.41212469801,134.16218783088, + 52.84716668433)); +#13575 = CARTESIAN_POINT('',(140.73365707042,133.93504086575, + 54.281316179433)); +#13576 = CARTESIAN_POINT('',(140.90762473461,131.77910031255, + 53.789102685651)); +#13577 = CARTESIAN_POINT('',(142.04907214184,134.22563137424, + 52.446599916338)); +#13578 = CARTESIAN_POINT('',(140.41272077761,133.98909117419, + 53.940055962634)); +#13579 = CARTESIAN_POINT('',(140.58857854889,131.82753998455, + 53.434713085526)); +#13580 = CARTESIAN_POINT('',(141.28545163731,134.34657698047, + 51.682979411803)); +#13581 = CARTESIAN_POINT('',(139.74022575769,134.09195725538, + 53.290585086774)); +#13582 = CARTESIAN_POINT('',(139.91751810551,131.91988295889, + 52.75912243031)); +#13583 = CARTESIAN_POINT('',(140.88488486932,134.40407885639, + 51.31992685563)); +#13584 = CARTESIAN_POINT('',(139.38866989431,134.14073252222, + 52.982630171883)); +#13585 = CARTESIAN_POINT('',(139.56550488516,131.96378611847, + 52.437922419504)); +#13586 = CARTESIAN_POINT('',(140.05009350808,134.51258733401, + 50.634831290696)); +#13587 = CARTESIAN_POINT('',(138.65831772143,134.23263786919, + 52.402362648243)); +#13588 = CARTESIAN_POINT('',(138.83190035558,132.04663324187, + 51.831804382001)); +#13589 = CARTESIAN_POINT('',(139.61587020522,134.56359376799, + 50.312789340922)); +#13590 = CARTESIAN_POINT('',(138.27957593,134.27572784407, + 52.130303254012)); +#13591 = CARTESIAN_POINT('',(138.45031018034,132.08557707763, + 51.546887292213)); +#13592 = CARTESIAN_POINT('',(138.71794748442,134.65862012104, + 49.712816560391)); +#13593 = CARTESIAN_POINT('',(137.49841187928,134.35590662009, + 51.624074385603)); +#13594 = CARTESIAN_POINT('',(137.66122657722,132.15813048699, + 51.016079120466)); +#13595 = CARTESIAN_POINT('',(138.25424945446,134.70263989323, + 49.43488665704)); +#13596 = CARTESIAN_POINT('',(137.09609447017,134.39295733899, + 51.390145352998)); +#13597 = CARTESIAN_POINT('',(137.25373436907,132.19173994848, + 50.770188859013)); +#13598 = CARTESIAN_POINT('',(137.30184286079,134.783268966, + 48.925814726762)); +#13599 = CARTESIAN_POINT('',(136.27148195226,134.46075657468, + 50.962077825909)); +#13600 = CARTESIAN_POINT('',(136.41677099887,132.25330091483, + 50.319802525899)); +#13601 = CARTESIAN_POINT('',(136.81313576923,134.81987814193, + 48.694673486733)); +#13602 = CARTESIAN_POINT('',(135.84933858691,134.49147058973, + 50.768157166883)); +#13603 = CARTESIAN_POINT('',(135.98730113054,132.28125232456, + 50.115307150413)); +#13604 = CARTESIAN_POINT('',(135.81541749881,134.88533343235, + 48.281405047691)); +#13605 = CARTESIAN_POINT('',(134.98888832743,134.54635004471, + 50.421661924917)); +#13606 = CARTESIAN_POINT('',(135.11051840804,132.33122798214, + 49.749680122517)); +#13607 = CARTESIAN_POINT('',(135.30640786212,134.91417944566, + 48.099278487484)); +#13608 = CARTESIAN_POINT('',(134.5507746384,134.57048598587, + 50.269273589848)); +#13609 = CARTESIAN_POINT('',(134.66320690914,132.35325215276, + 49.588549035263)); +#13610 = CARTESIAN_POINT('',(134.27298648727,134.96383058352, + 47.78579354065)); +#13611 = CARTESIAN_POINT('',(133.66228222389,134.61201690976, + 50.007057656229)); +#13612 = CARTESIAN_POINT('',(133.75504873123,132.39116120866, + 49.311202500726)); +#13613 = CARTESIAN_POINT('',(133.7485763465,134.98463563131, + 47.654435638599)); +#13614 = CARTESIAN_POINT('',(133.21213095984,134.62938862012, + 49.897376993584)); +#13615 = CARTESIAN_POINT('',(133.29420345602,132.40704603536, + 49.194987482153)); +#13616 = CARTESIAN_POINT('',(132.68940428002,135.018004449, + 47.443753215392)); +#13617 = CARTESIAN_POINT('',(132.3035234074,134.65725191209, + 49.721455091736)); +#13618 = CARTESIAN_POINT('',(132.36341588244,132.43252340467, + 49.008592439732)); +#13619 = CARTESIAN_POINT('',(132.15464399149,135.03056816731, + 47.364429019897)); +#13620 = CARTESIAN_POINT('',(131.84532016003,134.66772741686, + 49.655315357642)); +#13621 = CARTESIAN_POINT('',(131.89347502283,132.44211590788, + 48.938412703996)); +#13622 = CARTESIAN_POINT('',(131.07992163937,135.04733330487, + 47.258578107217)); +#13623 = CARTESIAN_POINT('',(130.92461107753,134.68171168942, + 49.567022135499)); +#13624 = CARTESIAN_POINT('',(130.94902204672,132.45491622958, + 48.844764239834)); +#13625 = CARTESIAN_POINT('',(130.53996162054,135.05153469821, + 47.232051553647)); +#13626 = CARTESIAN_POINT('',(130.46237423118,134.68521224718, + 49.544920483705)); +#13627 = CARTESIAN_POINT('',(130.47451172715,132.45812402829, + 48.821295656165)); +#13628 = CARTESIAN_POINT('',(130.,135.05153469821,47.232051553649)); +#13629 = CARTESIAN_POINT('',(130.,134.68521224718,49.544920483729)); +#13630 = CARTESIAN_POINT('',(130.,132.45812402827,48.821295656158)); +#13631 = ADVANCED_FACE('',(#13632,#13642),#13712,.T.); +#13632 = FACE_BOUND('',#13633,.T.); +#13633 = EDGE_LOOP('',(#13634,#13635,#13636,#13637,#13638,#13639,#13640, + #13641)); +#13634 = ORIENTED_EDGE('',*,*,#13498,.T.); +#13635 = ORIENTED_EDGE('',*,*,#13513,.T.); +#13636 = ORIENTED_EDGE('',*,*,#13007,.T.); +#13637 = ORIENTED_EDGE('',*,*,#13032,.T.); +#13638 = ORIENTED_EDGE('',*,*,#13153,.T.); +#13639 = ORIENTED_EDGE('',*,*,#13196,.T.); +#13640 = ORIENTED_EDGE('',*,*,#13328,.T.); +#13641 = ORIENTED_EDGE('',*,*,#13367,.T.); +#13642 = FACE_BOUND('',#13643,.T.); +#13643 = EDGE_LOOP('',(#13644,#13655,#13663,#13672,#13680,#13689,#13697, + #13706)); +#13644 = ORIENTED_EDGE('',*,*,#13645,.F.); +#13645 = EDGE_CURVE('',#13646,#13648,#13650,.T.); +#13646 = VERTEX_POINT('',#13647); +#13647 = CARTESIAN_POINT('',(130.,135.12868868009,46.744920483729)); +#13648 = VERTEX_POINT('',#13649); +#13649 = CARTESIAN_POINT('',(147.3,132.38863786247,64.044920483729)); +#13650 = ELLIPSE('',#13651,17.515646676133,17.3); +#13651 = AXIS2_PLACEMENT_3D('',#13652,#13653,#13654); +#13652 = CARTESIAN_POINT('',(130.,132.38863786247,64.044920483729)); +#13653 = DIRECTION('',(0.,-0.987688340595,-0.15643446504)); +#13654 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13655 = ORIENTED_EDGE('',*,*,#13656,.T.); +#13656 = EDGE_CURVE('',#13646,#13657,#13659,.T.); +#13657 = VERTEX_POINT('',#13658); +#13658 = CARTESIAN_POINT('',(20.,135.12868868009,46.744920483729)); +#13659 = LINE('',#13660,#13661); +#13660 = CARTESIAN_POINT('',(75.,135.12868868009,46.744920483729)); +#13661 = VECTOR('',#13662,1.); +#13662 = DIRECTION('',(-1.,0.,0.)); +#13663 = ORIENTED_EDGE('',*,*,#13664,.T.); +#13664 = EDGE_CURVE('',#13657,#13665,#13667,.T.); +#13665 = VERTEX_POINT('',#13666); +#13666 = CARTESIAN_POINT('',(2.7,132.38863786247,64.044920483729)); +#13667 = ELLIPSE('',#13668,17.515646676133,17.3); +#13668 = AXIS2_PLACEMENT_3D('',#13669,#13670,#13671); +#13669 = CARTESIAN_POINT('',(20.,132.38863786247,64.044920483729)); +#13670 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13671 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13672 = ORIENTED_EDGE('',*,*,#13673,.T.); +#13673 = EDGE_CURVE('',#13665,#13674,#13676,.T.); +#13674 = VERTEX_POINT('',#13675); +#13675 = CARTESIAN_POINT('',(2.7,121.94237950673,130.)); +#13676 = LINE('',#13677,#13678); +#13677 = CARTESIAN_POINT('',(2.7,132.01698608458,66.391437459332)); +#13678 = VECTOR('',#13679,1.); +#13679 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13680 = ORIENTED_EDGE('',*,*,#13681,.T.); +#13681 = EDGE_CURVE('',#13674,#13682,#13684,.T.); +#13682 = VERTEX_POINT('',#13683); +#13683 = CARTESIAN_POINT('',(20.,119.20232868911,147.3)); +#13684 = ELLIPSE('',#13685,17.515646676133,17.3); +#13685 = AXIS2_PLACEMENT_3D('',#13686,#13687,#13688); +#13686 = CARTESIAN_POINT('',(20.,121.94237950673,130.)); +#13687 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13688 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13689 = ORIENTED_EDGE('',*,*,#13690,.T.); +#13690 = EDGE_CURVE('',#13682,#13691,#13693,.T.); +#13691 = VERTEX_POINT('',#13692); +#13692 = CARTESIAN_POINT('',(130.,119.20232868911,147.3)); +#13693 = LINE('',#13694,#13695); +#13694 = CARTESIAN_POINT('',(75.,119.20232868911,147.3)); +#13695 = VECTOR('',#13696,1.); +#13696 = DIRECTION('',(1.,0.,0.)); +#13697 = ORIENTED_EDGE('',*,*,#13698,.T.); +#13698 = EDGE_CURVE('',#13691,#13699,#13701,.T.); +#13699 = VERTEX_POINT('',#13700); +#13700 = CARTESIAN_POINT('',(147.3,121.94237950673,130.)); +#13701 = ELLIPSE('',#13702,17.515646676133,17.3); +#13702 = AXIS2_PLACEMENT_3D('',#13703,#13704,#13705); +#13703 = CARTESIAN_POINT('',(130.,121.94237950673,130.)); +#13704 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13705 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13706 = ORIENTED_EDGE('',*,*,#13707,.T.); +#13707 = EDGE_CURVE('',#13699,#13648,#13708,.T.); +#13708 = LINE('',#13709,#13710); +#13709 = CARTESIAN_POINT('',(147.3,142.80897072025,-1.746471880511)); +#13710 = VECTOR('',#13711,1.); +#13711 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#13712 = PLANE('',#13713); +#13713 = AXIS2_PLACEMENT_3D('',#13714,#13715,#13716); +#13714 = CARTESIAN_POINT('',(75.,142.80897072025,-1.746471880511)); +#13715 = DIRECTION('',(0.,0.987688340595,0.15643446504)); +#13716 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13717 = ADVANCED_FACE('',(#13718),#13816,.T.); +#13718 = FACE_BOUND('',#13719,.T.); +#13719 = EDGE_LOOP('',(#13720,#13730,#13738,#13746,#13754,#13762,#13770, + #13778,#13786,#13794,#13802,#13810)); +#13720 = ORIENTED_EDGE('',*,*,#13721,.T.); +#13721 = EDGE_CURVE('',#13722,#13724,#13726,.T.); +#13722 = VERTEX_POINT('',#13723); +#13723 = CARTESIAN_POINT('',(29.334474939404,115.36329788981, + 45.58006683342)); +#13724 = VERTEX_POINT('',#13725); +#13725 = CARTESIAN_POINT('',(34.320508075689,115.36329788981, + 45.58006683342)); +#13726 = LINE('',#13727,#13728); +#13727 = CARTESIAN_POINT('',(130.,115.36329788981,45.58006683342)); +#13728 = VECTOR('',#13729,1.); +#13729 = DIRECTION('',(1.,0.,0.)); +#13730 = ORIENTED_EDGE('',*,*,#13731,.T.); +#13731 = EDGE_CURVE('',#13724,#13732,#13734,.T.); +#13732 = VERTEX_POINT('',#13733); +#13733 = CARTESIAN_POINT('',(34.320508075689,116.7538743645, + 41.300312510092)); +#13734 = LINE('',#13735,#13736); +#13735 = CARTESIAN_POINT('',(34.320508075689,115.11608429431, + 46.340912046456)); +#13736 = VECTOR('',#13737,1.); +#13737 = DIRECTION('',(1.387778780781E-17,0.309016994375,-0.951056516295 + )); +#13738 = ORIENTED_EDGE('',*,*,#13739,.F.); +#13739 = EDGE_CURVE('',#13740,#13732,#13742,.T.); +#13740 = VERTEX_POINT('',#13741); +#13741 = CARTESIAN_POINT('',(64.679491924311,116.7538743645, + 41.300312510092)); +#13742 = LINE('',#13743,#13744); +#13743 = CARTESIAN_POINT('',(62.,116.7538743645,41.300312510092)); +#13744 = VECTOR('',#13745,1.); +#13745 = DIRECTION('',(-1.,0.,0.)); +#13746 = ORIENTED_EDGE('',*,*,#13747,.T.); +#13747 = EDGE_CURVE('',#13740,#13748,#13750,.T.); +#13748 = VERTEX_POINT('',#13749); +#13749 = CARTESIAN_POINT('',(64.679491924311,115.36329788981, + 45.58006683342)); +#13750 = LINE('',#13751,#13752); +#13751 = CARTESIAN_POINT('',(64.679491924311,115.11608429431, + 46.340912046456)); +#13752 = VECTOR('',#13753,1.); +#13753 = DIRECTION('',(1.387778780781E-17,-0.309016994375,0.951056516295 + )); +#13754 = ORIENTED_EDGE('',*,*,#13755,.T.); +#13755 = EDGE_CURVE('',#13748,#13756,#13758,.T.); +#13756 = VERTEX_POINT('',#13757); +#13757 = CARTESIAN_POINT('',(85.320508075689,115.36329788981, + 45.58006683342)); +#13758 = LINE('',#13759,#13760); +#13759 = CARTESIAN_POINT('',(130.,115.36329788981,45.58006683342)); +#13760 = VECTOR('',#13761,1.); +#13761 = DIRECTION('',(1.,0.,0.)); +#13762 = ORIENTED_EDGE('',*,*,#13763,.T.); +#13763 = EDGE_CURVE('',#13756,#13764,#13766,.T.); +#13764 = VERTEX_POINT('',#13765); +#13765 = CARTESIAN_POINT('',(85.320508075689,116.7538743645, + 41.300312510092)); +#13766 = LINE('',#13767,#13768); +#13767 = CARTESIAN_POINT('',(85.320508075689,115.11608429431, + 46.340912046456)); +#13768 = VECTOR('',#13769,1.); +#13769 = DIRECTION('',(1.387778780781E-17,0.309016994375,-0.951056516295 + )); +#13770 = ORIENTED_EDGE('',*,*,#13771,.F.); +#13771 = EDGE_CURVE('',#13772,#13764,#13774,.T.); +#13772 = VERTEX_POINT('',#13773); +#13773 = CARTESIAN_POINT('',(115.67949192431,116.7538743645, + 41.300312510092)); +#13774 = LINE('',#13775,#13776); +#13775 = CARTESIAN_POINT('',(88.,116.7538743645,41.300312510092)); +#13776 = VECTOR('',#13777,1.); +#13777 = DIRECTION('',(-1.,0.,0.)); +#13778 = ORIENTED_EDGE('',*,*,#13779,.T.); +#13779 = EDGE_CURVE('',#13772,#13780,#13782,.T.); +#13780 = VERTEX_POINT('',#13781); +#13781 = CARTESIAN_POINT('',(115.67949192431,115.36329788981, + 45.58006683342)); +#13782 = LINE('',#13783,#13784); +#13783 = CARTESIAN_POINT('',(115.67949192431,115.11608429431, + 46.340912046456)); +#13784 = VECTOR('',#13785,1.); +#13785 = DIRECTION('',(1.387778780781E-17,-0.309016994375,0.951056516295 + )); +#13786 = ORIENTED_EDGE('',*,*,#13787,.T.); +#13787 = EDGE_CURVE('',#13780,#13788,#13790,.T.); +#13788 = VERTEX_POINT('',#13789); +#13789 = CARTESIAN_POINT('',(120.66552506059,115.36329788981, + 45.58006683342)); +#13790 = LINE('',#13791,#13792); +#13791 = CARTESIAN_POINT('',(130.,115.36329788981,45.58006683342)); +#13792 = VECTOR('',#13793,1.); +#13793 = DIRECTION('',(1.,0.,0.)); +#13794 = ORIENTED_EDGE('',*,*,#13795,.F.); +#13795 = EDGE_CURVE('',#13796,#13788,#13798,.T.); +#13796 = VERTEX_POINT('',#13797); +#13797 = CARTESIAN_POINT('',(120.66552506059,114.74526390106, + 47.48217986601)); +#13798 = LINE('',#13799,#13800); +#13799 = CARTESIAN_POINT('',(120.66552506059,115.11608429431, + 46.340912046456)); +#13800 = VECTOR('',#13801,1.); +#13801 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13802 = ORIENTED_EDGE('',*,*,#13803,.F.); +#13803 = EDGE_CURVE('',#13804,#13796,#13806,.T.); +#13804 = VERTEX_POINT('',#13805); +#13805 = CARTESIAN_POINT('',(29.334474939404,114.74526390106, + 47.48217986601)); +#13806 = LINE('',#13807,#13808); +#13807 = CARTESIAN_POINT('',(130.,114.74526390106,47.48217986601)); +#13808 = VECTOR('',#13809,1.); +#13809 = DIRECTION('',(1.,0.,0.)); +#13810 = ORIENTED_EDGE('',*,*,#13811,.T.); +#13811 = EDGE_CURVE('',#13804,#13722,#13812,.T.); +#13812 = LINE('',#13813,#13814); +#13813 = CARTESIAN_POINT('',(29.334474939404,115.36329788981, + 45.58006683342)); +#13814 = VECTOR('',#13815,1.); +#13815 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13816 = PLANE('',#13817); +#13817 = AXIS2_PLACEMENT_3D('',#13818,#13819,#13820); +#13818 = CARTESIAN_POINT('',(130.,115.11608429431,46.340912046456)); +#13819 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13820 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13821 = ADVANCED_FACE('',(#13822),#13847,.T.); +#13822 = FACE_BOUND('',#13823,.T.); +#13823 = EDGE_LOOP('',(#13824,#13832,#13833,#13841)); +#13824 = ORIENTED_EDGE('',*,*,#13825,.F.); +#13825 = EDGE_CURVE('',#12991,#13826,#13828,.T.); +#13826 = VERTEX_POINT('',#13827); +#13827 = CARTESIAN_POINT('',(144.5,105.44699616755,124.64032505618)); +#13828 = LINE('',#13829,#13830); +#13829 = CARTESIAN_POINT('',(144.5,41.276556965683,103.79008544358)); +#13830 = VECTOR('',#13831,1.); +#13831 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13832 = ORIENTED_EDGE('',*,*,#12990,.T.); +#13833 = ORIENTED_EDGE('',*,*,#13834,.F.); +#13834 = EDGE_CURVE('',#13835,#12982,#13837,.T.); +#13835 = VERTEX_POINT('',#13836); +#13836 = CARTESIAN_POINT('',(144.5,125.82823660343,61.913316899475)); +#13837 = LINE('',#13838,#13839); +#13838 = CARTESIAN_POINT('',(144.5,65.148898834638,42.197404904024)); +#13839 = VECTOR('',#13840,1.); +#13840 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#13841 = ORIENTED_EDGE('',*,*,#13842,.T.); +#13842 = EDGE_CURVE('',#13835,#13826,#13843,.T.); +#13843 = LINE('',#13844,#13845); +#13844 = CARTESIAN_POINT('',(144.5,103.50472079701,130.61803398875)); +#13845 = VECTOR('',#13846,1.); +#13846 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#13847 = PLANE('',#13848); +#13848 = AXIS2_PLACEMENT_3D('',#13849,#13850,#13851); +#13849 = CARTESIAN_POINT('',(144.5,75.,0.)); +#13850 = DIRECTION('',(-1.,0.,0.)); +#13851 = DIRECTION('',(0.,0.,1.)); +#13852 = ADVANCED_FACE('',(#13853),#13872,.F.); +#13853 = FACE_BOUND('',#13854,.F.); +#13854 = EDGE_LOOP('',(#13855,#13864,#13865,#13866)); +#13855 = ORIENTED_EDGE('',*,*,#13856,.F.); +#13856 = EDGE_CURVE('',#13826,#13857,#13859,.T.); +#13857 = VERTEX_POINT('',#13858); +#13858 = CARTESIAN_POINT('',(130.,100.96624974911,138.43064454246)); +#13859 = CIRCLE('',#13860,14.5); +#13860 = AXIS2_PLACEMENT_3D('',#13861,#13862,#13863); +#13861 = CARTESIAN_POINT('',(130.,105.44699616755,124.64032505618)); +#13862 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13863 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13864 = ORIENTED_EDGE('',*,*,#13825,.F.); +#13865 = ORIENTED_EDGE('',*,*,#13040,.F.); +#13866 = ORIENTED_EDGE('',*,*,#13867,.F.); +#13867 = EDGE_CURVE('',#13857,#13022,#13868,.T.); +#13868 = LINE('',#13869,#13870); +#13869 = CARTESIAN_POINT('',(130.,120.06757627336,144.63704175437)); +#13870 = VECTOR('',#13871,1.); +#13871 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#13872 = CYLINDRICAL_SURFACE('',#13873,14.5); +#13873 = AXIS2_PLACEMENT_3D('',#13874,#13875,#13876); +#13874 = CARTESIAN_POINT('',(130.,124.5483226918,130.84672226809)); +#13875 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13876 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13877 = ADVANCED_FACE('',(#13878),#13896,.F.); +#13878 = FACE_BOUND('',#13879,.T.); +#13879 = EDGE_LOOP('',(#13880,#13881,#13882,#13890)); +#13880 = ORIENTED_EDGE('',*,*,#13162,.T.); +#13881 = ORIENTED_EDGE('',*,*,#13867,.F.); +#13882 = ORIENTED_EDGE('',*,*,#13883,.T.); +#13883 = EDGE_CURVE('',#13857,#13884,#13886,.T.); +#13884 = VERTEX_POINT('',#13885); +#13885 = CARTESIAN_POINT('',(20.,100.96624974911,138.43064454246)); +#13886 = LINE('',#13887,#13888); +#13887 = CARTESIAN_POINT('',(130.,100.96624974911,138.43064454246)); +#13888 = VECTOR('',#13889,1.); +#13889 = DIRECTION('',(-1.,0.,0.)); +#13890 = ORIENTED_EDGE('',*,*,#13891,.F.); +#13891 = EDGE_CURVE('',#13163,#13884,#13892,.T.); +#13892 = LINE('',#13893,#13894); +#13893 = CARTESIAN_POINT('',(20.,121.97032433919,145.25528207793)); +#13894 = VECTOR('',#13895,1.); +#13895 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13896 = PLANE('',#13897); +#13897 = AXIS2_PLACEMENT_3D('',#13898,#13899,#13900); +#13898 = CARTESIAN_POINT('',(130.,120.06757627336,144.63704175437)); +#13899 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#13900 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13901 = ADVANCED_FACE('',(#13902),#13921,.F.); +#13902 = FACE_BOUND('',#13903,.F.); +#13903 = EDGE_LOOP('',(#13904,#13913,#13914,#13915)); +#13904 = ORIENTED_EDGE('',*,*,#13905,.F.); +#13905 = EDGE_CURVE('',#13884,#13906,#13908,.T.); +#13906 = VERTEX_POINT('',#13907); +#13907 = CARTESIAN_POINT('',(5.5,105.44699616755,124.64032505618)); +#13908 = CIRCLE('',#13909,14.5); +#13909 = AXIS2_PLACEMENT_3D('',#13910,#13911,#13912); +#13910 = CARTESIAN_POINT('',(20.,105.44699616755,124.64032505618)); +#13911 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13912 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13913 = ORIENTED_EDGE('',*,*,#13891,.F.); +#13914 = ORIENTED_EDGE('',*,*,#13204,.F.); +#13915 = ORIENTED_EDGE('',*,*,#13916,.F.); +#13916 = EDGE_CURVE('',#13906,#13186,#13917,.T.); +#13917 = LINE('',#13918,#13919); +#13918 = CARTESIAN_POINT('',(5.5,126.45107075763,131.46496259165)); +#13919 = VECTOR('',#13920,1.); +#13920 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#13921 = CYLINDRICAL_SURFACE('',#13922,14.5); +#13922 = AXIS2_PLACEMENT_3D('',#13923,#13924,#13925); +#13923 = CARTESIAN_POINT('',(20.,126.45107075763,131.46496259165)); +#13924 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#13925 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#13926 = ADVANCED_FACE('',(#13927),#13945,.F.); +#13927 = FACE_BOUND('',#13928,.T.); +#13928 = EDGE_LOOP('',(#13929,#13937,#13938,#13939)); +#13929 = ORIENTED_EDGE('',*,*,#13930,.F.); +#13930 = EDGE_CURVE('',#13318,#13931,#13933,.T.); +#13931 = VERTEX_POINT('',#13932); +#13932 = CARTESIAN_POINT('',(5.5,125.82823660343,61.913316899475)); +#13933 = LINE('',#13934,#13935); +#13934 = CARTESIAN_POINT('',(5.5,61.657797401562,41.063077286871)); +#13935 = VECTOR('',#13936,1.); +#13936 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13937 = ORIENTED_EDGE('',*,*,#13335,.T.); +#13938 = ORIENTED_EDGE('',*,*,#13916,.F.); +#13939 = ORIENTED_EDGE('',*,*,#13940,.T.); +#13940 = EDGE_CURVE('',#13906,#13931,#13941,.T.); +#13941 = LINE('',#13942,#13943); +#13942 = CARTESIAN_POINT('',(5.5,125.82823660343,61.913316899475)); +#13943 = VECTOR('',#13944,1.); +#13944 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13945 = PLANE('',#13946); +#13946 = AXIS2_PLACEMENT_3D('',#13947,#13948,#13949); +#13947 = CARTESIAN_POINT('',(5.5,146.8323111935,68.737954434936)); +#13948 = DIRECTION('',(-1.,0.,0.)); +#13949 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#13950 = ADVANCED_FACE('',(#13951),#13970,.F.); +#13951 = FACE_BOUND('',#13952,.F.); +#13952 = EDGE_LOOP('',(#13953,#13954,#13955,#13963)); +#13953 = ORIENTED_EDGE('',*,*,#13930,.F.); +#13954 = ORIENTED_EDGE('',*,*,#13349,.F.); +#13955 = ORIENTED_EDGE('',*,*,#13956,.F.); +#13956 = EDGE_CURVE('',#13957,#13350,#13959,.T.); +#13957 = VERTEX_POINT('',#13958); +#13958 = CARTESIAN_POINT('',(20.,130.30898302186,48.122997413195)); +#13959 = LINE('',#13960,#13961); +#13960 = CARTESIAN_POINT('',(20.,66.138543819998,27.272757800591)); +#13961 = VECTOR('',#13962,1.); +#13962 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#13963 = ORIENTED_EDGE('',*,*,#13964,.F.); +#13964 = EDGE_CURVE('',#13931,#13957,#13965,.T.); +#13965 = CIRCLE('',#13966,14.5); +#13966 = AXIS2_PLACEMENT_3D('',#13967,#13968,#13969); +#13967 = CARTESIAN_POINT('',(20.,125.82823660343,61.913316899475)); +#13968 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13969 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13970 = CYLINDRICAL_SURFACE('',#13971,14.5); +#13971 = AXIS2_PLACEMENT_3D('',#13972,#13973,#13974); +#13972 = CARTESIAN_POINT('',(20.,61.657797401562,41.063077286871)); +#13973 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13974 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13975 = ADVANCED_FACE('',(#13976),#13994,.F.); +#13976 = FACE_BOUND('',#13977,.T.); +#13977 = EDGE_LOOP('',(#13978,#13986,#13992,#13993)); +#13978 = ORIENTED_EDGE('',*,*,#13979,.T.); +#13979 = EDGE_CURVE('',#13957,#13980,#13982,.T.); +#13980 = VERTEX_POINT('',#13981); +#13981 = CARTESIAN_POINT('',(130.,130.30898302186,48.122997413195)); +#13982 = LINE('',#13983,#13984); +#13983 = CARTESIAN_POINT('',(130.,130.30898302186,48.122997413195)); +#13984 = VECTOR('',#13985,1.); +#13985 = DIRECTION('',(1.,0.,0.)); +#13986 = ORIENTED_EDGE('',*,*,#13987,.F.); +#13987 = EDGE_CURVE('',#13482,#13980,#13988,.T.); +#13988 = LINE('',#13989,#13990); +#13989 = CARTESIAN_POINT('',(130.,69.629645253074,28.407085417744)); +#13990 = VECTOR('',#13991,1.); +#13991 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#13992 = ORIENTED_EDGE('',*,*,#13481,.T.); +#13993 = ORIENTED_EDGE('',*,*,#13956,.F.); +#13994 = PLANE('',#13995); +#13995 = AXIS2_PLACEMENT_3D('',#13996,#13997,#13998); +#13996 = CARTESIAN_POINT('',(75.,69.629645253074,28.407085417744)); +#13997 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#13998 = DIRECTION('',(-1.,0.,0.)); +#13999 = ADVANCED_FACE('',(#14000),#14012,.F.); +#14000 = FACE_BOUND('',#14001,.F.); +#14001 = EDGE_LOOP('',(#14002,#14003,#14010,#14011)); +#14002 = ORIENTED_EDGE('',*,*,#13834,.F.); +#14003 = ORIENTED_EDGE('',*,*,#14004,.F.); +#14004 = EDGE_CURVE('',#13980,#13835,#14005,.T.); +#14005 = CIRCLE('',#14006,14.5); +#14006 = AXIS2_PLACEMENT_3D('',#14007,#14008,#14009); +#14007 = CARTESIAN_POINT('',(130.,125.82823660343,61.913316899475)); +#14008 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14009 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14010 = ORIENTED_EDGE('',*,*,#13987,.F.); +#14011 = ORIENTED_EDGE('',*,*,#13521,.F.); +#14012 = CYLINDRICAL_SURFACE('',#14013,14.5); +#14013 = AXIS2_PLACEMENT_3D('',#14014,#14015,#14016); +#14014 = CARTESIAN_POINT('',(130.,65.148898834638,42.197404904024)); +#14015 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14016 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14017 = ADVANCED_FACE('',(#14018),#14044,.T.); +#14018 = FACE_BOUND('',#14019,.T.); +#14019 = EDGE_LOOP('',(#14020,#14028,#14029,#14037)); +#14020 = ORIENTED_EDGE('',*,*,#14021,.F.); +#14021 = EDGE_CURVE('',#13682,#14022,#14024,.T.); +#14022 = VERTEX_POINT('',#14023); +#14023 = CARTESIAN_POINT('',(20.,95.34571958339,139.54851781622)); +#14024 = LINE('',#14025,#14026); +#14025 = CARTESIAN_POINT('',(20.,119.20232868911,147.3)); +#14026 = VECTOR('',#14027,1.); +#14027 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14028 = ORIENTED_EDGE('',*,*,#13681,.F.); +#14029 = ORIENTED_EDGE('',*,*,#14030,.F.); +#14030 = EDGE_CURVE('',#14031,#13674,#14033,.T.); +#14031 = VERTEX_POINT('',#14032); +#14032 = CARTESIAN_POINT('',(2.7,100.69171358607,123.09524008431)); +#14033 = LINE('',#14034,#14035); +#14034 = CARTESIAN_POINT('',(2.7,124.5483226918,130.84672226809)); +#14035 = VECTOR('',#14036,1.); +#14036 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14037 = ORIENTED_EDGE('',*,*,#14038,.T.); +#14038 = EDGE_CURVE('',#14031,#14022,#14039,.T.); +#14039 = CIRCLE('',#14040,17.3); +#14040 = AXIS2_PLACEMENT_3D('',#14041,#14042,#14043); +#14041 = CARTESIAN_POINT('',(20.,100.69171358607,123.09524008431)); +#14042 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14043 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14044 = CYLINDRICAL_SURFACE('',#14045,17.3); +#14045 = AXIS2_PLACEMENT_3D('',#14046,#14047,#14048); +#14046 = CARTESIAN_POINT('',(20.,124.5483226918,130.84672226809)); +#14047 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14048 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14049 = ADVANCED_FACE('',(#14050),#14068,.T.); +#14050 = FACE_BOUND('',#14051,.T.); +#14051 = EDGE_LOOP('',(#14052,#14060,#14066,#14067)); +#14052 = ORIENTED_EDGE('',*,*,#14053,.F.); +#14053 = EDGE_CURVE('',#14054,#14022,#14056,.T.); +#14054 = VERTEX_POINT('',#14055); +#14055 = CARTESIAN_POINT('',(130.,95.34571958339,139.54851781622)); +#14056 = LINE('',#14057,#14058); +#14057 = CARTESIAN_POINT('',(130.,95.34571958339,139.54851781622)); +#14058 = VECTOR('',#14059,1.); +#14059 = DIRECTION('',(-1.,0.,0.)); +#14060 = ORIENTED_EDGE('',*,*,#14061,.T.); +#14061 = EDGE_CURVE('',#14054,#13691,#14062,.T.); +#14062 = LINE('',#14063,#14064); +#14063 = CARTESIAN_POINT('',(130.,119.20232868911,147.3)); +#14064 = VECTOR('',#14065,1.); +#14065 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14066 = ORIENTED_EDGE('',*,*,#13690,.F.); +#14067 = ORIENTED_EDGE('',*,*,#14021,.T.); +#14068 = PLANE('',#14069); +#14069 = AXIS2_PLACEMENT_3D('',#14070,#14071,#14072); +#14070 = CARTESIAN_POINT('',(130.,119.20232868911,147.3)); +#14071 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14072 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14073 = ADVANCED_FACE('',(#14074),#14093,.T.); +#14074 = FACE_BOUND('',#14075,.T.); +#14075 = EDGE_LOOP('',(#14076,#14084,#14085,#14086)); +#14076 = ORIENTED_EDGE('',*,*,#14077,.F.); +#14077 = EDGE_CURVE('',#13699,#14078,#14080,.T.); +#14078 = VERTEX_POINT('',#14079); +#14079 = CARTESIAN_POINT('',(147.3,100.69171358607,123.09524008431)); +#14080 = LINE('',#14081,#14082); +#14081 = CARTESIAN_POINT('',(147.3,41.276556965683,103.79008544358)); +#14082 = VECTOR('',#14083,1.); +#14083 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14084 = ORIENTED_EDGE('',*,*,#13698,.F.); +#14085 = ORIENTED_EDGE('',*,*,#14061,.F.); +#14086 = ORIENTED_EDGE('',*,*,#14087,.T.); +#14087 = EDGE_CURVE('',#14054,#14078,#14088,.T.); +#14088 = CIRCLE('',#14089,17.3); +#14089 = AXIS2_PLACEMENT_3D('',#14090,#14091,#14092); +#14090 = CARTESIAN_POINT('',(130.,100.69171358607,123.09524008431)); +#14091 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14092 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14093 = CYLINDRICAL_SURFACE('',#14094,17.3); +#14094 = AXIS2_PLACEMENT_3D('',#14095,#14096,#14097); +#14095 = CARTESIAN_POINT('',(130.,41.276556965683,103.79008544358)); +#14096 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14097 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14098 = ADVANCED_FACE('',(#14099),#14117,.F.); +#14099 = FACE_BOUND('',#14100,.T.); +#14100 = EDGE_LOOP('',(#14101,#14109,#14110,#14111)); +#14101 = ORIENTED_EDGE('',*,*,#14102,.T.); +#14102 = EDGE_CURVE('',#14103,#13648,#14105,.T.); +#14103 = VERTEX_POINT('',#14104); +#14104 = CARTESIAN_POINT('',(147.3,121.07295402195,60.3682319276)); +#14105 = LINE('',#14106,#14107); +#14106 = CARTESIAN_POINT('',(147.3,65.148898834638,42.197404904024)); +#14107 = VECTOR('',#14108,1.); +#14108 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14109 = ORIENTED_EDGE('',*,*,#13707,.F.); +#14110 = ORIENTED_EDGE('',*,*,#14077,.T.); +#14111 = ORIENTED_EDGE('',*,*,#14112,.T.); +#14112 = EDGE_CURVE('',#14078,#14103,#14113,.T.); +#14113 = LINE('',#14114,#14115); +#14114 = CARTESIAN_POINT('',(147.3,134.41515662039,19.305154640729)); +#14115 = VECTOR('',#14116,1.); +#14116 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14117 = PLANE('',#14118); +#14118 = AXIS2_PLACEMENT_3D('',#14119,#14120,#14121); +#14119 = CARTESIAN_POINT('',(147.3,75.,0.)); +#14120 = DIRECTION('',(-1.,0.,0.)); +#14121 = DIRECTION('',(0.,0.,1.)); +#14122 = ADVANCED_FACE('',(#14123),#14142,.T.); +#14123 = FACE_BOUND('',#14124,.T.); +#14124 = EDGE_LOOP('',(#14125,#14134,#14140,#14141)); +#14125 = ORIENTED_EDGE('',*,*,#14126,.T.); +#14126 = EDGE_CURVE('',#14103,#14127,#14129,.T.); +#14127 = VERTEX_POINT('',#14128); +#14128 = CARTESIAN_POINT('',(130.,126.41894802464,43.914954195694)); +#14129 = CIRCLE('',#14130,17.3); +#14130 = AXIS2_PLACEMENT_3D('',#14131,#14132,#14133); +#14131 = CARTESIAN_POINT('',(130.,121.07295402195,60.3682319276)); +#14132 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14133 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14134 = ORIENTED_EDGE('',*,*,#14135,.F.); +#14135 = EDGE_CURVE('',#13646,#14127,#14136,.T.); +#14136 = LINE('',#14137,#14138); +#14137 = CARTESIAN_POINT('',(130.,70.494892837324,25.744127172118)); +#14138 = VECTOR('',#14139,1.); +#14139 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14140 = ORIENTED_EDGE('',*,*,#13645,.T.); +#14141 = ORIENTED_EDGE('',*,*,#14102,.F.); +#14142 = CYLINDRICAL_SURFACE('',#14143,17.3); +#14143 = AXIS2_PLACEMENT_3D('',#14144,#14145,#14146); +#14144 = CARTESIAN_POINT('',(130.,65.148898834638,42.197404904024)); +#14145 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14146 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14147 = ADVANCED_FACE('',(#14148),#14166,.T.); +#14148 = FACE_BOUND('',#14149,.T.); +#14149 = EDGE_LOOP('',(#14150,#14151,#14159,#14165)); +#14150 = ORIENTED_EDGE('',*,*,#14135,.T.); +#14151 = ORIENTED_EDGE('',*,*,#14152,.T.); +#14152 = EDGE_CURVE('',#14127,#14153,#14155,.T.); +#14153 = VERTEX_POINT('',#14154); +#14154 = CARTESIAN_POINT('',(20.,126.41894802464,43.914954195694)); +#14155 = LINE('',#14156,#14157); +#14156 = CARTESIAN_POINT('',(75.,126.41894802464,43.914954195694)); +#14157 = VECTOR('',#14158,1.); +#14158 = DIRECTION('',(-1.,0.,0.)); +#14159 = ORIENTED_EDGE('',*,*,#14160,.T.); +#14160 = EDGE_CURVE('',#14153,#13657,#14161,.T.); +#14161 = LINE('',#14162,#14163); +#14162 = CARTESIAN_POINT('',(20.,70.494892837324,25.744127172118)); +#14163 = VECTOR('',#14164,1.); +#14164 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14165 = ORIENTED_EDGE('',*,*,#13656,.F.); +#14166 = PLANE('',#14167); +#14167 = AXIS2_PLACEMENT_3D('',#14168,#14169,#14170); +#14168 = CARTESIAN_POINT('',(75.,70.494892837324,25.744127172118)); +#14169 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14170 = DIRECTION('',(-1.,0.,0.)); +#14171 = ADVANCED_FACE('',(#14172),#14191,.T.); +#14172 = FACE_BOUND('',#14173,.T.); +#14173 = EDGE_LOOP('',(#14174,#14175,#14184,#14190)); +#14174 = ORIENTED_EDGE('',*,*,#14160,.F.); +#14175 = ORIENTED_EDGE('',*,*,#14176,.F.); +#14176 = EDGE_CURVE('',#14177,#14153,#14179,.T.); +#14177 = VERTEX_POINT('',#14178); +#14178 = CARTESIAN_POINT('',(2.7,121.07295402195,60.3682319276)); +#14179 = CIRCLE('',#14180,17.3); +#14180 = AXIS2_PLACEMENT_3D('',#14181,#14182,#14183); +#14181 = CARTESIAN_POINT('',(20.,121.07295402195,60.3682319276)); +#14182 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14183 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14184 = ORIENTED_EDGE('',*,*,#14185,.F.); +#14185 = EDGE_CURVE('',#13665,#14177,#14186,.T.); +#14186 = LINE('',#14187,#14188); +#14187 = CARTESIAN_POINT('',(2.7,61.657797401562,41.063077286871)); +#14188 = VECTOR('',#14189,1.); +#14189 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14190 = ORIENTED_EDGE('',*,*,#13664,.F.); +#14191 = CYLINDRICAL_SURFACE('',#14192,17.3); +#14192 = AXIS2_PLACEMENT_3D('',#14193,#14194,#14195); +#14193 = CARTESIAN_POINT('',(20.,61.657797401562,41.063077286871)); +#14194 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14195 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14196 = ADVANCED_FACE('',(#14197),#14208,.T.); +#14197 = FACE_BOUND('',#14198,.T.); +#14198 = EDGE_LOOP('',(#14199,#14200,#14201,#14202)); +#14199 = ORIENTED_EDGE('',*,*,#14030,.T.); +#14200 = ORIENTED_EDGE('',*,*,#13673,.F.); +#14201 = ORIENTED_EDGE('',*,*,#14185,.T.); +#14202 = ORIENTED_EDGE('',*,*,#14203,.F.); +#14203 = EDGE_CURVE('',#14031,#14177,#14204,.T.); +#14204 = LINE('',#14205,#14206); +#14205 = CARTESIAN_POINT('',(2.7,121.07295402195,60.3682319276)); +#14206 = VECTOR('',#14207,1.); +#14207 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14208 = PLANE('',#14209); +#14209 = AXIS2_PLACEMENT_3D('',#14210,#14211,#14212); +#14210 = CARTESIAN_POINT('',(2.7,146.8323111935,68.737954434936)); +#14211 = DIRECTION('',(-1.,0.,0.)); +#14212 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#14213 = ADVANCED_FACE('',(#14214),#14239,.T.); +#14214 = FACE_BOUND('',#14215,.T.); +#14215 = EDGE_LOOP('',(#14216,#14226,#14232,#14233)); +#14216 = ORIENTED_EDGE('',*,*,#14217,.T.); +#14217 = EDGE_CURVE('',#14218,#14220,#14222,.T.); +#14218 = VERTEX_POINT('',#14219); +#14219 = CARTESIAN_POINT('',(37.,126.26443952745,44.390482453841)); +#14220 = VERTEX_POINT('',#14221); +#14221 = CARTESIAN_POINT('',(62.,126.26443952745,44.390482453841)); +#14222 = LINE('',#14223,#14224); +#14223 = CARTESIAN_POINT('',(62.,126.26443952745,44.390482453841)); +#14224 = VECTOR('',#14225,1.); +#14225 = DIRECTION('',(1.,0.,0.)); +#14226 = ORIENTED_EDGE('',*,*,#14227,.T.); +#14227 = EDGE_CURVE('',#14220,#13740,#14228,.T.); +#14228 = LINE('',#14229,#14230); +#14229 = CARTESIAN_POINT('',(76.70050786392,74.086585696366, + 27.436870036959)); +#14230 = VECTOR('',#14231,1.); +#14231 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#14232 = ORIENTED_EDGE('',*,*,#13739,.T.); +#14233 = ORIENTED_EDGE('',*,*,#14234,.T.); +#14234 = EDGE_CURVE('',#13732,#14218,#14235,.T.); +#14235 = LINE('',#14236,#14237); +#14236 = CARTESIAN_POINT('',(23.974174588774,80.03068892321, + 29.368226251802)); +#14237 = VECTOR('',#14238,1.); +#14238 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#14239 = PLANE('',#14240); +#14240 = AXIS2_PLACEMENT_3D('',#14241,#14242,#14243); +#14241 = CARTESIAN_POINT('',(62.,70.340384340137,26.219655430266)); +#14242 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14243 = DIRECTION('',(1.,0.,0.)); +#14244 = ADVANCED_FACE('',(#14245),#14263,.T.); +#14245 = FACE_BOUND('',#14246,.T.); +#14246 = EDGE_LOOP('',(#14247,#14248,#14249,#14257)); +#14247 = ORIENTED_EDGE('',*,*,#13747,.F.); +#14248 = ORIENTED_EDGE('',*,*,#14227,.F.); +#14249 = ORIENTED_EDGE('',*,*,#14250,.T.); +#14250 = EDGE_CURVE('',#14220,#14251,#14253,.T.); +#14251 = VERTEX_POINT('',#14252); +#14252 = CARTESIAN_POINT('',(62.,124.87386305276,48.670236777169)); +#14253 = LINE('',#14254,#14255); +#14254 = CARTESIAN_POINT('',(62.,109.8007743237,95.06043381299)); +#14255 = VECTOR('',#14256,1.); +#14256 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14257 = ORIENTED_EDGE('',*,*,#14258,.F.); +#14258 = EDGE_CURVE('',#13748,#14251,#14259,.T.); +#14259 = LINE('',#14260,#14261); +#14260 = CARTESIAN_POINT('',(61.936260597259,125.10009913047, + 48.743745334816)); +#14261 = VECTOR('',#14262,1.); +#14262 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#14263 = PLANE('',#14264); +#14264 = AXIS2_PLACEMENT_3D('',#14265,#14266,#14267); +#14265 = CARTESIAN_POINT('',(62.,125.6464055387,46.292595486431)); +#14266 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#14267 = DIRECTION('',(0.246942617606,-0.969030104594,6.938893903907E-17 + )); +#14268 = ADVANCED_FACE('',(#14269),#14287,.F.); +#14269 = FACE_BOUND('',#14270,.T.); +#14270 = EDGE_LOOP('',(#14271,#14272,#14273,#14281)); +#14271 = ORIENTED_EDGE('',*,*,#13755,.F.); +#14272 = ORIENTED_EDGE('',*,*,#14258,.T.); +#14273 = ORIENTED_EDGE('',*,*,#14274,.F.); +#14274 = EDGE_CURVE('',#14275,#14251,#14277,.T.); +#14275 = VERTEX_POINT('',#14276); +#14276 = CARTESIAN_POINT('',(88.,124.87386305276,48.670236777169)); +#14277 = LINE('',#14278,#14279); +#14278 = CARTESIAN_POINT('',(75.,124.87386305276,48.670236777169)); +#14279 = VECTOR('',#14280,1.); +#14280 = DIRECTION('',(-1.,0.,0.)); +#14281 = ORIENTED_EDGE('',*,*,#14282,.T.); +#14282 = EDGE_CURVE('',#14275,#13756,#14283,.T.); +#14283 = LINE('',#14284,#14285); +#14284 = CARTESIAN_POINT('',(88.063739402741,125.10009913047, + 48.743745334816)); +#14285 = VECTOR('',#14286,1.); +#14286 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#14287 = PLANE('',#14288); +#14288 = AXIS2_PLACEMENT_3D('',#14289,#14290,#14291); +#14289 = CARTESIAN_POINT('',(75.,125.11634215005,48.749023011802)); +#14290 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14291 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14292 = ADVANCED_FACE('',(#14293),#14311,.T.); +#14293 = FACE_BOUND('',#14294,.T.); +#14294 = EDGE_LOOP('',(#14295,#14296,#14297,#14305)); +#14295 = ORIENTED_EDGE('',*,*,#13763,.F.); +#14296 = ORIENTED_EDGE('',*,*,#14282,.F.); +#14297 = ORIENTED_EDGE('',*,*,#14298,.T.); +#14298 = EDGE_CURVE('',#14275,#14299,#14301,.T.); +#14299 = VERTEX_POINT('',#14300); +#14300 = CARTESIAN_POINT('',(88.,126.26443952745,44.390482453841)); +#14301 = LINE('',#14302,#14303); +#14302 = CARTESIAN_POINT('',(88.,109.8007743237,95.06043381299)); +#14303 = VECTOR('',#14304,1.); +#14304 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14305 = ORIENTED_EDGE('',*,*,#14306,.F.); +#14306 = EDGE_CURVE('',#13764,#14299,#14307,.T.); +#14307 = LINE('',#14308,#14309); +#14308 = CARTESIAN_POINT('',(73.29949213608,74.086585696366, + 27.436870036959)); +#14309 = VECTOR('',#14310,1.); +#14310 = DIRECTION('',(0.258819045103,0.91865005135,0.298487495629)); +#14311 = PLANE('',#14312); +#14312 = AXIS2_PLACEMENT_3D('',#14313,#14314,#14315); +#14313 = CARTESIAN_POINT('',(88.,125.6464055387,46.292595486431)); +#14314 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340457E-02 + )); +#14315 = DIRECTION('',(-0.246942617606,-0.969030104594, + 6.938893903907E-17)); +#14316 = ADVANCED_FACE('',(#14317),#14335,.T.); +#14317 = FACE_BOUND('',#14318,.T.); +#14318 = EDGE_LOOP('',(#14319,#14327,#14333,#14334)); +#14319 = ORIENTED_EDGE('',*,*,#14320,.T.); +#14320 = EDGE_CURVE('',#14299,#14321,#14323,.T.); +#14321 = VERTEX_POINT('',#14322); +#14322 = CARTESIAN_POINT('',(113.,126.26443952745,44.390482453841)); +#14323 = LINE('',#14324,#14325); +#14324 = CARTESIAN_POINT('',(88.,126.26443952745,44.390482453841)); +#14325 = VECTOR('',#14326,1.); +#14326 = DIRECTION('',(1.,0.,0.)); +#14327 = ORIENTED_EDGE('',*,*,#14328,.T.); +#14328 = EDGE_CURVE('',#14321,#13772,#14329,.T.); +#14329 = LINE('',#14330,#14331); +#14330 = CARTESIAN_POINT('',(126.02582541122,80.03068892321, + 29.368226251802)); +#14331 = VECTOR('',#14332,1.); +#14332 = DIRECTION('',(0.258819045103,-0.91865005135,-0.298487495629)); +#14333 = ORIENTED_EDGE('',*,*,#13771,.T.); +#14334 = ORIENTED_EDGE('',*,*,#14306,.T.); +#14335 = PLANE('',#14336); +#14336 = AXIS2_PLACEMENT_3D('',#14337,#14338,#14339); +#14337 = CARTESIAN_POINT('',(88.,70.340384340137,26.219655430266)); +#14338 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14339 = DIRECTION('',(-1.,0.,0.)); +#14340 = ADVANCED_FACE('',(#14341),#14359,.T.); +#14341 = FACE_BOUND('',#14342,.T.); +#14342 = EDGE_LOOP('',(#14343,#14344,#14345,#14353)); +#14343 = ORIENTED_EDGE('',*,*,#13779,.F.); +#14344 = ORIENTED_EDGE('',*,*,#14328,.F.); +#14345 = ORIENTED_EDGE('',*,*,#14346,.T.); +#14346 = EDGE_CURVE('',#14321,#14347,#14349,.T.); +#14347 = VERTEX_POINT('',#14348); +#14348 = CARTESIAN_POINT('',(113.,124.87386305276,48.670236777169)); +#14349 = LINE('',#14350,#14351); +#14350 = CARTESIAN_POINT('',(113.,109.8007743237,95.06043381299)); +#14351 = VECTOR('',#14352,1.); +#14352 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14353 = ORIENTED_EDGE('',*,*,#14354,.F.); +#14354 = EDGE_CURVE('',#13780,#14347,#14355,.T.); +#14355 = LINE('',#14356,#14357); +#14356 = CARTESIAN_POINT('',(111.26157814456,131.04420235732, + 50.67510154966)); +#14357 = VECTOR('',#14358,1.); +#14358 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#14359 = PLANE('',#14360); +#14360 = AXIS2_PLACEMENT_3D('',#14361,#14362,#14363); +#14361 = CARTESIAN_POINT('',(113.,125.6464055387,46.292595486431)); +#14362 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#14363 = DIRECTION('',(-0.246942617606,0.969030104594, + -9.020562075079E-17)); +#14364 = ADVANCED_FACE('',(#14365),#14383,.F.); +#14365 = FACE_BOUND('',#14366,.T.); +#14366 = EDGE_LOOP('',(#14367,#14368,#14369,#14377)); +#14367 = ORIENTED_EDGE('',*,*,#13787,.F.); +#14368 = ORIENTED_EDGE('',*,*,#14354,.T.); +#14369 = ORIENTED_EDGE('',*,*,#14370,.F.); +#14370 = EDGE_CURVE('',#14371,#14347,#14373,.T.); +#14371 = VERTEX_POINT('',#14372); +#14372 = CARTESIAN_POINT('',(120.66552506059,124.87386305276, + 48.670236777169)); +#14373 = LINE('',#14374,#14375); +#14374 = CARTESIAN_POINT('',(75.,124.87386305276,48.670236777169)); +#14375 = VECTOR('',#14376,1.); +#14376 = DIRECTION('',(-1.,0.,0.)); +#14377 = ORIENTED_EDGE('',*,*,#14378,.T.); +#14378 = EDGE_CURVE('',#14371,#13788,#14379,.T.); +#14379 = LINE('',#14380,#14381); +#14380 = CARTESIAN_POINT('',(120.66552506059,125.11634215005, + 48.749023011802)); +#14381 = VECTOR('',#14382,1.); +#14382 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14383 = PLANE('',#14384); +#14384 = AXIS2_PLACEMENT_3D('',#14385,#14386,#14387); +#14385 = CARTESIAN_POINT('',(75.,125.11634215005,48.749023011802)); +#14386 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14387 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14388 = ADVANCED_FACE('',(#14389),#14407,.F.); +#14389 = FACE_BOUND('',#14390,.T.); +#14390 = EDGE_LOOP('',(#14391,#14399,#14405,#14406)); +#14391 = ORIENTED_EDGE('',*,*,#14392,.F.); +#14392 = EDGE_CURVE('',#14393,#14371,#14395,.T.); +#14393 = VERTEX_POINT('',#14394); +#14394 = CARTESIAN_POINT('',(120.66552506059,124.25582906401, + 50.57234980976)); +#14395 = LINE('',#14396,#14397); +#14396 = CARTESIAN_POINT('',(120.66552506059,124.62664945726, + 49.431081990205)); +#14397 = VECTOR('',#14398,1.); +#14398 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14399 = ORIENTED_EDGE('',*,*,#14400,.T.); +#14400 = EDGE_CURVE('',#14393,#13796,#14401,.T.); +#14401 = LINE('',#14402,#14403); +#14402 = CARTESIAN_POINT('',(120.66552506059,68.3317738767, + 32.401522786184)); +#14403 = VECTOR('',#14404,1.); +#14404 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14405 = ORIENTED_EDGE('',*,*,#13795,.T.); +#14406 = ORIENTED_EDGE('',*,*,#14378,.F.); +#14407 = PLANE('',#14408); +#14408 = AXIS2_PLACEMENT_3D('',#14409,#14410,#14411); +#14409 = CARTESIAN_POINT('',(120.66552506059,68.949807865449, + 30.499409753594)); +#14410 = DIRECTION('',(-1.,0.,0.)); +#14411 = DIRECTION('',(0.,0.,1.)); +#14412 = ADVANCED_FACE('',(#14413),#14431,.F.); +#14413 = FACE_BOUND('',#14414,.T.); +#14414 = EDGE_LOOP('',(#14415,#14416,#14424,#14430)); +#14415 = ORIENTED_EDGE('',*,*,#14400,.F.); +#14416 = ORIENTED_EDGE('',*,*,#14417,.T.); +#14417 = EDGE_CURVE('',#14393,#14418,#14420,.T.); +#14418 = VERTEX_POINT('',#14419); +#14419 = CARTESIAN_POINT('',(29.334474939404,124.25582906401, + 50.57234980976)); +#14420 = LINE('',#14421,#14422); +#14421 = CARTESIAN_POINT('',(130.,124.25582906401,50.57234980976)); +#14422 = VECTOR('',#14423,1.); +#14423 = DIRECTION('',(-1.,0.,0.)); +#14424 = ORIENTED_EDGE('',*,*,#14425,.F.); +#14425 = EDGE_CURVE('',#13804,#14418,#14426,.T.); +#14426 = LINE('',#14427,#14428); +#14427 = CARTESIAN_POINT('',(29.334474939404,64.840672443624, + 31.267195169031)); +#14428 = VECTOR('',#14429,1.); +#14429 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14430 = ORIENTED_EDGE('',*,*,#13803,.T.); +#14431 = PLANE('',#14432); +#14432 = AXIS2_PLACEMENT_3D('',#14433,#14434,#14435); +#14433 = CARTESIAN_POINT('',(75.,73.782291227326,34.172503228062)); +#14434 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14435 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14436 = ADVANCED_FACE('',(#14437),#14455,.F.); +#14437 = FACE_BOUND('',#14438,.T.); +#14438 = EDGE_LOOP('',(#14439,#14440,#14441,#14449)); +#14439 = ORIENTED_EDGE('',*,*,#13811,.F.); +#14440 = ORIENTED_EDGE('',*,*,#14425,.T.); +#14441 = ORIENTED_EDGE('',*,*,#14442,.T.); +#14442 = EDGE_CURVE('',#14418,#14443,#14445,.T.); +#14443 = VERTEX_POINT('',#14444); +#14444 = CARTESIAN_POINT('',(29.334474939404,124.87386305276, + 48.670236777169)); +#14445 = LINE('',#14446,#14447); +#14446 = CARTESIAN_POINT('',(29.334474939404,124.87386305276, + 48.670236777169)); +#14447 = VECTOR('',#14448,1.); +#14448 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14449 = ORIENTED_EDGE('',*,*,#14450,.F.); +#14450 = EDGE_CURVE('',#13722,#14443,#14451,.T.); +#14451 = LINE('',#14452,#14453); +#14452 = CARTESIAN_POINT('',(29.334474939404,125.11634215005, + 48.749023011802)); +#14453 = VECTOR('',#14454,1.); +#14454 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14455 = PLANE('',#14456); +#14456 = AXIS2_PLACEMENT_3D('',#14457,#14458,#14459); +#14457 = CARTESIAN_POINT('',(29.334474939404,65.458706432373, + 29.36508213644)); +#14458 = DIRECTION('',(1.,0.,0.)); +#14459 = DIRECTION('',(0.,0.,-1.)); +#14460 = ADVANCED_FACE('',(#14461),#14479,.F.); +#14461 = FACE_BOUND('',#14462,.T.); +#14462 = EDGE_LOOP('',(#14463,#14471,#14477,#14478)); +#14463 = ORIENTED_EDGE('',*,*,#14464,.F.); +#14464 = EDGE_CURVE('',#14465,#14443,#14467,.T.); +#14465 = VERTEX_POINT('',#14466); +#14466 = CARTESIAN_POINT('',(37.,124.87386305276,48.670236777169)); +#14467 = LINE('',#14468,#14469); +#14468 = CARTESIAN_POINT('',(75.,124.87386305276,48.670236777169)); +#14469 = VECTOR('',#14470,1.); +#14470 = DIRECTION('',(-1.,0.,0.)); +#14471 = ORIENTED_EDGE('',*,*,#14472,.T.); +#14472 = EDGE_CURVE('',#14465,#13724,#14473,.T.); +#14473 = LINE('',#14474,#14475); +#14474 = CARTESIAN_POINT('',(38.738421855435,131.04420235732, + 50.67510154966)); +#14475 = VECTOR('',#14476,1.); +#14476 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#14477 = ORIENTED_EDGE('',*,*,#13721,.F.); +#14478 = ORIENTED_EDGE('',*,*,#14450,.T.); +#14479 = PLANE('',#14480); +#14480 = AXIS2_PLACEMENT_3D('',#14481,#14482,#14483); +#14481 = CARTESIAN_POINT('',(75.,125.11634215005,48.749023011802)); +#14482 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14483 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14484 = ADVANCED_FACE('',(#14485),#14496,.T.); +#14485 = FACE_BOUND('',#14486,.T.); +#14486 = EDGE_LOOP('',(#14487,#14488,#14489,#14495)); +#14487 = ORIENTED_EDGE('',*,*,#13731,.F.); +#14488 = ORIENTED_EDGE('',*,*,#14472,.F.); +#14489 = ORIENTED_EDGE('',*,*,#14490,.T.); +#14490 = EDGE_CURVE('',#14465,#14218,#14491,.T.); +#14491 = LINE('',#14492,#14493); +#14492 = CARTESIAN_POINT('',(37.,109.8007743237,95.06043381299)); +#14493 = VECTOR('',#14494,1.); +#14494 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14495 = ORIENTED_EDGE('',*,*,#14234,.F.); +#14496 = PLANE('',#14497); +#14497 = AXIS2_PLACEMENT_3D('',#14498,#14499,#14500); +#14498 = CARTESIAN_POINT('',(37.,125.6464055387,46.292595486431)); +#14499 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340457E-02 + )); +#14500 = DIRECTION('',(0.246942617606,0.969030104594,-9.020562075079E-17 + )); +#14501 = ADVANCED_FACE('',(#14502),#14521,.F.); +#14502 = FACE_BOUND('',#14503,.F.); +#14503 = EDGE_LOOP('',(#14504,#14513,#14519,#14520)); +#14504 = ORIENTED_EDGE('',*,*,#14505,.F.); +#14505 = EDGE_CURVE('',#14506,#12900,#14508,.T.); +#14506 = VERTEX_POINT('',#14507); +#14507 = CARTESIAN_POINT('',(92.1,122.63037505063,55.574982867169)); +#14508 = CIRCLE('',#14509,10.1); +#14509 = AXIS2_PLACEMENT_3D('',#14510,#14511,#14512); +#14510 = CARTESIAN_POINT('',(91.,119.52786905008,65.123514509076)); +#14511 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14512 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14513 = ORIENTED_EDGE('',*,*,#14514,.F.); +#14514 = EDGE_CURVE('',#12710,#14506,#14515,.T.); +#14515 = LINE('',#14516,#14517); +#14516 = CARTESIAN_POINT('',(92.1,103.79945602977,49.456446379124)); +#14517 = VECTOR('',#14518,1.); +#14518 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14519 = ORIENTED_EDGE('',*,*,#12717,.T.); +#14520 = ORIENTED_EDGE('',*,*,#12916,.T.); +#14521 = CYLINDRICAL_SURFACE('',#14522,10.1); +#14522 = AXIS2_PLACEMENT_3D('',#14523,#14524,#14525); +#14523 = CARTESIAN_POINT('',(91.,100.69695002922,59.004978021031)); +#14524 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14525 = DIRECTION('',(1.,0.,-0.)); +#14526 = ADVANCED_FACE('',(#14527),#14545,.F.); +#14527 = FACE_BOUND('',#14528,.T.); +#14528 = EDGE_LOOP('',(#14529,#14537,#14538,#14539)); +#14529 = ORIENTED_EDGE('',*,*,#14530,.T.); +#14530 = EDGE_CURVE('',#14531,#14506,#14533,.T.); +#14531 = VERTEX_POINT('',#14532); +#14532 = CARTESIAN_POINT('',(92.1,122.94107331339,54.618751938847)); +#14533 = LINE('',#14534,#14535); +#14534 = CARTESIAN_POINT('',(92.1,124.62664945726,49.431081990205)); +#14535 = VECTOR('',#14536,1.); +#14536 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14537 = ORIENTED_EDGE('',*,*,#14514,.F.); +#14538 = ORIENTED_EDGE('',*,*,#12709,.F.); +#14539 = ORIENTED_EDGE('',*,*,#14540,.F.); +#14540 = EDGE_CURVE('',#14531,#12701,#14541,.T.); +#14541 = LINE('',#14542,#14543); +#14542 = CARTESIAN_POINT('',(92.1,124.367675132,55.082282968395)); +#14543 = VECTOR('',#14544,1.); +#14544 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14545 = PLANE('',#14546); +#14546 = AXIS2_PLACEMENT_3D('',#14547,#14548,#14549); +#14547 = CARTESIAN_POINT('',(92.1,125.50211024215,75.656236306781)); +#14548 = DIRECTION('',(1.,0.,0.)); +#14549 = DIRECTION('',(0.,0.,-1.)); +#14550 = ADVANCED_FACE('',(#14551),#14570,.F.); +#14551 = FACE_BOUND('',#14552,.F.); +#14552 = EDGE_LOOP('',(#14553,#14561,#14562,#14563)); +#14553 = ORIENTED_EDGE('',*,*,#14554,.T.); +#14554 = EDGE_CURVE('',#14555,#12693,#14557,.T.); +#14555 = VERTEX_POINT('',#14556); +#14556 = CARTESIAN_POINT('',(89.9,122.94107331339,54.618751938847)); +#14557 = LINE('',#14558,#14559); +#14558 = CARTESIAN_POINT('',(89.9,124.367675132,55.082282968395)); +#14559 = VECTOR('',#14560,1.); +#14560 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14561 = ORIENTED_EDGE('',*,*,#12700,.T.); +#14562 = ORIENTED_EDGE('',*,*,#14540,.F.); +#14563 = ORIENTED_EDGE('',*,*,#14564,.F.); +#14564 = EDGE_CURVE('',#14555,#14531,#14565,.T.); +#14565 = CIRCLE('',#14566,11.1); +#14566 = AXIS2_PLACEMENT_3D('',#14567,#14568,#14569); +#14567 = CARTESIAN_POINT('',(91.,119.52786905008,65.123514509076)); +#14568 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14569 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14570 = CYLINDRICAL_SURFACE('',#14571,11.1); +#14571 = AXIS2_PLACEMENT_3D('',#14572,#14573,#14574); +#14572 = CARTESIAN_POINT('',(91.,100.69695002922,59.004978021031)); +#14573 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14574 = DIRECTION('',(1.,0.,-0.)); +#14575 = ADVANCED_FACE('',(#14576),#14594,.T.); +#14576 = FACE_BOUND('',#14577,.T.); +#14577 = EDGE_LOOP('',(#14578,#14586,#14587,#14588)); +#14578 = ORIENTED_EDGE('',*,*,#14579,.T.); +#14579 = EDGE_CURVE('',#14580,#14555,#14582,.T.); +#14580 = VERTEX_POINT('',#14581); +#14581 = CARTESIAN_POINT('',(89.9,122.63037505063,55.574982867169)); +#14582 = LINE('',#14583,#14584); +#14583 = CARTESIAN_POINT('',(89.9,124.62664945726,49.431081990205)); +#14584 = VECTOR('',#14585,1.); +#14585 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14586 = ORIENTED_EDGE('',*,*,#14554,.T.); +#14587 = ORIENTED_EDGE('',*,*,#12692,.F.); +#14588 = ORIENTED_EDGE('',*,*,#14589,.F.); +#14589 = EDGE_CURVE('',#14580,#12684,#14590,.T.); +#14590 = LINE('',#14591,#14592); +#14591 = CARTESIAN_POINT('',(89.9,103.79945602977,49.456446379124)); +#14592 = VECTOR('',#14593,1.); +#14593 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14594 = PLANE('',#14595); +#14595 = AXIS2_PLACEMENT_3D('',#14596,#14597,#14598); +#14596 = CARTESIAN_POINT('',(89.9,125.50211024215,75.656236306781)); +#14597 = DIRECTION('',(1.,0.,0.)); +#14598 = DIRECTION('',(0.,0.,-1.)); +#14599 = ADVANCED_FACE('',(#14600),#14612,.F.); +#14600 = FACE_BOUND('',#14601,.F.); +#14601 = EDGE_LOOP('',(#14602,#14603,#14604,#14611)); +#14602 = ORIENTED_EDGE('',*,*,#12683,.T.); +#14603 = ORIENTED_EDGE('',*,*,#14589,.F.); +#14604 = ORIENTED_EDGE('',*,*,#14605,.F.); +#14605 = EDGE_CURVE('',#12933,#14580,#14606,.T.); +#14606 = CIRCLE('',#14607,10.1); +#14607 = AXIS2_PLACEMENT_3D('',#14608,#14609,#14610); +#14608 = CARTESIAN_POINT('',(91.,119.52786905008,65.123514509076)); +#14609 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14610 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14611 = ORIENTED_EDGE('',*,*,#12940,.T.); +#14612 = CYLINDRICAL_SURFACE('',#14613,10.1); +#14613 = AXIS2_PLACEMENT_3D('',#14614,#14615,#14616); +#14614 = CARTESIAN_POINT('',(91.,100.69695002922,59.004978021031)); +#14615 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14616 = DIRECTION('',(1.,0.,-0.)); +#14617 = ADVANCED_FACE('',(#14618),#14636,.F.); +#14618 = FACE_BOUND('',#14619,.F.); +#14619 = EDGE_LOOP('',(#14620,#14621,#14628,#14635)); +#14620 = ORIENTED_EDGE('',*,*,#12726,.T.); +#14621 = ORIENTED_EDGE('',*,*,#14622,.F.); +#14622 = EDGE_CURVE('',#14623,#12727,#14625,.T.); +#14623 = VERTEX_POINT('',#14624); +#14624 = CARTESIAN_POINT('',(115.,122.84980173961,54.899656958903)); +#14625 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#14626,#14627),.UNSPECIFIED., + .F.,.F.,(2,2),(10.599999999998,13.599999999999), + .PIECEWISE_BEZIER_KNOTS.); +#14626 = CARTESIAN_POINT('',(115.,122.84980173961,54.899656958902)); +#14627 = CARTESIAN_POINT('',(115.,125.70297128849,55.826707942027)); +#14628 = ORIENTED_EDGE('',*,*,#14629,.F.); +#14629 = EDGE_CURVE('',#14623,#14623,#14630,.T.); +#14630 = CIRCLE('',#14631,5.75); +#14631 = AXIS2_PLACEMENT_3D('',#14632,#14633,#14634); +#14632 = CARTESIAN_POINT('',(115.,121.07295402195,60.3682319276)); +#14633 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14634 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14635 = ORIENTED_EDGE('',*,*,#14622,.T.); +#14636 = CYLINDRICAL_SURFACE('',#14637,5.75); +#14637 = AXIS2_PLACEMENT_3D('',#14638,#14639,#14640); +#14638 = CARTESIAN_POINT('',(115.,110.99175494922,57.092651787226)); +#14639 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14640 = DIRECTION('',(1.,0.,-0.)); +#14641 = ADVANCED_FACE('',(#14642),#14660,.F.); +#14642 = FACE_BOUND('',#14643,.F.); +#14643 = EDGE_LOOP('',(#14644,#14645,#14652,#14653)); +#14644 = ORIENTED_EDGE('',*,*,#12799,.T.); +#14645 = ORIENTED_EDGE('',*,*,#14646,.T.); +#14646 = EDGE_CURVE('',#12738,#13835,#14647,.T.); +#14647 = CIRCLE('',#14648,2.); +#14648 = AXIS2_PLACEMENT_3D('',#14649,#14650,#14651); +#14649 = CARTESIAN_POINT('',(142.5,125.82823660343,61.913316899475)); +#14650 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14651 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14652 = ORIENTED_EDGE('',*,*,#13842,.T.); +#14653 = ORIENTED_EDGE('',*,*,#14654,.F.); +#14654 = EDGE_CURVE('',#12791,#13826,#14655,.T.); +#14655 = CIRCLE('',#14656,2.); +#14656 = AXIS2_PLACEMENT_3D('',#14657,#14658,#14659); +#14657 = CARTESIAN_POINT('',(142.5,105.44699616755,124.64032505618)); +#14658 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14659 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14660 = CYLINDRICAL_SURFACE('',#14661,2.); +#14661 = AXIS2_PLACEMENT_3D('',#14662,#14663,#14664); +#14662 = CARTESIAN_POINT('',(142.5,139.17043920187,20.850239612604)); +#14663 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14664 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14665 = ADVANCED_FACE('',(#14666),#14678,.F.); +#14666 = FACE_BOUND('',#14667,.F.); +#14667 = EDGE_LOOP('',(#14668,#14669,#14670,#14671)); +#14668 = ORIENTED_EDGE('',*,*,#12790,.T.); +#14669 = ORIENTED_EDGE('',*,*,#14654,.T.); +#14670 = ORIENTED_EDGE('',*,*,#13856,.T.); +#14671 = ORIENTED_EDGE('',*,*,#14672,.F.); +#14672 = EDGE_CURVE('',#12783,#13857,#14673,.T.); +#14673 = CIRCLE('',#14674,2.); +#14674 = AXIS2_PLACEMENT_3D('',#14675,#14676,#14677); +#14675 = CARTESIAN_POINT('',(130.,101.58428373786,136.52853150987)); +#14676 = DIRECTION('',(-1.,0.,0.)); +#14677 = DIRECTION('',(0.,0.,-1.)); +#14678 = TOROIDAL_SURFACE('',#14679,12.5,2.); +#14679 = AXIS2_PLACEMENT_3D('',#14680,#14681,#14682); +#14680 = CARTESIAN_POINT('',(130.,105.44699616755,124.64032505618)); +#14681 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14682 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14683 = ADVANCED_FACE('',(#14684),#14696,.F.); +#14684 = FACE_BOUND('',#14685,.F.); +#14685 = EDGE_LOOP('',(#14686,#14693,#14694,#14695)); +#14686 = ORIENTED_EDGE('',*,*,#14687,.F.); +#14687 = EDGE_CURVE('',#12774,#13884,#14688,.T.); +#14688 = CIRCLE('',#14689,2.); +#14689 = AXIS2_PLACEMENT_3D('',#14690,#14691,#14692); +#14690 = CARTESIAN_POINT('',(20.,101.58428373786,136.52853150987)); +#14691 = DIRECTION('',(-1.,0.,0.)); +#14692 = DIRECTION('',(0.,0.,1.)); +#14693 = ORIENTED_EDGE('',*,*,#12782,.T.); +#14694 = ORIENTED_EDGE('',*,*,#14672,.T.); +#14695 = ORIENTED_EDGE('',*,*,#13883,.T.); +#14696 = CYLINDRICAL_SURFACE('',#14697,2.); +#14697 = AXIS2_PLACEMENT_3D('',#14698,#14699,#14700); +#14698 = CARTESIAN_POINT('',(130.,101.58428373786,136.52853150987)); +#14699 = DIRECTION('',(1.,0.,0.)); +#14700 = DIRECTION('',(0.,0.,-1.)); +#14701 = ADVANCED_FACE('',(#14702),#14714,.F.); +#14702 = FACE_BOUND('',#14703,.F.); +#14703 = EDGE_LOOP('',(#14704,#14705,#14706,#14707)); +#14704 = ORIENTED_EDGE('',*,*,#12773,.T.); +#14705 = ORIENTED_EDGE('',*,*,#14687,.T.); +#14706 = ORIENTED_EDGE('',*,*,#13905,.T.); +#14707 = ORIENTED_EDGE('',*,*,#14708,.T.); +#14708 = EDGE_CURVE('',#13906,#12766,#14709,.T.); +#14709 = CIRCLE('',#14710,2.); +#14710 = AXIS2_PLACEMENT_3D('',#14711,#14712,#14713); +#14711 = CARTESIAN_POINT('',(7.5,105.44699616755,124.64032505618)); +#14712 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14713 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14714 = TOROIDAL_SURFACE('',#14715,12.5,2.); +#14715 = AXIS2_PLACEMENT_3D('',#14716,#14717,#14718); +#14716 = CARTESIAN_POINT('',(20.,105.44699616755,124.64032505618)); +#14717 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14718 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14719 = ADVANCED_FACE('',(#14720),#14732,.F.); +#14720 = FACE_BOUND('',#14721,.F.); +#14721 = EDGE_LOOP('',(#14722,#14723,#14730,#14731)); +#14722 = ORIENTED_EDGE('',*,*,#13940,.T.); +#14723 = ORIENTED_EDGE('',*,*,#14724,.T.); +#14724 = EDGE_CURVE('',#13931,#12757,#14725,.T.); +#14725 = CIRCLE('',#14726,2.); +#14726 = AXIS2_PLACEMENT_3D('',#14727,#14728,#14729); +#14727 = CARTESIAN_POINT('',(7.5,125.82823660343,61.913316899475)); +#14728 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14729 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14730 = ORIENTED_EDGE('',*,*,#12765,.T.); +#14731 = ORIENTED_EDGE('',*,*,#14708,.F.); +#14732 = CYLINDRICAL_SURFACE('',#14733,2.); +#14733 = AXIS2_PLACEMENT_3D('',#14734,#14735,#14736); +#14734 = CARTESIAN_POINT('',(7.5,129.38193203874,50.97616696208)); +#14735 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14736 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14737 = ADVANCED_FACE('',(#14738),#14750,.F.); +#14738 = FACE_BOUND('',#14739,.F.); +#14739 = EDGE_LOOP('',(#14740,#14741,#14742,#14749)); +#14740 = ORIENTED_EDGE('',*,*,#14724,.F.); +#14741 = ORIENTED_EDGE('',*,*,#13964,.T.); +#14742 = ORIENTED_EDGE('',*,*,#14743,.T.); +#14743 = EDGE_CURVE('',#13957,#12749,#14744,.T.); +#14744 = CIRCLE('',#14745,2.); +#14745 = AXIS2_PLACEMENT_3D('',#14746,#14747,#14748); +#14746 = CARTESIAN_POINT('',(20.,129.69094903311,50.025110445785)); +#14747 = DIRECTION('',(-1.,0.,0.)); +#14748 = DIRECTION('',(0.,0.,1.)); +#14749 = ORIENTED_EDGE('',*,*,#12756,.T.); +#14750 = TOROIDAL_SURFACE('',#14751,12.5,2.); +#14751 = AXIS2_PLACEMENT_3D('',#14752,#14753,#14754); +#14752 = CARTESIAN_POINT('',(20.,125.82823660343,61.913316899475)); +#14753 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14754 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14755 = ADVANCED_FACE('',(#14756),#14768,.F.); +#14756 = FACE_BOUND('',#14757,.F.); +#14757 = EDGE_LOOP('',(#14758,#14759,#14760,#14767)); +#14758 = ORIENTED_EDGE('',*,*,#14743,.F.); +#14759 = ORIENTED_EDGE('',*,*,#13979,.T.); +#14760 = ORIENTED_EDGE('',*,*,#14761,.T.); +#14761 = EDGE_CURVE('',#13980,#12740,#14762,.T.); +#14762 = CIRCLE('',#14763,2.); +#14763 = AXIS2_PLACEMENT_3D('',#14764,#14765,#14766); +#14764 = CARTESIAN_POINT('',(130.,129.69094903311,50.025110445785)); +#14765 = DIRECTION('',(-1.,0.,0.)); +#14766 = DIRECTION('',(0.,0.,1.)); +#14767 = ORIENTED_EDGE('',*,*,#12748,.T.); +#14768 = CYLINDRICAL_SURFACE('',#14769,2.); +#14769 = AXIS2_PLACEMENT_3D('',#14770,#14771,#14772); +#14770 = CARTESIAN_POINT('',(130.,129.69094903311,50.025110445785)); +#14771 = DIRECTION('',(1.,0.,0.)); +#14772 = DIRECTION('',(0.,0.,-1.)); +#14773 = ADVANCED_FACE('',(#14774),#14780,.F.); +#14774 = FACE_BOUND('',#14775,.F.); +#14775 = EDGE_LOOP('',(#14776,#14777,#14778,#14779)); +#14776 = ORIENTED_EDGE('',*,*,#14646,.F.); +#14777 = ORIENTED_EDGE('',*,*,#12737,.T.); +#14778 = ORIENTED_EDGE('',*,*,#14761,.F.); +#14779 = ORIENTED_EDGE('',*,*,#14004,.T.); +#14780 = TOROIDAL_SURFACE('',#14781,12.5,2.); +#14781 = AXIS2_PLACEMENT_3D('',#14782,#14783,#14784); +#14782 = CARTESIAN_POINT('',(130.,125.82823660343,61.913316899475)); +#14783 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14784 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14785 = ADVANCED_FACE('',(#14786,#14796,#14810,#14813),#14823,.T.); +#14786 = FACE_BOUND('',#14787,.T.); +#14787 = EDGE_LOOP('',(#14788,#14789,#14790,#14791,#14792,#14793,#14794, + #14795)); +#14788 = ORIENTED_EDGE('',*,*,#12899,.F.); +#14789 = ORIENTED_EDGE('',*,*,#14505,.F.); +#14790 = ORIENTED_EDGE('',*,*,#14530,.F.); +#14791 = ORIENTED_EDGE('',*,*,#14564,.F.); +#14792 = ORIENTED_EDGE('',*,*,#14579,.F.); +#14793 = ORIENTED_EDGE('',*,*,#14605,.F.); +#14794 = ORIENTED_EDGE('',*,*,#12930,.F.); +#14795 = ORIENTED_EDGE('',*,*,#12964,.F.); +#14796 = FACE_BOUND('',#14797,.T.); +#14797 = EDGE_LOOP('',(#14798,#14799,#14800,#14801,#14802,#14803,#14804, + #14805,#14806,#14807,#14808,#14809)); +#14798 = ORIENTED_EDGE('',*,*,#14490,.F.); +#14799 = ORIENTED_EDGE('',*,*,#14464,.T.); +#14800 = ORIENTED_EDGE('',*,*,#14442,.F.); +#14801 = ORIENTED_EDGE('',*,*,#14417,.F.); +#14802 = ORIENTED_EDGE('',*,*,#14392,.T.); +#14803 = ORIENTED_EDGE('',*,*,#14370,.T.); +#14804 = ORIENTED_EDGE('',*,*,#14346,.F.); +#14805 = ORIENTED_EDGE('',*,*,#14320,.F.); +#14806 = ORIENTED_EDGE('',*,*,#14298,.F.); +#14807 = ORIENTED_EDGE('',*,*,#14274,.T.); +#14808 = ORIENTED_EDGE('',*,*,#14250,.F.); +#14809 = ORIENTED_EDGE('',*,*,#14217,.F.); +#14810 = FACE_BOUND('',#14811,.T.); +#14811 = EDGE_LOOP('',(#14812)); +#14812 = ORIENTED_EDGE('',*,*,#14629,.F.); +#14813 = FACE_BOUND('',#14814,.T.); +#14814 = EDGE_LOOP('',(#14815,#14816,#14817,#14818,#14819,#14820,#14821, + #14822)); +#14815 = ORIENTED_EDGE('',*,*,#14203,.T.); +#14816 = ORIENTED_EDGE('',*,*,#14176,.T.); +#14817 = ORIENTED_EDGE('',*,*,#14152,.F.); +#14818 = ORIENTED_EDGE('',*,*,#14126,.F.); +#14819 = ORIENTED_EDGE('',*,*,#14112,.F.); +#14820 = ORIENTED_EDGE('',*,*,#14087,.F.); +#14821 = ORIENTED_EDGE('',*,*,#14053,.T.); +#14822 = ORIENTED_EDGE('',*,*,#14038,.F.); +#14823 = PLANE('',#14824); +#14824 = AXIS2_PLACEMENT_3D('',#14825,#14826,#14827); +#14825 = CARTESIAN_POINT('',(130.,124.62664945726,49.431081990205)); +#14826 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14827 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14828 = ADVANCED_FACE('',(#14829),#14854,.T.); +#14829 = FACE_BOUND('',#14830,.T.); +#14830 = EDGE_LOOP('',(#14831,#14832,#14840,#14848)); +#14831 = ORIENTED_EDGE('',*,*,#12868,.T.); +#14832 = ORIENTED_EDGE('',*,*,#14833,.T.); +#14833 = EDGE_CURVE('',#12860,#14834,#14836,.T.); +#14834 = VERTEX_POINT('',#14835); +#14835 = CARTESIAN_POINT('',(115.75189526714,118.57082829341, + 74.541119045274)); +#14836 = LINE('',#14837,#14838); +#14837 = CARTESIAN_POINT('',(115.75189526714,119.52188481369, + 74.850136040945)); +#14838 = VECTOR('',#14839,1.); +#14839 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14840 = ORIENTED_EDGE('',*,*,#14841,.T.); +#14841 = EDGE_CURVE('',#14834,#14842,#14844,.T.); +#14842 = VERTEX_POINT('',#14843); +#14843 = CARTESIAN_POINT('',(112.87051446514,119.6825975471, + 71.119445116067)); +#14844 = LINE('',#14845,#14846); +#14845 = CARTESIAN_POINT('',(112.89626714959,119.67266097684, + 71.150026734765)); +#14846 = VECTOR('',#14847,1.); +#14847 = DIRECTION('',(-0.625114582685,0.241197960567,-0.742330992438)); +#14848 = ORIENTED_EDGE('',*,*,#14849,.T.); +#14849 = EDGE_CURVE('',#14842,#12869,#14850,.T.); +#14850 = LINE('',#14851,#14852); +#14851 = CARTESIAN_POINT('',(112.87051446514,120.63365406738, + 71.428462111738)); +#14852 = VECTOR('',#14853,1.); +#14853 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14854 = PLANE('',#14855); +#14855 = AXIS2_PLACEMENT_3D('',#14856,#14857,#14858); +#14856 = CARTESIAN_POINT('',(112.89626714959,120.62371749712, + 71.459043730436)); +#14857 = DIRECTION('',(0.780532996429,0.193171029481,-0.594519297293)); +#14858 = DIRECTION('',(0.625114582685,-0.241197960567,0.742330992438)); +#14859 = ADVANCED_FACE('',(#14860),#14885,.T.); +#14860 = FACE_BOUND('',#14861,.T.); +#14861 = EDGE_LOOP('',(#14862,#14863,#14871,#14879)); +#14862 = ORIENTED_EDGE('',*,*,#12851,.T.); +#14863 = ORIENTED_EDGE('',*,*,#14864,.F.); +#14864 = EDGE_CURVE('',#14865,#12844,#14867,.T.); +#14865 = VERTEX_POINT('',#14866); +#14866 = CARTESIAN_POINT('',(115.20920714959,119.43121054828, + 71.893134743773)); +#14867 = LINE('',#14868,#14869); +#14868 = CARTESIAN_POINT('',(115.20920714959,120.38226706857, + 72.202151739444)); +#14869 = VECTOR('',#14870,1.); +#14870 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14871 = ORIENTED_EDGE('',*,*,#14872,.T.); +#14872 = EDGE_CURVE('',#14865,#14873,#14875,.T.); +#14873 = VERTEX_POINT('',#14874); +#14874 = CARTESIAN_POINT('',(116.15071124896,118.640397437, + 74.327007237364)); +#14875 = LINE('',#14876,#14877); +#14876 = CARTESIAN_POINT('',(116.13318114959,118.65512178332, + 74.281690359091)); +#14877 = VECTOR('',#14878,1.); +#14878 = DIRECTION('',(0.345275407748,-0.290012884315,0.892567879624)); +#14879 = ORIENTED_EDGE('',*,*,#14880,.T.); +#14880 = EDGE_CURVE('',#14873,#12852,#14881,.T.); +#14881 = LINE('',#14882,#14883); +#14882 = CARTESIAN_POINT('',(116.15071124896,119.59145395728, + 74.636024233036)); +#14883 = VECTOR('',#14884,1.); +#14884 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14885 = PLANE('',#14886); +#14886 = AXIS2_PLACEMENT_3D('',#14887,#14888,#14889); +#14887 = CARTESIAN_POINT('',(116.13318114959,119.6061783036, + 74.590707354763)); +#14888 = DIRECTION('',(-0.938501407993,-0.106695968734,0.328376426455)); +#14889 = DIRECTION('',(-0.345275407748,0.290012884315,-0.892567879624)); +#14890 = ADVANCED_FACE('',(#14891),#14909,.T.); +#14891 = FACE_BOUND('',#14892,.T.); +#14892 = EDGE_LOOP('',(#14893,#14901,#14902,#14903)); +#14893 = ORIENTED_EDGE('',*,*,#14894,.T.); +#14894 = EDGE_CURVE('',#14895,#14865,#14897,.T.); +#14895 = VERTEX_POINT('',#14896); +#14896 = CARTESIAN_POINT('',(116.9484018704,119.43121054828, + 71.893134743773)); +#14897 = LINE('',#14898,#14899); +#14898 = CARTESIAN_POINT('',(115.20920714959,119.43121054828, + 71.893134743773)); +#14899 = VECTOR('',#14900,1.); +#14900 = DIRECTION('',(-1.,0.,0.)); +#14901 = ORIENTED_EDGE('',*,*,#14864,.T.); +#14902 = ORIENTED_EDGE('',*,*,#12843,.T.); +#14903 = ORIENTED_EDGE('',*,*,#14904,.T.); +#14904 = EDGE_CURVE('',#12835,#14895,#14905,.T.); +#14905 = LINE('',#14906,#14907); +#14906 = CARTESIAN_POINT('',(116.9484018704,120.38226706857, + 72.202151739444)); +#14907 = VECTOR('',#14908,1.); +#14908 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14909 = PLANE('',#14910); +#14910 = AXIS2_PLACEMENT_3D('',#14911,#14912,#14913); +#14911 = CARTESIAN_POINT('',(115.20920714959,120.38226706857, + 72.202151739444)); +#14912 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#14913 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14914 = ADVANCED_FACE('',(#14915),#14940,.T.); +#14915 = FACE_BOUND('',#14916,.T.); +#14916 = EDGE_LOOP('',(#14917,#14927,#14933,#14934)); +#14917 = ORIENTED_EDGE('',*,*,#14918,.T.); +#14918 = EDGE_CURVE('',#14919,#14921,#14923,.T.); +#14919 = VERTEX_POINT('',#14920); +#14920 = CARTESIAN_POINT('',(114.24568276285,120.66140353139, + 68.106990052123)); +#14921 = VERTEX_POINT('',#14922); +#14922 = CARTESIAN_POINT('',(117.12954789913,119.54769409262, + 71.534635257028)); +#14923 = LINE('',#14924,#14925); +#14924 = CARTESIAN_POINT('',(117.10367714959,119.55768502374, + 71.503886332783)); +#14925 = VECTOR('',#14926,1.); +#14926 = DIRECTION('',(0.624778740174,-0.241281040269,0.742586685467)); +#14927 = ORIENTED_EDGE('',*,*,#14928,.T.); +#14928 = EDGE_CURVE('',#14921,#12827,#14929,.T.); +#14929 = LINE('',#14930,#14931); +#14930 = CARTESIAN_POINT('',(117.12954789913,120.4987506129, + 71.843652252699)); +#14931 = VECTOR('',#14932,1.); +#14932 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14933 = ORIENTED_EDGE('',*,*,#12826,.T.); +#14934 = ORIENTED_EDGE('',*,*,#14935,.T.); +#14935 = EDGE_CURVE('',#12818,#14919,#14936,.T.); +#14936 = LINE('',#14937,#14938); +#14937 = CARTESIAN_POINT('',(114.24568276285,121.61246005167, + 68.416007047794)); +#14938 = VECTOR('',#14939,1.); +#14939 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14940 = PLANE('',#14941); +#14941 = AXIS2_PLACEMENT_3D('',#14942,#14943,#14944); +#14942 = CARTESIAN_POINT('',(117.10367714959,120.50874154402, + 71.812903328454)); +#14943 = DIRECTION('',(-0.780801847991,-0.193067248438,0.594199892085)); +#14944 = DIRECTION('',(-0.624778740174,0.241281040269,-0.742586685467)); +#14945 = ADVANCED_FACE('',(#14946),#14971,.T.); +#14946 = FACE_BOUND('',#14947,.T.); +#14947 = EDGE_LOOP('',(#14948,#14949,#14957,#14965)); +#14948 = ORIENTED_EDGE('',*,*,#12807,.T.); +#14949 = ORIENTED_EDGE('',*,*,#14950,.F.); +#14950 = EDGE_CURVE('',#14951,#12810,#14953,.T.); +#14951 = VERTEX_POINT('',#14952); +#14952 = CARTESIAN_POINT('',(114.79061914959,119.79910516863, + 70.760871527315)); +#14953 = LINE('',#14954,#14955); +#14954 = CARTESIAN_POINT('',(114.79061914959,120.75016168891, + 71.069888522986)); +#14955 = VECTOR('',#14956,1.); +#14956 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14957 = ORIENTED_EDGE('',*,*,#14958,.T.); +#14958 = EDGE_CURVE('',#14951,#14959,#14961,.T.); +#14959 = VERTEX_POINT('',#14960); +#14960 = CARTESIAN_POINT('',(113.84680442814,120.59185844764, + 68.32102781146)); +#14961 = LINE('',#14962,#14963); +#14962 = CARTESIAN_POINT('',(113.86664514959,120.57519331556, + 68.372317814109)); +#14963 = VECTOR('',#14964,1.); +#14964 = DIRECTION('',(-0.345275649927,0.290012856782,-0.892567794887)); +#14965 = ORIENTED_EDGE('',*,*,#14966,.T.); +#14966 = EDGE_CURVE('',#14959,#12808,#14967,.T.); +#14967 = LINE('',#14968,#14969); +#14968 = CARTESIAN_POINT('',(113.84680442814,121.54291496793, + 68.630044807131)); +#14969 = VECTOR('',#14970,1.); +#14970 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#14971 = PLANE('',#14972); +#14972 = AXIS2_PLACEMENT_3D('',#14973,#14974,#14975); +#14973 = CARTESIAN_POINT('',(113.86664514959,121.52624983585, + 68.68133480978)); +#14974 = DIRECTION('',(0.938501318895,0.106696043571,-0.328376656781)); +#14975 = DIRECTION('',(0.345275649927,-0.290012856782,0.892567794887)); +#14976 = ADVANCED_FACE('',(#14977),#14995,.T.); +#14977 = FACE_BOUND('',#14978,.T.); +#14978 = EDGE_LOOP('',(#14979,#14987,#14988,#14989)); +#14979 = ORIENTED_EDGE('',*,*,#14980,.T.); +#14980 = EDGE_CURVE('',#14981,#14951,#14983,.T.); +#14981 = VERTEX_POINT('',#14982); +#14982 = CARTESIAN_POINT('',(113.05159812031,119.79910516863, + 70.760871527315)); +#14983 = LINE('',#14984,#14985); +#14984 = CARTESIAN_POINT('',(114.79061914959,119.79910516863, + 70.760871527315)); +#14985 = VECTOR('',#14986,1.); +#14986 = DIRECTION('',(1.,0.,0.)); +#14987 = ORIENTED_EDGE('',*,*,#14950,.T.); +#14988 = ORIENTED_EDGE('',*,*,#12885,.T.); +#14989 = ORIENTED_EDGE('',*,*,#14990,.T.); +#14990 = EDGE_CURVE('',#12877,#14981,#14991,.T.); +#14991 = LINE('',#14992,#14993); +#14992 = CARTESIAN_POINT('',(113.05159812031,120.75016168891, + 71.069888522986)); +#14993 = VECTOR('',#14994,1.); +#14994 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#14995 = PLANE('',#14996); +#14996 = AXIS2_PLACEMENT_3D('',#14997,#14998,#14999); +#14997 = CARTESIAN_POINT('',(114.79061914959,120.75016168891, + 71.069888522986)); +#14998 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#14999 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15000 = ADVANCED_FACE('',(#15001),#15037,.F.); +#15001 = FACE_BOUND('',#15002,.T.); +#15002 = EDGE_LOOP('',(#15003,#15004,#15005,#15012,#15013,#15020,#15021, + #15022,#15029,#15030)); +#15003 = ORIENTED_EDGE('',*,*,#14958,.F.); +#15004 = ORIENTED_EDGE('',*,*,#14980,.F.); +#15005 = ORIENTED_EDGE('',*,*,#15006,.T.); +#15006 = EDGE_CURVE('',#14981,#14842,#15007,.T.); +#15007 = CIRCLE('',#15008,0.232); +#15008 = AXIS2_PLACEMENT_3D('',#15009,#15010,#15011); +#15009 = CARTESIAN_POINT('',(113.05159812031,119.72741322594, + 70.981516639095)); +#15010 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15011 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15012 = ORIENTED_EDGE('',*,*,#14841,.F.); +#15013 = ORIENTED_EDGE('',*,*,#15014,.T.); +#15014 = EDGE_CURVE('',#14834,#14873,#15015,.T.); +#15015 = CIRCLE('',#15016,0.232); +#15016 = AXIS2_PLACEMENT_3D('',#15017,#15018,#15019); +#15017 = CARTESIAN_POINT('',(115.93297892231,118.61564397225, + 74.403190568302)); +#15018 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15019 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15020 = ORIENTED_EDGE('',*,*,#14872,.F.); +#15021 = ORIENTED_EDGE('',*,*,#14894,.F.); +#15022 = ORIENTED_EDGE('',*,*,#15023,.T.); +#15023 = EDGE_CURVE('',#14895,#14921,#15024,.T.); +#15024 = CIRCLE('',#15025,0.232); +#15025 = AXIS2_PLACEMENT_3D('',#15026,#15027,#15028); +#15026 = CARTESIAN_POINT('',(116.9484018704,119.50290249098, + 71.672489631992)); +#15027 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15028 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15029 = ORIENTED_EDGE('',*,*,#14918,.F.); +#15030 = ORIENTED_EDGE('',*,*,#15031,.T.); +#15031 = EDGE_CURVE('',#14919,#14959,#15032,.T.); +#15032 = CIRCLE('',#15033,0.232); +#15033 = AXIS2_PLACEMENT_3D('',#15034,#15035,#15036); +#15034 = CARTESIAN_POINT('',(114.06453673412,120.61661192975, + 68.244844427086)); +#15035 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15036 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15037 = PLANE('',#15038); +#15038 = AXIS2_PLACEMENT_3D('',#15039,#15040,#15041); +#15039 = CARTESIAN_POINT('',(130.,126.52876248985,50.049115978955)); +#15040 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15041 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15042 = ADVANCED_FACE('',(#15043),#15049,.F.); +#15043 = FACE_BOUND('',#15044,.F.); +#15044 = EDGE_LOOP('',(#15045,#15046,#15047,#15048)); +#15045 = ORIENTED_EDGE('',*,*,#14935,.T.); +#15046 = ORIENTED_EDGE('',*,*,#15031,.T.); +#15047 = ORIENTED_EDGE('',*,*,#14966,.T.); +#15048 = ORIENTED_EDGE('',*,*,#12817,.F.); +#15049 = CYLINDRICAL_SURFACE('',#15050,0.232); +#15050 = AXIS2_PLACEMENT_3D('',#15051,#15052,#15053); +#15051 = CARTESIAN_POINT('',(114.06453673412,121.56766845003, + 68.553861422758)); +#15052 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15053 = DIRECTION('',(1.,0.,0.)); +#15054 = ADVANCED_FACE('',(#15055),#15061,.F.); +#15055 = FACE_BOUND('',#15056,.F.); +#15056 = EDGE_LOOP('',(#15057,#15058,#15059,#15060)); +#15057 = ORIENTED_EDGE('',*,*,#14990,.T.); +#15058 = ORIENTED_EDGE('',*,*,#15006,.T.); +#15059 = ORIENTED_EDGE('',*,*,#14849,.T.); +#15060 = ORIENTED_EDGE('',*,*,#12876,.F.); +#15061 = CYLINDRICAL_SURFACE('',#15062,0.232); +#15062 = AXIS2_PLACEMENT_3D('',#15063,#15064,#15065); +#15063 = CARTESIAN_POINT('',(113.05159812031,120.67846974622, + 71.290533634766)); +#15064 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15065 = DIRECTION('',(1.,0.,0.)); +#15066 = ADVANCED_FACE('',(#15067),#15073,.F.); +#15067 = FACE_BOUND('',#15068,.F.); +#15068 = EDGE_LOOP('',(#15069,#15070,#15071,#15072)); +#15069 = ORIENTED_EDGE('',*,*,#14904,.T.); +#15070 = ORIENTED_EDGE('',*,*,#15023,.T.); +#15071 = ORIENTED_EDGE('',*,*,#14928,.T.); +#15072 = ORIENTED_EDGE('',*,*,#12834,.F.); +#15073 = CYLINDRICAL_SURFACE('',#15074,0.232); +#15074 = AXIS2_PLACEMENT_3D('',#15075,#15076,#15077); +#15075 = CARTESIAN_POINT('',(116.9484018704,120.45395901126, + 71.981506627663)); +#15076 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15077 = DIRECTION('',(1.,0.,0.)); +#15078 = ADVANCED_FACE('',(#15079),#15085,.F.); +#15079 = FACE_BOUND('',#15080,.F.); +#15080 = EDGE_LOOP('',(#15081,#15082,#15083,#15084)); +#15081 = ORIENTED_EDGE('',*,*,#14833,.T.); +#15082 = ORIENTED_EDGE('',*,*,#15014,.T.); +#15083 = ORIENTED_EDGE('',*,*,#14880,.T.); +#15084 = ORIENTED_EDGE('',*,*,#12859,.F.); +#15085 = CYLINDRICAL_SURFACE('',#15086,0.232); +#15086 = AXIS2_PLACEMENT_3D('',#15087,#15088,#15089); +#15087 = CARTESIAN_POINT('',(115.93297892231,119.56670049253, + 74.712207563973)); +#15088 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15089 = DIRECTION('',(1.,0.,0.)); +#15090 = ADVANCED_FACE('',(#15091),#15116,.F.); +#15091 = FACE_BOUND('',#15092,.T.); +#15092 = EDGE_LOOP('',(#15093,#15101,#15109,#15115)); +#15093 = ORIENTED_EDGE('',*,*,#15094,.T.); +#15094 = EDGE_CURVE('',#12614,#15095,#15097,.T.); +#15095 = VERTEX_POINT('',#15096); +#15096 = CARTESIAN_POINT('',(119.94511065565,101.08444445286, + 129.00588831156)); +#15097 = LINE('',#15098,#15099); +#15098 = CARTESIAN_POINT('',(119.94511065565,101.17955010449, + 129.036790011)); +#15099 = VECTOR('',#15100,1.); +#15100 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15101 = ORIENTED_EDGE('',*,*,#15102,.F.); +#15102 = EDGE_CURVE('',#15103,#15095,#15105,.T.); +#15103 = VERTEX_POINT('',#15104); +#15104 = CARTESIAN_POINT('',(30.054889344345,101.08444445286, + 129.00588831156)); +#15105 = LINE('',#15106,#15107); +#15106 = CARTESIAN_POINT('',(75.,101.08444445286,129.00588831156)); +#15107 = VECTOR('',#15108,1.); +#15108 = DIRECTION('',(1.,0.,0.)); +#15109 = ORIENTED_EDGE('',*,*,#15110,.T.); +#15110 = EDGE_CURVE('',#15103,#12623,#15111,.T.); +#15111 = LINE('',#15112,#15113); +#15112 = CARTESIAN_POINT('',(30.054889344345,101.17955010449, + 129.036790011)); +#15113 = VECTOR('',#15114,1.); +#15114 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15115 = ORIENTED_EDGE('',*,*,#12622,.F.); +#15116 = PLANE('',#15117); +#15117 = AXIS2_PLACEMENT_3D('',#15118,#15119,#15120); +#15118 = CARTESIAN_POINT('',(75.,101.17955010449,129.036790011)); +#15119 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15120 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15121 = ADVANCED_FACE('',(#15122),#15147,.F.); +#15122 = FACE_BOUND('',#15123,.T.); +#15123 = EDGE_LOOP('',(#15124,#15132,#15140,#15146)); +#15124 = ORIENTED_EDGE('',*,*,#15125,.T.); +#15125 = EDGE_CURVE('',#12631,#15126,#15128,.T.); +#15126 = VERTEX_POINT('',#15127); +#15127 = CARTESIAN_POINT('',(28.054889344345,101.70247844161, + 127.10377527897)); +#15128 = LINE('',#15129,#15130); +#15129 = CARTESIAN_POINT('',(28.054889344345,101.79758409324, + 127.13467697841)); +#15130 = VECTOR('',#15131,1.); +#15131 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15132 = ORIENTED_EDGE('',*,*,#15133,.T.); +#15133 = EDGE_CURVE('',#15126,#15134,#15136,.T.); +#15134 = VERTEX_POINT('',#15135); +#15135 = CARTESIAN_POINT('',(28.054889344345,105.16198329285, + 116.45651415153)); +#15136 = LINE('',#15137,#15138); +#15137 = CARTESIAN_POINT('',(28.054889344345,126.71897379311, + 50.11091937783)); +#15138 = VECTOR('',#15139,1.); +#15139 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15140 = ORIENTED_EDGE('',*,*,#15141,.T.); +#15141 = EDGE_CURVE('',#15134,#12640,#15142,.T.); +#15142 = LINE('',#15143,#15144); +#15143 = CARTESIAN_POINT('',(28.054889344345,105.25708894448, + 116.48741585097)); +#15144 = VECTOR('',#15145,1.); +#15145 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15146 = ORIENTED_EDGE('',*,*,#12639,.F.); +#15147 = PLANE('',#15148); +#15148 = AXIS2_PLACEMENT_3D('',#15149,#15150,#15151); +#15149 = CARTESIAN_POINT('',(28.054889344345,105.25708894448, + 116.48741585097)); +#15150 = DIRECTION('',(-1.,0.,0.)); +#15151 = DIRECTION('',(0.,-0.15643446504,0.987688340595)); +#15152 = ADVANCED_FACE('',(#15153),#15178,.F.); +#15153 = FACE_BOUND('',#15154,.T.); +#15154 = EDGE_LOOP('',(#15155,#15163,#15171,#15177)); +#15155 = ORIENTED_EDGE('',*,*,#15156,.T.); +#15156 = EDGE_CURVE('',#12587,#15157,#15159,.T.); +#15157 = VERTEX_POINT('',#15158); +#15158 = CARTESIAN_POINT('',(30.054889344345,105.7800172816, + 114.55440111894)); +#15159 = LINE('',#15160,#15161); +#15160 = CARTESIAN_POINT('',(30.054889344345,105.87512293323, + 114.58530281838)); +#15161 = VECTOR('',#15162,1.); +#15162 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15163 = ORIENTED_EDGE('',*,*,#15164,.F.); +#15164 = EDGE_CURVE('',#15165,#15157,#15167,.T.); +#15165 = VERTEX_POINT('',#15166); +#15166 = CARTESIAN_POINT('',(119.94511065565,105.7800172816, + 114.55440111894)); +#15167 = LINE('',#15168,#15169); +#15168 = CARTESIAN_POINT('',(75.,105.7800172816,114.55440111894)); +#15169 = VECTOR('',#15170,1.); +#15170 = DIRECTION('',(-1.,0.,0.)); +#15171 = ORIENTED_EDGE('',*,*,#15172,.T.); +#15172 = EDGE_CURVE('',#15165,#12589,#15173,.T.); +#15173 = LINE('',#15174,#15175); +#15174 = CARTESIAN_POINT('',(119.94511065565,105.87512293323, + 114.58530281838)); +#15175 = VECTOR('',#15176,1.); +#15176 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15177 = ORIENTED_EDGE('',*,*,#12586,.F.); +#15178 = PLANE('',#15179); +#15179 = AXIS2_PLACEMENT_3D('',#15180,#15181,#15182); +#15180 = CARTESIAN_POINT('',(75.,105.87512293323,114.58530281838)); +#15181 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15182 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15183 = ADVANCED_FACE('',(#15184),#15209,.F.); +#15184 = FACE_BOUND('',#15185,.T.); +#15185 = EDGE_LOOP('',(#15186,#15194,#15202,#15208)); +#15186 = ORIENTED_EDGE('',*,*,#15187,.T.); +#15187 = EDGE_CURVE('',#12597,#15188,#15190,.T.); +#15188 = VERTEX_POINT('',#15189); +#15189 = CARTESIAN_POINT('',(121.94511065565,105.16198329285, + 116.45651415153)); +#15190 = LINE('',#15191,#15192); +#15191 = CARTESIAN_POINT('',(121.94511065565,105.25708894448, + 116.48741585097)); +#15192 = VECTOR('',#15193,1.); +#15193 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15194 = ORIENTED_EDGE('',*,*,#15195,.F.); +#15195 = EDGE_CURVE('',#15196,#15188,#15198,.T.); +#15196 = VERTEX_POINT('',#15197); +#15197 = CARTESIAN_POINT('',(121.94511065565,101.70247844161, + 127.10377527897)); +#15198 = LINE('',#15199,#15200); +#15199 = CARTESIAN_POINT('',(121.94511065565,105.16198329285, + 116.45651415153)); +#15200 = VECTOR('',#15201,1.); +#15201 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15202 = ORIENTED_EDGE('',*,*,#15203,.T.); +#15203 = EDGE_CURVE('',#15196,#12606,#15204,.T.); +#15204 = LINE('',#15205,#15206); +#15205 = CARTESIAN_POINT('',(121.94511065565,101.79758409324, + 127.13467697841)); +#15206 = VECTOR('',#15207,1.); +#15207 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15208 = ORIENTED_EDGE('',*,*,#12605,.F.); +#15209 = PLANE('',#15210); +#15210 = AXIS2_PLACEMENT_3D('',#15211,#15212,#15213); +#15211 = CARTESIAN_POINT('',(121.94511065565,105.25708894448, + 116.48741585097)); +#15212 = DIRECTION('',(1.,0.,0.)); +#15213 = DIRECTION('',(0.,0.15643446504,-0.987688340595)); +#15214 = ADVANCED_FACE('',(#15215),#15227,.F.); +#15215 = FACE_BOUND('',#15216,.F.); +#15216 = EDGE_LOOP('',(#15217,#15218,#15219,#15226)); +#15217 = ORIENTED_EDGE('',*,*,#12596,.T.); +#15218 = ORIENTED_EDGE('',*,*,#15187,.T.); +#15219 = ORIENTED_EDGE('',*,*,#15220,.T.); +#15220 = EDGE_CURVE('',#15188,#15165,#15221,.T.); +#15221 = CIRCLE('',#15222,2.); +#15222 = AXIS2_PLACEMENT_3D('',#15223,#15224,#15225); +#15223 = CARTESIAN_POINT('',(119.94511065565,105.16198329285, + 116.45651415153)); +#15224 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15225 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15226 = ORIENTED_EDGE('',*,*,#15172,.T.); +#15227 = CYLINDRICAL_SURFACE('',#15228,2.); +#15228 = AXIS2_PLACEMENT_3D('',#15229,#15230,#15231); +#15229 = CARTESIAN_POINT('',(119.94511065565,105.25708894448, + 116.48741585097)); +#15230 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15231 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15232 = ADVANCED_FACE('',(#15233),#15245,.F.); +#15233 = FACE_BOUND('',#15234,.F.); +#15234 = EDGE_LOOP('',(#15235,#15236,#15237,#15244)); +#15235 = ORIENTED_EDGE('',*,*,#12613,.T.); +#15236 = ORIENTED_EDGE('',*,*,#15094,.T.); +#15237 = ORIENTED_EDGE('',*,*,#15238,.T.); +#15238 = EDGE_CURVE('',#15095,#15196,#15239,.T.); +#15239 = CIRCLE('',#15240,2.); +#15240 = AXIS2_PLACEMENT_3D('',#15241,#15242,#15243); +#15241 = CARTESIAN_POINT('',(119.94511065565,101.70247844161, + 127.10377527897)); +#15242 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15243 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15244 = ORIENTED_EDGE('',*,*,#15203,.T.); +#15245 = CYLINDRICAL_SURFACE('',#15246,2.); +#15246 = AXIS2_PLACEMENT_3D('',#15247,#15248,#15249); +#15247 = CARTESIAN_POINT('',(119.94511065565,101.79758409324, + 127.13467697841)); +#15248 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15249 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15250 = ADVANCED_FACE('',(#15251),#15263,.F.); +#15251 = FACE_BOUND('',#15252,.F.); +#15252 = EDGE_LOOP('',(#15253,#15254,#15255,#15262)); +#15253 = ORIENTED_EDGE('',*,*,#12647,.T.); +#15254 = ORIENTED_EDGE('',*,*,#15156,.T.); +#15255 = ORIENTED_EDGE('',*,*,#15256,.T.); +#15256 = EDGE_CURVE('',#15157,#15134,#15257,.T.); +#15257 = CIRCLE('',#15258,2.); +#15258 = AXIS2_PLACEMENT_3D('',#15259,#15260,#15261); +#15259 = CARTESIAN_POINT('',(30.054889344345,105.16198329285, + 116.45651415153)); +#15260 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15261 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15262 = ORIENTED_EDGE('',*,*,#15141,.T.); +#15263 = CYLINDRICAL_SURFACE('',#15264,2.); +#15264 = AXIS2_PLACEMENT_3D('',#15265,#15266,#15267); +#15265 = CARTESIAN_POINT('',(30.054889344345,105.25708894448, + 116.48741585097)); +#15266 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#15267 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15268 = ADVANCED_FACE('',(#15269),#15281,.F.); +#15269 = FACE_BOUND('',#15270,.F.); +#15270 = EDGE_LOOP('',(#15271,#15272,#15273,#15280)); +#15271 = ORIENTED_EDGE('',*,*,#12630,.T.); +#15272 = ORIENTED_EDGE('',*,*,#15125,.T.); +#15273 = ORIENTED_EDGE('',*,*,#15274,.T.); +#15274 = EDGE_CURVE('',#15126,#15103,#15275,.T.); +#15275 = CIRCLE('',#15276,2.); +#15276 = AXIS2_PLACEMENT_3D('',#15277,#15278,#15279); +#15277 = CARTESIAN_POINT('',(30.054889344345,101.70247844161, + 127.10377527897)); +#15278 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15279 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15280 = ORIENTED_EDGE('',*,*,#15110,.T.); +#15281 = CYLINDRICAL_SURFACE('',#15282,2.); +#15282 = AXIS2_PLACEMENT_3D('',#15283,#15284,#15285); +#15283 = CARTESIAN_POINT('',(30.054889344345,101.79758409324, + 127.13467697841)); +#15284 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15285 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15286 = ADVANCED_FACE('',(#15287,#15298,#15309,#15320,#15331,#15342, + #15353,#15364,#15614,#15712,#15858,#16164,#16358,#16552,#16832, + #17026,#17306,#17652,#17798),#17808,.F.); +#15287 = FACE_BOUND('',#15288,.T.); +#15288 = EDGE_LOOP('',(#15289)); +#15289 = ORIENTED_EDGE('',*,*,#15290,.F.); +#15290 = EDGE_CURVE('',#15291,#15291,#15293,.T.); +#15291 = VERTEX_POINT('',#15292); +#15292 = CARTESIAN_POINT('',(116.27676915565,104.95843306718, + 117.08297733006)); +#15293 = CIRCLE('',#15294,1.6453795); +#15294 = AXIS2_PLACEMENT_3D('',#15295,#15296,#15297); +#15295 = CARTESIAN_POINT('',(116.27676915565,104.44998283948, + 118.64782622531)); +#15296 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15297 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15298 = FACE_BOUND('',#15299,.T.); +#15299 = EDGE_LOOP('',(#15300)); +#15300 = ORIENTED_EDGE('',*,*,#15301,.F.); +#15301 = EDGE_CURVE('',#15302,#15302,#15304,.T.); +#15302 = VERTEX_POINT('',#15303); +#15303 = CARTESIAN_POINT('',(116.7050222451,103.46253819493, + 121.68686835173)); +#15304 = CIRCLE('',#15305,1.648836406839); +#15305 = AXIS2_PLACEMENT_3D('',#15306,#15307,#15308); +#15306 = CARTESIAN_POINT('',(118.29767591379,103.33066511089, + 122.09273197147)); +#15307 = DIRECTION('',(-8.326672684689E-17,0.951056516295,0.309016994375 + )); +#15308 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#15309 = FACE_BOUND('',#15310,.T.); +#15310 = EDGE_LOOP('',(#15311)); +#15311 = ORIENTED_EDGE('',*,*,#15312,.F.); +#15312 = EDGE_CURVE('',#15313,#15313,#15315,.T.); +#15313 = VERTEX_POINT('',#15314); +#15314 = CARTESIAN_POINT('',(114.25656315565,103.8401835356, + 120.52459550386)); +#15315 = CIRCLE('',#15316,1.6481355); +#15316 = AXIS2_PLACEMENT_3D('',#15317,#15318,#15319); +#15317 = CARTESIAN_POINT('',(114.25656315565,103.33088165707, + 122.09206551087)); +#15318 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15319 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15320 = FACE_BOUND('',#15321,.T.); +#15321 = EDGE_LOOP('',(#15322)); +#15322 = ORIENTED_EDGE('',*,*,#15323,.F.); +#15323 = EDGE_CURVE('',#15324,#15324,#15326,.T.); +#15324 = VERTEX_POINT('',#15325); +#15325 = CARTESIAN_POINT('',(112.23635715565,104.95843306718, + 117.08297733006)); +#15326 = CIRCLE('',#15327,1.6453795); +#15327 = AXIS2_PLACEMENT_3D('',#15328,#15329,#15330); +#15328 = CARTESIAN_POINT('',(112.23635715565,104.44998283948, + 118.64782622531)); +#15329 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15330 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15331 = FACE_BOUND('',#15332,.T.); +#15332 = EDGE_LOOP('',(#15333)); +#15333 = ORIENTED_EDGE('',*,*,#15334,.F.); +#15334 = EDGE_CURVE('',#15335,#15335,#15337,.T.); +#15335 = VERTEX_POINT('',#15336); +#15336 = CARTESIAN_POINT('',(110.21615115565,103.8401835356, + 120.52459550386)); +#15337 = CIRCLE('',#15338,1.6481355); +#15338 = AXIS2_PLACEMENT_3D('',#15339,#15340,#15341); +#15339 = CARTESIAN_POINT('',(110.21615115565,103.33088165707, + 122.09206551087)); +#15340 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15341 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15342 = FACE_BOUND('',#15343,.T.); +#15343 = EDGE_LOOP('',(#15344)); +#15344 = ORIENTED_EDGE('',*,*,#15345,.F.); +#15345 = EDGE_CURVE('',#15346,#15346,#15348,.T.); +#15346 = VERTEX_POINT('',#15347); +#15347 = CARTESIAN_POINT('',(112.23645670428,102.71960995615, + 123.97336636153)); +#15348 = CIRCLE('',#15349,1.645754600653); +#15349 = AXIS2_PLACEMENT_3D('',#15350,#15351,#15352); +#15350 = CARTESIAN_POINT('',(112.23645670428,102.21104381598, + 125.5385719987)); +#15351 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#15352 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15353 = FACE_BOUND('',#15354,.T.); +#15354 = EDGE_LOOP('',(#15355)); +#15355 = ORIENTED_EDGE('',*,*,#15356,.F.); +#15356 = EDGE_CURVE('',#15357,#15357,#15359,.T.); +#15357 = VERTEX_POINT('',#15358); +#15358 = CARTESIAN_POINT('',(114.68682887409,102.34257708271, + 125.13375422909)); +#15359 = CIRCLE('',#15360,1.6460273035); +#15360 = AXIS2_PLACEMENT_3D('',#15361,#15362,#15363); +#15361 = CARTESIAN_POINT('',(116.27676915732,102.21092866931, + 125.53892638371)); +#15362 = DIRECTION('',(-8.326672684689E-17,0.951056516295,0.309016994375 + )); +#15363 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#15364 = FACE_BOUND('',#15365,.T.); +#15365 = EDGE_LOOP('',(#15366,#15376,#15384,#15392,#15400,#15408,#15416, + #15424,#15432,#15440,#15448,#15456,#15464,#15472,#15480,#15488, + #15496,#15504,#15512,#15520,#15528,#15536,#15544,#15552,#15560, + #15568,#15576,#15584,#15592,#15600,#15608)); +#15366 = ORIENTED_EDGE('',*,*,#15367,.F.); +#15367 = EDGE_CURVE('',#15368,#15370,#15372,.T.); +#15368 = VERTEX_POINT('',#15369); +#15369 = CARTESIAN_POINT('',(96.789910655655,103.87978869868, + 120.40270334545)); +#15370 = VERTEX_POINT('',#15371); +#15371 = CARTESIAN_POINT('',(96.858423750231,104.03663224472, + 119.91998854591)); +#15372 = LINE('',#15373,#15374); +#15373 = CARTESIAN_POINT('',(96.858423750231,104.03663224472, + 119.91998854591)); +#15374 = VECTOR('',#15375,1.); +#15375 = DIRECTION('',(0.133772922022,0.306239552933,-0.942508430494)); +#15376 = ORIENTED_EDGE('',*,*,#15377,.F.); +#15377 = EDGE_CURVE('',#15378,#15368,#15380,.T.); +#15378 = VERTEX_POINT('',#15379); +#15379 = CARTESIAN_POINT('',(96.587339655655,103.74990823791, + 120.80243430136)); +#15380 = LINE('',#15381,#15382); +#15381 = CARTESIAN_POINT('',(96.789910655655,103.87978869868, + 120.40270334545)); +#15382 = VECTOR('',#15383,1.); +#15383 = DIRECTION('',(0.43416943666,0.278372158332,-0.856741408907)); +#15384 = ORIENTED_EDGE('',*,*,#15385,.F.); +#15385 = EDGE_CURVE('',#15386,#15378,#15388,.T.); +#15386 = VERTEX_POINT('',#15387); +#15387 = CARTESIAN_POINT('',(95.804612655655,103.5625398006, + 121.37909505628)); +#15388 = LINE('',#15389,#15390); +#15389 = CARTESIAN_POINT('',(96.587339655655,103.74990823791, + 120.80243430136)); +#15390 = VECTOR('',#15391,1.); +#15391 = DIRECTION('',(0.790550211724,0.189241150225,-0.582424372605)); +#15392 = ORIENTED_EDGE('',*,*,#15393,.F.); +#15393 = EDGE_CURVE('',#15394,#15386,#15396,.T.); +#15394 = VERTEX_POINT('',#15395); +#15395 = CARTESIAN_POINT('',(94.558864655655,103.47907554648, + 121.63597161711)); +#15396 = LINE('',#15397,#15398); +#15397 = CARTESIAN_POINT('',(95.804612655655,103.5625398006, + 121.37909505628)); +#15398 = VECTOR('',#15399,1.); +#15399 = DIRECTION('',(0.977293267984,6.547797280157E-02,-0.201520478939 + )); +#15400 = ORIENTED_EDGE('',*,*,#15401,.F.); +#15401 = EDGE_CURVE('',#15402,#15394,#15404,.T.); +#15402 = VERTEX_POINT('',#15403); +#15403 = CARTESIAN_POINT('',(93.098142655655,103.4509988064, + 121.72238293783)); +#15404 = LINE('',#15405,#15406); +#15405 = CARTESIAN_POINT('',(94.558864655655,103.47907554648, + 121.63597161711)); +#15406 = VECTOR('',#15407,1.); +#15407 = DIRECTION('',(0.998071118583,1.918406334541E-02, + -5.904247593431E-02)); +#15408 = ORIENTED_EDGE('',*,*,#15409,.F.); +#15409 = EDGE_CURVE('',#15410,#15402,#15412,.T.); +#15410 = VERTEX_POINT('',#15411); +#15411 = CARTESIAN_POINT('',(93.098142655655,103.33940233716, + 122.06584155402)); +#15412 = LINE('',#15413,#15414); +#15413 = CARTESIAN_POINT('',(93.098142655655,103.4509988064, + 121.72238293783)); +#15414 = VECTOR('',#15415,1.); +#15415 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15416 = ORIENTED_EDGE('',*,*,#15417,.F.); +#15417 = EDGE_CURVE('',#15418,#15410,#15420,.T.); +#15418 = VERTEX_POINT('',#15419); +#15419 = CARTESIAN_POINT('',(93.346190655655,103.14862698748, + 122.65298770703)); +#15420 = LINE('',#15421,#15422); +#15421 = CARTESIAN_POINT('',(93.098142655655,103.33940233716, + 122.06584155402)); +#15422 = VECTOR('',#15423,1.); +#15423 = DIRECTION('',(-0.372819654514,0.286738050531,-0.8824889776)); +#15424 = ORIENTED_EDGE('',*,*,#15425,.F.); +#15425 = EDGE_CURVE('',#15426,#15418,#15428,.T.); +#15426 = VERTEX_POINT('',#15427); +#15427 = CARTESIAN_POINT('',(94.068282655655,103.07708646311, + 122.87316680112)); +#15428 = LINE('',#15429,#15430); +#15429 = CARTESIAN_POINT('',(93.346190655655,103.14862698748, + 122.65298770703)); +#15430 = VECTOR('',#15431,1.); +#15431 = DIRECTION('',(-0.952255355122,9.43437227354E-02,-0.290360122299 + )); +#15432 = ORIENTED_EDGE('',*,*,#15433,.F.); +#15433 = EDGE_CURVE('',#15434,#15426,#15436,.T.); +#15434 = VERTEX_POINT('',#15435); +#15435 = CARTESIAN_POINT('',(94.784863655655,103.13500026508, + 122.69492644623)); +#15436 = LINE('',#15437,#15438); +#15437 = CARTESIAN_POINT('',(94.068282655655,103.07708646311, + 122.87316680112)); +#15438 = VECTOR('',#15439,1.); +#15439 = DIRECTION('',(-0.967459185387,-7.818968082252E-02, + 0.240643093444)); +#15440 = ORIENTED_EDGE('',*,*,#15441,.F.); +#15441 = EDGE_CURVE('',#15442,#15434,#15444,.T.); +#15442 = VERTEX_POINT('',#15443); +#15443 = CARTESIAN_POINT('',(95.110080655655,103.28148853519, + 122.24408190891)); +#15444 = LINE('',#15445,#15446); +#15445 = CARTESIAN_POINT('',(94.784863655655,103.13500026508, + 122.69492644623)); +#15446 = VECTOR('',#15447,1.); +#15447 = DIRECTION('',(-0.565713963222,-0.254815891705,0.78424267491)); +#15448 = ORIENTED_EDGE('',*,*,#15449,.F.); +#15449 = EDGE_CURVE('',#15450,#15442,#15452,.T.); +#15450 = VERTEX_POINT('',#15451); +#15451 = CARTESIAN_POINT('',(95.121100655655,103.29681886829, + 122.19689999513)); +#15452 = LINE('',#15453,#15454); +#15453 = CARTESIAN_POINT('',(95.110080655655,103.28148853519, + 122.24408190891)); +#15454 = VECTOR('',#15455,1.); +#15455 = DIRECTION('',(-0.216847116618,-0.301664113209,0.928426674981)); +#15456 = ORIENTED_EDGE('',*,*,#15457,.F.); +#15457 = EDGE_CURVE('',#15458,#15450,#15460,.T.); +#15458 = VERTEX_POINT('',#15459); +#15459 = CARTESIAN_POINT('',(96.592846655655,103.29681886829, + 122.19689999513)); +#15460 = LINE('',#15461,#15462); +#15461 = CARTESIAN_POINT('',(95.121100655655,103.29681886829, + 122.19689999513)); +#15462 = VECTOR('',#15463,1.); +#15463 = DIRECTION('',(-1.,0.,0.)); +#15464 = ORIENTED_EDGE('',*,*,#15465,.F.); +#15465 = EDGE_CURVE('',#15466,#15458,#15468,.T.); +#15466 = VERTEX_POINT('',#15467); +#15467 = CARTESIAN_POINT('',(96.587346655655,103.27637739411, + 122.25981238369)); +#15468 = LINE('',#15469,#15470); +#15469 = CARTESIAN_POINT('',(96.592846655655,103.29681886829, + 122.19689999513)); +#15470 = VECTOR('',#15471,1.); +#15471 = DIRECTION('',(8.285846242604E-02,0.307954385473,-0.947786142372 + )); +#15472 = ORIENTED_EDGE('',*,*,#15473,.F.); +#15473 = EDGE_CURVE('',#15474,#15466,#15476,.T.); +#15474 = VERTEX_POINT('',#15475); +#15475 = CARTESIAN_POINT('',(96.229055655655,102.97658764718, + 123.18247035241)); +#15476 = LINE('',#15477,#15478); +#15477 = CARTESIAN_POINT('',(96.587346655655,103.27637739411, + 122.25981238369)); +#15478 = VECTOR('',#15479,1.); +#15479 = DIRECTION('',(0.346446803812,0.289879454513,-0.892157224921)); +#15480 = ORIENTED_EDGE('',*,*,#15481,.F.); +#15481 = EDGE_CURVE('',#15482,#15474,#15484,.T.); +#15482 = VERTEX_POINT('',#15483); +#15483 = CARTESIAN_POINT('',(95.347110655655,102.7721855751, + 123.81155524462)); +#15484 = LINE('',#15485,#15486); +#15485 = CARTESIAN_POINT('',(96.229055655655,102.97658764718, + 123.18247035241)); +#15486 = VECTOR('',#15487,1.); +#15487 = DIRECTION('',(0.79999989115,0.185410241474,-0.570634047807)); +#15488 = ORIENTED_EDGE('',*,*,#15489,.F.); +#15489 = EDGE_CURVE('',#15490,#15482,#15492,.T.); +#15490 = VERTEX_POINT('',#15491); +#15491 = CARTESIAN_POINT('',(94.002143655655,102.69723813837, + 124.0422197368)); +#15492 = LINE('',#15493,#15494); +#15493 = CARTESIAN_POINT('',(95.347110655655,102.7721855751, + 123.81155524462)); +#15494 = VECTOR('',#15495,1.); +#15495 = DIRECTION('',(0.984127021635,5.483985680615E-02,-0.168779724473 + )); +#15496 = ORIENTED_EDGE('',*,*,#15497,.F.); +#15497 = EDGE_CURVE('',#15498,#15490,#15500,.T.); +#15498 = VERTEX_POINT('',#15499); +#15499 = CARTESIAN_POINT('',(92.673713655655,102.77388918579, + 123.80631207004)); +#15500 = LINE('',#15501,#15502); +#15501 = CARTESIAN_POINT('',(94.002143655655,102.69723813837, + 124.0422197368)); +#15502 = VECTOR('',#15503,1.); +#15503 = DIRECTION('',(0.98301031653,-5.672016620178E-02,0.174566721745) + ); +#15504 = ORIENTED_EDGE('',*,*,#15505,.F.); +#15505 = EDGE_CURVE('',#15506,#15498,#15508,.T.); +#15506 = VERTEX_POINT('',#15507); +#15507 = CARTESIAN_POINT('',(92.174863655655,102.86459247202, + 123.52715605927)); +#15508 = LINE('',#15509,#15510); +#15509 = CARTESIAN_POINT('',(92.673713655655,102.77388918579, + 123.80631207004)); +#15510 = VECTOR('',#15511,1.); +#15511 = DIRECTION('',(0.86187318353,-0.156709892861,0.48230345737)); +#15512 = ORIENTED_EDGE('',*,*,#15513,.F.); +#15513 = EDGE_CURVE('',#15514,#15506,#15516,.T.); +#15514 = VERTEX_POINT('',#15515); +#15515 = CARTESIAN_POINT('',(91.802792655655,102.98680776624, + 123.15101606024)); +#15516 = LINE('',#15517,#15518); +#15517 = CARTESIAN_POINT('',(92.174863655655,102.86459247202, + 123.52715605927)); +#15518 = VECTOR('',#15519,1.); +#15519 = DIRECTION('',(0.685206997808,-0.225072028838,0.692700477833)); +#15520 = ORIENTED_EDGE('',*,*,#15521,.F.); +#15521 = EDGE_CURVE('',#15522,#15514,#15524,.T.); +#15522 = VERTEX_POINT('',#15523); +#15523 = CARTESIAN_POINT('',(91.567147655655,103.13627681428, + 122.69099763176)); +#15524 = LINE('',#15525,#15526); +#15525 = CARTESIAN_POINT('',(91.802792655655,102.98680776624, + 123.15101606024)); +#15526 = VECTOR('',#15527,1.); +#15527 = DIRECTION('',(0.437969692885,-0.277803106653,0.854990047923)); +#15528 = ORIENTED_EDGE('',*,*,#15529,.F.); +#15529 = EDGE_CURVE('',#15530,#15522,#15532,.T.); +#15530 = VERTEX_POINT('',#15531); +#15531 = CARTESIAN_POINT('',(91.488599655655,103.30874105295, + 122.16020728368)); +#15532 = LINE('',#15533,#15534); +#15533 = CARTESIAN_POINT('',(91.567147655655,103.13627681428, + 122.69099763176)); +#15534 = VECTOR('',#15535,1.); +#15535 = DIRECTION('',(0.139366780994,-0.306001244831,0.941774993572)); +#15536 = ORIENTED_EDGE('',*,*,#15537,.F.); +#15537 = EDGE_CURVE('',#15538,#15530,#15540,.T.); +#15538 = VERTEX_POINT('',#15539); +#15539 = CARTESIAN_POINT('',(91.488599655655,104.56070393758, + 118.30706172447)); +#15540 = LINE('',#15541,#15542); +#15541 = CARTESIAN_POINT('',(91.488599655655,103.30874105295, + 122.16020728368)); +#15542 = VECTOR('',#15543,1.); +#15543 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15544 = ORIENTED_EDGE('',*,*,#15545,.F.); +#15545 = EDGE_CURVE('',#15546,#15538,#15548,.T.); +#15546 = VERTEX_POINT('',#15547); +#15547 = CARTESIAN_POINT('',(93.098149655655,104.56070393758, + 118.30706172447)); +#15548 = LINE('',#15549,#15550); +#15549 = CARTESIAN_POINT('',(91.488599655655,104.56070393758, + 118.30706172447)); +#15550 = VECTOR('',#15551,1.); +#15551 = DIRECTION('',(-1.,0.,0.)); +#15552 = ORIENTED_EDGE('',*,*,#15553,.F.); +#15553 = EDGE_CURVE('',#15554,#15546,#15556,.T.); +#15554 = VERTEX_POINT('',#15555); +#15555 = CARTESIAN_POINT('',(93.098149655655,104.28816763546, + 119.14584221479)); +#15556 = LINE('',#15557,#15558); +#15557 = CARTESIAN_POINT('',(93.098149655655,104.56070393758, + 118.30706172447)); +#15558 = VECTOR('',#15559,1.); +#15559 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15560 = ORIENTED_EDGE('',*,*,#15561,.F.); +#15561 = EDGE_CURVE('',#15562,#15554,#15564,.T.); +#15562 = VERTEX_POINT('',#15563); +#15563 = CARTESIAN_POINT('',(93.131219655655,104.28816763546, + 119.14584221479)); +#15564 = LINE('',#15565,#15566); +#15565 = CARTESIAN_POINT('',(93.098149655655,104.28816763546, + 119.14584221479)); +#15566 = VECTOR('',#15567,1.); +#15567 = DIRECTION('',(-1.,0.,0.)); +#15568 = ORIENTED_EDGE('',*,*,#15569,.F.); +#15569 = EDGE_CURVE('',#15570,#15562,#15572,.T.); +#15570 = VERTEX_POINT('',#15571); +#15571 = CARTESIAN_POINT('',(93.561168655655,104.44998592965, + 118.64781671475)); +#15572 = LINE('',#15573,#15574); +#15573 = CARTESIAN_POINT('',(93.131219655655,104.28816763546, + 119.14584221479)); +#15574 = VECTOR('',#15575,1.); +#15575 = DIRECTION('',(-0.634566520163,-0.238829423589,0.735041385172)); +#15576 = ORIENTED_EDGE('',*,*,#15577,.F.); +#15577 = EDGE_CURVE('',#15578,#15570,#15580,.T.); +#15578 = VERTEX_POINT('',#15579); +#15579 = CARTESIAN_POINT('',(94.150969655655,104.55389042188, + 118.3280315696)); +#15580 = LINE('',#15581,#15582); +#15581 = CARTESIAN_POINT('',(93.561168655655,104.44998592965, + 118.64781671475)); +#15582 = VECTOR('',#15583,1.); +#15583 = DIRECTION('',(-0.868742142547,-0.153045198624,0.471024688249)); +#15584 = ORIENTED_EDGE('',*,*,#15585,.F.); +#15585 = EDGE_CURVE('',#15586,#15578,#15588,.T.); +#15586 = VERTEX_POINT('',#15587); +#15587 = CARTESIAN_POINT('',(94.873060023222,104.58965992739, + 118.21794435136)); +#15588 = LINE('',#15589,#15590); +#15589 = CARTESIAN_POINT('',(94.150969655655,104.55389042188, + 118.3280315696)); +#15590 = VECTOR('',#15591,1.); +#15591 = DIRECTION('',(-0.9873940646,-4.891160306285E-02,0.150534435523) + ); +#15592 = ORIENTED_EDGE('',*,*,#15593,.F.); +#15593 = EDGE_CURVE('',#15594,#15586,#15596,.T.); +#15594 = VERTEX_POINT('',#15595); +#15595 = CARTESIAN_POINT('',(95.909343655655,104.51982160726, + 118.43288459946)); +#15596 = LINE('',#15597,#15598); +#15597 = CARTESIAN_POINT('',(94.873060023222,104.58965992739, + 118.21794435136)); +#15598 = VECTOR('',#15599,1.); +#15599 = DIRECTION('',(-0.977034744709,6.58453565571E-02,-0.202651169875 + )); +#15600 = ORIENTED_EDGE('',*,*,#15601,.F.); +#15601 = EDGE_CURVE('',#15602,#15594,#15604,.T.); +#15602 = VERTEX_POINT('',#15603); +#15603 = CARTESIAN_POINT('',(96.609387655655,104.32393635256, + 119.03575742303)); +#15604 = LINE('',#15605,#15606); +#15605 = CARTESIAN_POINT('',(95.909343655655,104.51982160726, + 118.43288459946)); +#15606 = VECTOR('',#15607,1.); +#15607 = DIRECTION('',(-0.741259222981,0.207418036141,-0.638367075145)); +#15608 = ORIENTED_EDGE('',*,*,#15609,.F.); +#15609 = EDGE_CURVE('',#15370,#15602,#15610,.T.); +#15610 = LINE('',#15611,#15612); +#15611 = CARTESIAN_POINT('',(96.609387655655,104.32393635256, + 119.03575742303)); +#15612 = VECTOR('',#15613,1.); +#15613 = DIRECTION('',(-0.258735859288,0.298494382299,-0.918671246341)); +#15614 = FACE_BOUND('',#15615,.T.); +#15615 = EDGE_LOOP('',(#15616,#15626,#15634,#15642,#15650,#15658,#15666, + #15674,#15682,#15690,#15698,#15706)); +#15616 = ORIENTED_EDGE('',*,*,#15617,.F.); +#15617 = EDGE_CURVE('',#15618,#15620,#15622,.T.); +#15618 = VERTEX_POINT('',#15619); +#15619 = CARTESIAN_POINT('',(104.60477365565,102.10276576839, + 125.87181756319)); +#15620 = VERTEX_POINT('',#15621); +#15621 = CARTESIAN_POINT('',(104.60477365565,104.56070084741, + 118.30707123503)); +#15622 = LINE('',#15623,#15624); +#15623 = CARTESIAN_POINT('',(104.60477365565,104.56070084741, + 118.30707123503)); +#15624 = VECTOR('',#15625,1.); +#15625 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15626 = ORIENTED_EDGE('',*,*,#15627,.F.); +#15627 = EDGE_CURVE('',#15628,#15618,#15630,.T.); +#15628 = VERTEX_POINT('',#15629); +#15629 = CARTESIAN_POINT('',(102.94010165565,102.10276576839, + 125.87181756319)); +#15630 = LINE('',#15631,#15632); +#15631 = CARTESIAN_POINT('',(104.60477365565,102.10276576839, + 125.87181756319)); +#15632 = VECTOR('',#15633,1.); +#15633 = DIRECTION('',(1.,0.,0.)); +#15634 = ORIENTED_EDGE('',*,*,#15635,.F.); +#15635 = EDGE_CURVE('',#15636,#15628,#15638,.T.); +#15636 = VERTEX_POINT('',#15637); +#15637 = CARTESIAN_POINT('',(102.94010165565,103.10092928735, + 122.79978613349)); +#15638 = LINE('',#15639,#15640); +#15639 = CARTESIAN_POINT('',(102.94010165565,102.10276576839, + 125.87181756319)); +#15640 = VECTOR('',#15641,1.); +#15641 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15642 = ORIENTED_EDGE('',*,*,#15643,.F.); +#15643 = EDGE_CURVE('',#15644,#15636,#15646,.T.); +#15644 = VERTEX_POINT('',#15645); +#15645 = CARTESIAN_POINT('',(99.357198655655,103.10092928735, + 122.79978613349)); +#15646 = LINE('',#15647,#15648); +#15647 = CARTESIAN_POINT('',(102.94010165565,103.10092928735, + 122.79978613349)); +#15648 = VECTOR('',#15649,1.); +#15649 = DIRECTION('',(1.,0.,0.)); +#15650 = ORIENTED_EDGE('',*,*,#15651,.F.); +#15651 = EDGE_CURVE('',#15652,#15644,#15654,.T.); +#15652 = VERTEX_POINT('',#15653); +#15653 = CARTESIAN_POINT('',(99.357198655655,102.10276576839, + 125.87181756319)); +#15654 = LINE('',#15655,#15656); +#15655 = CARTESIAN_POINT('',(99.357198655655,103.10092928735, + 122.79978613349)); +#15656 = VECTOR('',#15657,1.); +#15657 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15658 = ORIENTED_EDGE('',*,*,#15659,.F.); +#15659 = EDGE_CURVE('',#15660,#15652,#15662,.T.); +#15660 = VERTEX_POINT('',#15661); +#15661 = CARTESIAN_POINT('',(97.692527655655,102.10276576839, + 125.87181756319)); +#15662 = LINE('',#15663,#15664); +#15663 = CARTESIAN_POINT('',(99.357198655655,102.10276576839, + 125.87181756319)); +#15664 = VECTOR('',#15665,1.); +#15665 = DIRECTION('',(1.,0.,0.)); +#15666 = ORIENTED_EDGE('',*,*,#15667,.F.); +#15667 = EDGE_CURVE('',#15668,#15660,#15670,.T.); +#15668 = VERTEX_POINT('',#15669); +#15669 = CARTESIAN_POINT('',(97.692527655655,104.56070084741, + 118.30707123503)); +#15670 = LINE('',#15671,#15672); +#15671 = CARTESIAN_POINT('',(97.692527655655,102.10276576839, + 125.87181756319)); +#15672 = VECTOR('',#15673,1.); +#15673 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15674 = ORIENTED_EDGE('',*,*,#15675,.F.); +#15675 = EDGE_CURVE('',#15676,#15668,#15678,.T.); +#15676 = VERTEX_POINT('',#15677); +#15677 = CARTESIAN_POINT('',(99.357198655655,104.56070084741, + 118.30707123503)); +#15678 = LINE('',#15679,#15680); +#15679 = CARTESIAN_POINT('',(97.692527655655,104.56070084741, + 118.30707123503)); +#15680 = VECTOR('',#15681,1.); +#15681 = DIRECTION('',(-1.,0.,0.)); +#15682 = ORIENTED_EDGE('',*,*,#15683,.F.); +#15683 = EDGE_CURVE('',#15684,#15676,#15686,.T.); +#15684 = VERTEX_POINT('',#15685); +#15685 = CARTESIAN_POINT('',(99.357198655655,103.52506345559, + 121.49443538635)); +#15686 = LINE('',#15687,#15688); +#15687 = CARTESIAN_POINT('',(99.357198655655,104.56070084741, + 118.30707123503)); +#15688 = VECTOR('',#15689,1.); +#15689 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15690 = ORIENTED_EDGE('',*,*,#15691,.F.); +#15691 = EDGE_CURVE('',#15692,#15684,#15694,.T.); +#15692 = VERTEX_POINT('',#15693); +#15693 = CARTESIAN_POINT('',(102.94010165565,103.52506345559, + 121.49443538635)); +#15694 = LINE('',#15695,#15696); +#15695 = CARTESIAN_POINT('',(99.357198655655,103.52506345559, + 121.49443538635)); +#15696 = VECTOR('',#15697,1.); +#15697 = DIRECTION('',(-1.,0.,0.)); +#15698 = ORIENTED_EDGE('',*,*,#15699,.F.); +#15699 = EDGE_CURVE('',#15700,#15692,#15702,.T.); +#15700 = VERTEX_POINT('',#15701); +#15701 = CARTESIAN_POINT('',(102.94010165565,104.56070084741, + 118.30707123503)); +#15702 = LINE('',#15703,#15704); +#15703 = CARTESIAN_POINT('',(102.94010165565,103.52506345559, + 121.49443538635)); +#15704 = VECTOR('',#15705,1.); +#15705 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15706 = ORIENTED_EDGE('',*,*,#15707,.F.); +#15707 = EDGE_CURVE('',#15620,#15700,#15708,.T.); +#15708 = LINE('',#15709,#15710); +#15709 = CARTESIAN_POINT('',(102.94010165565,104.56070084741, + 118.30707123503)); +#15710 = VECTOR('',#15711,1.); +#15711 = DIRECTION('',(-1.,0.,0.)); +#15712 = FACE_BOUND('',#15713,.T.); +#15713 = EDGE_LOOP('',(#15714,#15724,#15732,#15740,#15748,#15756,#15764, + #15772,#15780,#15788,#15796,#15804,#15812,#15820,#15828,#15836, + #15844,#15852)); +#15714 = ORIENTED_EDGE('',*,*,#15715,.F.); +#15715 = EDGE_CURVE('',#15716,#15718,#15720,.T.); +#15716 = VERTEX_POINT('',#15717); +#15717 = CARTESIAN_POINT('',(90.452305655655,102.73470892108, + 123.92689652574)); +#15718 = VERTEX_POINT('',#15719); +#15719 = CARTESIAN_POINT('',(90.452305655655,104.56070084741, + 118.30707123503)); +#15720 = LINE('',#15721,#15722); +#15721 = CARTESIAN_POINT('',(90.452305655655,104.56070084741, + 118.30707123503)); +#15722 = VECTOR('',#15723,1.); +#15723 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15724 = ORIENTED_EDGE('',*,*,#15725,.F.); +#15725 = EDGE_CURVE('',#15726,#15716,#15728,.T.); +#15726 = VERTEX_POINT('',#15727); +#15727 = CARTESIAN_POINT('',(88.842755655655,102.73470892108, + 123.92689652574)); +#15728 = LINE('',#15729,#15730); +#15729 = CARTESIAN_POINT('',(90.452305655655,102.73470892108, + 123.92689652574)); +#15730 = VECTOR('',#15731,1.); +#15731 = DIRECTION('',(1.,0.,0.)); +#15732 = ORIENTED_EDGE('',*,*,#15733,.F.); +#15733 = EDGE_CURVE('',#15734,#15726,#15736,.T.); +#15734 = VERTEX_POINT('',#15735); +#15735 = CARTESIAN_POINT('',(88.842755655655,103.05323560444, + 122.94657219622)); +#15736 = LINE('',#15737,#15738); +#15737 = CARTESIAN_POINT('',(88.842755655655,102.73470892108, + 123.92689652574)); +#15738 = VECTOR('',#15739,1.); +#15739 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15740 = ORIENTED_EDGE('',*,*,#15741,.F.); +#15741 = EDGE_CURVE('',#15742,#15734,#15744,.T.); +#15742 = VERTEX_POINT('',#15743); +#15743 = CARTESIAN_POINT('',(88.809685655655,103.05323560444, + 122.94657219622)); +#15744 = LINE('',#15745,#15746); +#15745 = CARTESIAN_POINT('',(88.842755655655,103.05323560444, + 122.94657219622)); +#15746 = VECTOR('',#15747,1.); +#15747 = DIRECTION('',(1.,0.,0.)); +#15748 = ORIENTED_EDGE('',*,*,#15749,.F.); +#15749 = EDGE_CURVE('',#15750,#15742,#15752,.T.); +#15750 = VERTEX_POINT('',#15751); +#15751 = CARTESIAN_POINT('',(88.623649655655,102.90334073097, + 123.40790118058)); +#15752 = LINE('',#15753,#15754); +#15753 = CARTESIAN_POINT('',(88.809685655655,103.05323560444, + 122.94657219622)); +#15754 = VECTOR('',#15755,1.); +#15755 = DIRECTION('',(0.358091243978,0.288525025822,-0.887988722035)); +#15756 = ORIENTED_EDGE('',*,*,#15757,.F.); +#15757 = EDGE_CURVE('',#15758,#15750,#15760,.T.); +#15758 = VERTEX_POINT('',#15759); +#15759 = CARTESIAN_POINT('',(88.330127655655,102.79091942137, + 123.75389839437)); +#15760 = LINE('',#15761,#15762); +#15761 = CARTESIAN_POINT('',(88.623649655655,102.90334073097, + 123.40790118058)); +#15762 = VECTOR('',#15763,1.); +#15763 = DIRECTION('',(0.62792416733,0.240500055272,-0.740183060801)); +#15764 = ORIENTED_EDGE('',*,*,#15765,.F.); +#15765 = EDGE_CURVE('',#15766,#15758,#15768,.T.); +#15766 = VERTEX_POINT('',#15767); +#15767 = CARTESIAN_POINT('',(87.940142655655,102.72065606424, + 123.97014677188)); +#15768 = LINE('',#15769,#15770); +#15769 = CARTESIAN_POINT('',(88.330127655655,102.79091942137, + 123.75389839437)); +#15770 = VECTOR('',#15771,1.); +#15771 = DIRECTION('',(0.863889031207,0.155646354399,-0.479030222556)); +#15772 = ORIENTED_EDGE('',*,*,#15773,.F.); +#15773 = EDGE_CURVE('',#15774,#15766,#15776,.T.); +#15774 = VERTEX_POINT('',#15775); +#15775 = CARTESIAN_POINT('',(87.464719655655,102.6972350482, + 124.04222924736)); +#15776 = LINE('',#15777,#15778); +#15777 = CARTESIAN_POINT('',(87.940142655655,102.72065606424, + 123.97014677188)); +#15778 = VECTOR('',#15779,1.); +#15779 = DIRECTION('',(0.987529808161,4.864920602204E-02,-0.149726860471 + )); +#15780 = ORIENTED_EDGE('',*,*,#15781,.F.); +#15781 = EDGE_CURVE('',#15782,#15774,#15784,.T.); +#15782 = VERTEX_POINT('',#15783); +#15783 = CARTESIAN_POINT('',(87.211159655655,102.70234618929, + 124.02649877258)); +#15784 = LINE('',#15785,#15786); +#15785 = CARTESIAN_POINT('',(87.464719655655,102.6972350482, + 124.04222924736)); +#15786 = VECTOR('',#15787,1.); +#15787 = DIRECTION('',(0.997879216918,-2.011477151526E-02, + 6.190690114657E-02)); +#15788 = ORIENTED_EDGE('',*,*,#15789,.F.); +#15789 = EDGE_CURVE('',#15790,#15782,#15792,.T.); +#15790 = VERTEX_POINT('',#15791); +#15791 = CARTESIAN_POINT('',(87.001697655655,102.71597383874, + 123.98455718021)); +#15792 = LINE('',#15793,#15794); +#15793 = CARTESIAN_POINT('',(87.211159655655,102.70234618929, + 124.02649877258)); +#15794 = VECTOR('',#15795,1.); +#15795 = DIRECTION('',(0.978547207411,-6.366452299116E-02,0.195939254312 + )); +#15796 = ORIENTED_EDGE('',*,*,#15797,.F.); +#15797 = EDGE_CURVE('',#15798,#15790,#15800,.T.); +#15798 = VERTEX_POINT('',#15799); +#15799 = CARTESIAN_POINT('',(87.001697655655,103.1537331843, + 122.63727244916)); +#15800 = LINE('',#15801,#15802); +#15801 = CARTESIAN_POINT('',(87.001697655655,102.71597383874, + 123.98455718021)); +#15802 = VECTOR('',#15803,1.); +#15803 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15804 = ORIENTED_EDGE('',*,*,#15805,.F.); +#15805 = EDGE_CURVE('',#15806,#15798,#15808,.T.); +#15806 = VERTEX_POINT('',#15807); +#15807 = CARTESIAN_POINT('',(87.255257655655,103.13499748393, + 122.69493500574)); +#15808 = LINE('',#15809,#15810); +#15809 = CARTESIAN_POINT('',(87.001697655655,103.1537331843, + 122.63727244916)); +#15810 = VECTOR('',#15811,1.); +#15811 = DIRECTION('',(-0.97258228659,7.186468806479E-02,-0.221176767361 + )); +#15812 = ORIENTED_EDGE('',*,*,#15813,.F.); +#15813 = EDGE_CURVE('',#15814,#15806,#15816,.T.); +#15814 = VERTEX_POINT('',#15815); +#15815 = CARTESIAN_POINT('',(87.585986655655,103.12648097556, + 122.72114612333)); +#15816 = LINE('',#15817,#15818); +#15817 = CARTESIAN_POINT('',(87.255257655655,103.13499748393, + 122.69493500574)); +#15818 = VECTOR('',#15819,1.); +#15819 = DIRECTION('',(-0.996545945267,2.56617710541E-02, + -7.897881030797E-02)); +#15820 = ORIENTED_EDGE('',*,*,#15821,.F.); +#15821 = EDGE_CURVE('',#15822,#15814,#15824,.T.); +#15822 = VERTEX_POINT('',#15823); +#15823 = CARTESIAN_POINT('',(88.263981655655,103.17417496749, + 122.57435910955)); +#15824 = LINE('',#15825,#15826); +#15825 = CARTESIAN_POINT('',(87.585986655655,103.12648097556, + 122.72114612333)); +#15826 = VECTOR('',#15827,1.); +#15827 = DIRECTION('',(-0.975054714484,-6.859084754722E-02, + 0.211100922297)); +#15828 = ORIENTED_EDGE('',*,*,#15829,.F.); +#15829 = EDGE_CURVE('',#15830,#15822,#15832,.T.); +#15830 = VERTEX_POINT('',#15831); +#15831 = CARTESIAN_POINT('',(88.693930655655,103.3138497219, + 122.14448441735)); +#15832 = LINE('',#15833,#15834); +#15833 = CARTESIAN_POINT('',(88.263981655655,103.17417496749, + 122.57435910955)); +#15834 = VECTOR('',#15835,1.); +#15835 = DIRECTION('',(-0.689214299668,-0.223900597605,0.689095183212)); +#15836 = ORIENTED_EDGE('',*,*,#15837,.F.); +#15837 = EDGE_CURVE('',#15838,#15830,#15840,.T.); +#15838 = VERTEX_POINT('',#15839); +#15839 = CARTESIAN_POINT('',(88.842758655655,103.53869203209, + 121.45249094081)); +#15840 = LINE('',#15841,#15842); +#15841 = CARTESIAN_POINT('',(88.693930655655,103.3138497219, + 122.14448441735)); +#15842 = VECTOR('',#15843,1.); +#15843 = DIRECTION('',(-0.200395854297,-0.302748587854,0.931764344742)); +#15844 = ORIENTED_EDGE('',*,*,#15845,.F.); +#15845 = EDGE_CURVE('',#15846,#15838,#15848,.T.); +#15846 = VERTEX_POINT('',#15847); +#15847 = CARTESIAN_POINT('',(88.842758655655,104.5607023925, + 118.30706647975)); +#15848 = LINE('',#15849,#15850); +#15849 = CARTESIAN_POINT('',(88.842758655655,103.53869203209, + 121.45249094081)); +#15850 = VECTOR('',#15851,1.); +#15851 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15852 = ORIENTED_EDGE('',*,*,#15853,.F.); +#15853 = EDGE_CURVE('',#15718,#15846,#15854,.T.); +#15854 = LINE('',#15855,#15856); +#15855 = CARTESIAN_POINT('',(88.842758655655,104.5607023925, + 118.30706647975)); +#15856 = VECTOR('',#15857,1.); +#15857 = DIRECTION('',(-0.999999999995,9.599501987063E-07, + -2.954422923066E-06)); +#15858 = FACE_BOUND('',#15859,.T.); +#15859 = EDGE_LOOP('',(#15860,#15870,#15878,#15886,#15894,#15902,#15910, + #15918,#15926,#15934,#15942,#15950,#15958,#15966,#15974,#15982, + #15990,#15998,#16006,#16014,#16022,#16030,#16038,#16046,#16054, + #16062,#16070,#16078,#16086,#16094,#16102,#16110,#16118,#16126, + #16134,#16142,#16150,#16158)); +#15860 = ORIENTED_EDGE('',*,*,#15861,.F.); +#15861 = EDGE_CURVE('',#15862,#15864,#15866,.T.); +#15862 = VERTEX_POINT('',#15863); +#15863 = CARTESIAN_POINT('',(86.345749655655,102.73470892108, + 123.92689652574)); +#15864 = VERTEX_POINT('',#15865); +#15865 = CARTESIAN_POINT('',(86.345749655655,104.56070084741, + 118.30707123503)); +#15866 = LINE('',#15867,#15868); +#15867 = CARTESIAN_POINT('',(86.345749655655,104.56070084741, + 118.30707123503)); +#15868 = VECTOR('',#15869,1.); +#15869 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#15870 = ORIENTED_EDGE('',*,*,#15871,.F.); +#15871 = EDGE_CURVE('',#15872,#15862,#15874,.T.); +#15872 = VERTEX_POINT('',#15873); +#15873 = CARTESIAN_POINT('',(84.736199655655,102.73470892108, + 123.92689652574)); +#15874 = LINE('',#15875,#15876); +#15875 = CARTESIAN_POINT('',(86.345749655655,102.73470892108, + 123.92689652574)); +#15876 = VECTOR('',#15877,1.); +#15877 = DIRECTION('',(1.,0.,0.)); +#15878 = ORIENTED_EDGE('',*,*,#15879,.F.); +#15879 = EDGE_CURVE('',#15880,#15872,#15882,.T.); +#15880 = VERTEX_POINT('',#15881); +#15881 = CARTESIAN_POINT('',(84.736199655655,103.04131187469, + 122.98326966295)); +#15882 = LINE('',#15883,#15884); +#15883 = CARTESIAN_POINT('',(84.736199655655,102.73470892108, + 123.92689652574)); +#15884 = VECTOR('',#15885,1.); +#15885 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#15886 = ORIENTED_EDGE('',*,*,#15887,.F.); +#15887 = EDGE_CURVE('',#15888,#15880,#15890,.T.); +#15888 = VERTEX_POINT('',#15889); +#15889 = CARTESIAN_POINT('',(84.703129655655,103.04131187469, + 122.98326966295)); +#15890 = LINE('',#15891,#15892); +#15891 = CARTESIAN_POINT('',(84.736199655655,103.04131187469, + 122.98326966295)); +#15892 = VECTOR('',#15893,1.); +#15893 = DIRECTION('',(1.,0.,0.)); +#15894 = ORIENTED_EDGE('',*,*,#15895,.F.); +#15895 = EDGE_CURVE('',#15896,#15888,#15898,.T.); +#15896 = VERTEX_POINT('',#15897); +#15897 = CARTESIAN_POINT('',(84.457838655655,102.90035964403, + 123.41707602279)); +#15898 = LINE('',#15899,#15900); +#15899 = CARTESIAN_POINT('',(84.703129655655,103.04131187469, + 122.98326966295)); +#15900 = VECTOR('',#15901,1.); +#15901 = DIRECTION('',(0.473623751299,0.272159697012,-0.837621418976)); +#15902 = ORIENTED_EDGE('',*,*,#15903,.F.); +#15903 = EDGE_CURVE('',#15904,#15896,#15906,.T.); +#15904 = VERTEX_POINT('',#15905); +#15905 = CARTESIAN_POINT('',(84.085767655655,102.79091942137, + 123.75389839437)); +#15906 = LINE('',#15907,#15908); +#15907 = CARTESIAN_POINT('',(84.457838655655,102.90035964403, + 123.41707602279)); +#15908 = VECTOR('',#15909,1.); +#15909 = DIRECTION('',(0.724329754096,0.213052910782,-0.65570943606)); +#15910 = ORIENTED_EDGE('',*,*,#15911,.F.); +#15911 = EDGE_CURVE('',#15912,#15904,#15914,.T.); +#15912 = VERTEX_POINT('',#15913); +#15913 = CARTESIAN_POINT('',(83.606210655655,102.72065606424, + 123.97014677188)); +#15914 = LINE('',#15915,#15916); +#15915 = CARTESIAN_POINT('',(84.085767655655,102.79091942137, + 123.75389839437)); +#15916 = VECTOR('',#15917,1.); +#15917 = DIRECTION('',(0.903578557705,0.132389815799,-0.407453956574)); +#15918 = ORIENTED_EDGE('',*,*,#15919,.F.); +#15919 = EDGE_CURVE('',#15920,#15912,#15922,.T.); +#15920 = VERTEX_POINT('',#15921); +#15921 = CARTESIAN_POINT('',(83.049482655655,102.6972350482, + 124.04222924736)); +#15922 = LINE('',#15923,#15924); +#15923 = CARTESIAN_POINT('',(83.606210655655,102.72065606424, + 123.97014677188)); +#15924 = VECTOR('',#15925,1.); +#15925 = DIRECTION('',(0.990860035637,4.168453676794E-02,-0.128291812565 + )); +#15926 = ORIENTED_EDGE('',*,*,#15927,.F.); +#15927 = EDGE_CURVE('',#15928,#15920,#15930,.T.); +#15928 = VERTEX_POINT('',#15929); +#15929 = CARTESIAN_POINT('',(82.305340655655,102.74152243678, + 123.90592668062)); +#15930 = LINE('',#15931,#15932); +#15931 = CARTESIAN_POINT('',(83.049482655655,102.6972350482, + 124.04222924736)); +#15932 = VECTOR('',#15933,1.); +#15933 = DIRECTION('',(0.981954341807,-5.8440718984E-02,0.179862038718) + ); +#15934 = ORIENTED_EDGE('',*,*,#15935,.F.); +#15935 = EDGE_CURVE('',#15936,#15928,#15938,.T.); +#15936 = VERTEX_POINT('',#15937); +#15937 = CARTESIAN_POINT('',(81.748612655655,102.86927346145, + 123.51274945516)); +#15938 = LINE('',#15939,#15940); +#15939 = CARTESIAN_POINT('',(82.305340655655,102.74152243678, + 123.90592668062)); +#15940 = VECTOR('',#15941,1.); +#15941 = DIRECTION('',(0.802853161901,-0.18422876896,0.566997849302)); +#15942 = ORIENTED_EDGE('',*,*,#15943,.F.); +#15943 = EDGE_CURVE('',#15944,#15936,#15946,.T.); +#15944 = VERTEX_POINT('',#15945); +#15945 = CARTESIAN_POINT('',(81.423395655655,103.07367553353, + 122.88366456295)); +#15946 = LINE('',#15947,#15948); +#15947 = CARTESIAN_POINT('',(81.748612655655,102.86927346145, + 123.51274945516)); +#15948 = VECTOR('',#15949,1.); +#15949 = DIRECTION('',(0.441220561133,-0.277311447252,0.853476875877)); +#15950 = ORIENTED_EDGE('',*,*,#15951,.F.); +#15951 = EDGE_CURVE('',#15952,#15944,#15954,.T.); +#15952 = VERTEX_POINT('',#15953); +#15953 = CARTESIAN_POINT('',(81.390325655655,103.07367553353, + 122.88366456295)); +#15954 = LINE('',#15955,#15956); +#15955 = CARTESIAN_POINT('',(81.423395655655,103.07367553353, + 122.88366456295)); +#15956 = VECTOR('',#15957,1.); +#15957 = DIRECTION('',(1.,0.,0.)); +#15958 = ORIENTED_EDGE('',*,*,#15959,.F.); +#15959 = EDGE_CURVE('',#15960,#15952,#15962,.T.); +#15960 = VERTEX_POINT('',#15961); +#15961 = CARTESIAN_POINT('',(80.993450655655,102.87438367548, + 123.49702183355)); +#15962 = LINE('',#15963,#15964); +#15963 = CARTESIAN_POINT('',(81.390325655655,103.07367553353, + 122.88366456295)); +#15964 = VECTOR('',#15965,1.); +#15965 = DIRECTION('',(0.524097351985,0.263176907274,-0.809975234881)); +#15966 = ORIENTED_EDGE('',*,*,#15967,.F.); +#15967 = EDGE_CURVE('',#15968,#15960,#15970,.T.); +#15968 = VERTEX_POINT('',#15969); +#15969 = CARTESIAN_POINT('',(80.359551655655,102.74322573846, + 123.9006844571)); +#15970 = LINE('',#15971,#15972); +#15971 = CARTESIAN_POINT('',(80.993450655655,102.87438367548, + 123.49702183355)); +#15972 = VECTOR('',#15973,1.); +#15973 = DIRECTION('',(0.830937439537,0.17192650622,-0.529135377796)); +#15974 = ORIENTED_EDGE('',*,*,#15975,.F.); +#15975 = EDGE_CURVE('',#15976,#15968,#15978,.T.); +#15976 = VERTEX_POINT('',#15977); +#15977 = CARTESIAN_POINT('',(79.554776655655,102.6972350482, + 124.04222924736)); +#15978 = LINE('',#15979,#15980); +#15979 = CARTESIAN_POINT('',(80.359551655655,102.74322573846, + 123.9006844571)); +#15980 = VECTOR('',#15981,1.); +#15981 = DIRECTION('',(0.983326474847,5.619441871958E-02,-0.172948637374 + )); +#15982 = ORIENTED_EDGE('',*,*,#15983,.F.); +#15983 = EDGE_CURVE('',#15984,#15976,#15986,.T.); +#15984 = VERTEX_POINT('',#15985); +#15985 = CARTESIAN_POINT('',(78.540539655655,102.77388609562, + 123.80632158061)); +#15986 = LINE('',#15987,#15988); +#15987 = CARTESIAN_POINT('',(79.554776655655,102.6972350482, + 124.04222924736)); +#15988 = VECTOR('',#15989,1.); +#15989 = DIRECTION('',(0.971371739417,-7.341150171134E-02,0.225937370256 + )); +#15990 = ORIENTED_EDGE('',*,*,#15991,.F.); +#15991 = EDGE_CURVE('',#15992,#15984,#15994,.T.); +#15992 = VERTEX_POINT('',#15993); +#15993 = CARTESIAN_POINT('',(77.862544655655,102.98850828676, + 123.14578239623)); +#15994 = LINE('',#15995,#15996); +#15995 = CARTESIAN_POINT('',(78.540539655655,102.77388609562, + 123.80632158061)); +#15996 = VECTOR('',#15997,1.); +#15997 = DIRECTION('',(0.698536448447,-0.221124673714,0.680551767954)); +#15998 = ORIENTED_EDGE('',*,*,#15999,.F.); +#15999 = EDGE_CURVE('',#16000,#15992,#16002,.T.); +#16000 = VERTEX_POINT('',#16001); +#16001 = CARTESIAN_POINT('',(77.620009655655,103.31214487514, + 122.14973139615)); +#16002 = LINE('',#16003,#16004); +#16003 = CARTESIAN_POINT('',(77.862544655655,102.98850828676, + 123.14578239623)); +#16004 = VECTOR('',#16005,1.); +#16005 = DIRECTION('',(0.225608442089,-0.301049937152,0.926536435441)); +#16006 = ORIENTED_EDGE('',*,*,#16007,.F.); +#16007 = EDGE_CURVE('',#16008,#16000,#16010,.T.); +#16008 = VERTEX_POINT('',#16009); +#16009 = CARTESIAN_POINT('',(77.620009655655,104.56070084741, + 118.30707123503)); +#16010 = LINE('',#16011,#16012); +#16011 = CARTESIAN_POINT('',(77.620009655655,103.31214487514, + 122.14973139615)); +#16012 = VECTOR('',#16013,1.); +#16013 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16014 = ORIENTED_EDGE('',*,*,#16015,.F.); +#16015 = EDGE_CURVE('',#16016,#16008,#16018,.T.); +#16016 = VERTEX_POINT('',#16017); +#16017 = CARTESIAN_POINT('',(79.229559655655,104.56070084741, + 118.30707123503)); +#16018 = LINE('',#16019,#16020); +#16019 = CARTESIAN_POINT('',(77.620009655655,104.56070084741, + 118.30707123503)); +#16020 = VECTOR('',#16021,1.); +#16021 = DIRECTION('',(-1.,0.,0.)); +#16022 = ORIENTED_EDGE('',*,*,#16023,.F.); +#16023 = EDGE_CURVE('',#16024,#16016,#16026,.T.); +#16024 = VERTEX_POINT('',#16025); +#16025 = CARTESIAN_POINT('',(79.229559655655,103.43648929645, + 121.76703861773)); +#16026 = LINE('',#16027,#16028); +#16027 = CARTESIAN_POINT('',(79.229559655655,104.56070084741, + 118.30707123503)); +#16028 = VECTOR('',#16029,1.); +#16029 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16030 = ORIENTED_EDGE('',*,*,#16031,.F.); +#16031 = EDGE_CURVE('',#16032,#16024,#16034,.T.); +#16032 = VERTEX_POINT('',#16033); +#16033 = CARTESIAN_POINT('',(79.345314655655,103.25763767652, + 122.317487304)); +#16034 = LINE('',#16035,#16036); +#16035 = CARTESIAN_POINT('',(79.229559655655,103.43648929645, + 121.76703861773)); +#16036 = VECTOR('',#16037,1.); +#16037 = DIRECTION('',(-0.196115809324,0.303016113281,-0.932587703342)); +#16038 = ORIENTED_EDGE('',*,*,#16039,.F.); +#16039 = EDGE_CURVE('',#16040,#16032,#16042,.T.); +#16040 = VERTEX_POINT('',#16041); +#16041 = CARTESIAN_POINT('',(79.670532655655,103.14691966859, + 122.65824229428)); +#16042 = LINE('',#16043,#16044); +#16043 = CARTESIAN_POINT('',(79.345314655655,103.25763767652, + 122.317487304)); +#16044 = VECTOR('',#16045,1.); +#16045 = DIRECTION('',(-0.672105610214,0.228813270737,-0.704214836434)); +#16046 = ORIENTED_EDGE('',*,*,#16047,.F.); +#16047 = EDGE_CURVE('',#16048,#16040,#16050,.T.); +#16048 = VERTEX_POINT('',#16049); +#16049 = CARTESIAN_POINT('',(80.194187655655,103.10944610473, + 122.77357406485)); +#16050 = LINE('',#16051,#16052); +#16051 = CARTESIAN_POINT('',(79.670532655655,103.14691966859, + 122.65824229428)); +#16052 = VECTOR('',#16053,1.); +#16053 = DIRECTION('',(-0.974218265698,6.971656986024E-02, + -0.214565539327)); +#16054 = ORIENTED_EDGE('',*,*,#16055,.F.); +#16055 = EDGE_CURVE('',#16056,#16048,#16058,.T.); +#16056 = VERTEX_POINT('',#16057); +#16057 = CARTESIAN_POINT('',(80.728866655655,103.15202988262, + 122.64251467267)); +#16058 = LINE('',#16059,#16060); +#16059 = CARTESIAN_POINT('',(80.194187655655,103.10944610473, + 122.77357406485)); +#16060 = VECTOR('',#16061,1.); +#16061 = DIRECTION('',(-0.96835513441,-7.712332065616E-02,0.237361174316 + )); +#16062 = ORIENTED_EDGE('',*,*,#16063,.F.); +#16063 = EDGE_CURVE('',#16064,#16056,#16066,.T.); +#16064 = VERTEX_POINT('',#16065); +#16065 = CARTESIAN_POINT('',(81.081644655655,103.27126439892, + 122.27554856481)); +#16066 = LINE('',#16067,#16068); +#16067 = CARTESIAN_POINT('',(80.728866655655,103.15202988262, + 122.64251467267)); +#16068 = VECTOR('',#16069,1.); +#16069 = DIRECTION('',(-0.674769140011,-0.228063462067,0.701907162635)); +#16070 = ORIENTED_EDGE('',*,*,#16071,.F.); +#16071 = EDGE_CURVE('',#16072,#16064,#16074,.T.); +#16072 = VERTEX_POINT('',#16073); +#16073 = CARTESIAN_POINT('',(81.208424655655,103.45011601885, + 121.72509987853)); +#16074 = LINE('',#16075,#16076); +#16075 = CARTESIAN_POINT('',(81.081644655655,103.27126439892, + 122.27554856481)); +#16076 = VECTOR('',#16077,1.); +#16077 = DIRECTION('',(-0.213975117346,-0.301859886129,0.929029202072)); +#16078 = ORIENTED_EDGE('',*,*,#16079,.F.); +#16079 = EDGE_CURVE('',#16080,#16072,#16082,.T.); +#16080 = VERTEX_POINT('',#16081); +#16081 = CARTESIAN_POINT('',(81.208424655655,104.56070084741, + 118.30707123503)); +#16082 = LINE('',#16083,#16084); +#16083 = CARTESIAN_POINT('',(81.208424655655,103.45011601885, + 121.72509987853)); +#16084 = VECTOR('',#16085,1.); +#16085 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16086 = ORIENTED_EDGE('',*,*,#16087,.F.); +#16087 = EDGE_CURVE('',#16088,#16080,#16090,.T.); +#16088 = VERTEX_POINT('',#16089); +#16089 = CARTESIAN_POINT('',(82.757340655655,104.56070084741, + 118.30707123503)); +#16090 = LINE('',#16091,#16092); +#16091 = CARTESIAN_POINT('',(81.208424655655,104.56070084741, + 118.30707123503)); +#16092 = VECTOR('',#16093,1.); +#16093 = DIRECTION('',(-1.,0.,0.)); +#16094 = ORIENTED_EDGE('',*,*,#16095,.F.); +#16095 = EDGE_CURVE('',#16096,#16088,#16098,.T.); +#16096 = VERTEX_POINT('',#16097); +#16097 = CARTESIAN_POINT('',(82.757340655655,103.42115927238, + 121.81421958045)); +#16098 = LINE('',#16099,#16100); +#16099 = CARTESIAN_POINT('',(82.757340655655,104.56070084741, + 118.30707123503)); +#16100 = VECTOR('',#16101,1.); +#16101 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16102 = ORIENTED_EDGE('',*,*,#16103,.F.); +#16103 = EDGE_CURVE('',#16104,#16096,#16106,.T.); +#16104 = VERTEX_POINT('',#16105); +#16105 = CARTESIAN_POINT('',(82.873096655655,103.25252746248, + 122.33321492561)); +#16106 = LINE('',#16107,#16108); +#16107 = CARTESIAN_POINT('',(82.757340655655,103.42115927238, + 121.81421958045)); +#16108 = VECTOR('',#16109,1.); +#16109 = DIRECTION('',(-0.207505248005,0.302290900986,-0.930355729402)); +#16110 = ORIENTED_EDGE('',*,*,#16111,.F.); +#16111 = EDGE_CURVE('',#16112,#16104,#16114,.T.); +#16112 = VERTEX_POINT('',#16113); +#16113 = CARTESIAN_POINT('',(83.203825655655,103.14691966859, + 122.65824229428)); +#16114 = LINE('',#16115,#16116); +#16115 = CARTESIAN_POINT('',(82.873096655655,103.25252746248, + 122.33321492561)); +#16116 = VECTOR('',#16117,1.); +#16117 = DIRECTION('',(-0.695420691969,0.222060493964,-0.68343192653)); +#16118 = ORIENTED_EDGE('',*,*,#16119,.F.); +#16119 = EDGE_CURVE('',#16120,#16112,#16122,.T.); +#16120 = VERTEX_POINT('',#16121); +#16121 = CARTESIAN_POINT('',(83.710944655655,103.10944610473, + 122.77357406485)); +#16122 = LINE('',#16123,#16124); +#16123 = CARTESIAN_POINT('',(83.203825655655,103.14691966859, + 122.65824229428)); +#16124 = VECTOR('',#16125,1.); +#16125 = DIRECTION('',(-0.972579146281,7.186874627855E-02, + -0.221189257259)); +#16126 = ORIENTED_EDGE('',*,*,#16127,.F.); +#16127 = EDGE_CURVE('',#16128,#16120,#16130,.T.); +#16128 = VERTEX_POINT('',#16129); +#16129 = CARTESIAN_POINT('',(84.245623655655,103.1537331843, + 122.63727244916)); +#16130 = LINE('',#16131,#16132); +#16131 = CARTESIAN_POINT('',(83.710944655655,103.10944610473, + 122.77357406485)); +#16132 = VECTOR('',#16133,1.); +#16133 = DIRECTION('',(-0.96590360547,-8.000510554625E-02,0.24623039623) + ); +#16134 = ORIENTED_EDGE('',*,*,#16135,.F.); +#16135 = EDGE_CURVE('',#16136,#16128,#16138,.T.); +#16136 = VERTEX_POINT('',#16137); +#16137 = CARTESIAN_POINT('',(84.609426655655,103.27637430394, + 122.25982189425)); +#16138 = LINE('',#16139,#16140); +#16139 = CARTESIAN_POINT('',(84.245623655655,103.1537331843, + 122.63727244916)); +#16140 = VECTOR('',#16141,1.); +#16141 = DIRECTION('',(-0.675725553709,-0.22779289472,0.701074441967)); +#16142 = ORIENTED_EDGE('',*,*,#16143,.F.); +#16143 = EDGE_CURVE('',#16144,#16136,#16146,.T.); +#16144 = VERTEX_POINT('',#16145); +#16145 = CARTESIAN_POINT('',(84.736205655655,103.45863283624, + 121.69888780988)); +#16146 = LINE('',#16147,#16148); +#16147 = CARTESIAN_POINT('',(84.609426655655,103.27637430394, + 122.25982189425)); +#16148 = VECTOR('',#16149,1.); +#16149 = DIRECTION('',(-0.210152005839,-0.302116250672,0.929818211008)); +#16150 = ORIENTED_EDGE('',*,*,#16151,.F.); +#16151 = EDGE_CURVE('',#16152,#16144,#16154,.T.); +#16152 = VERTEX_POINT('',#16153); +#16153 = CARTESIAN_POINT('',(84.736205655655,104.56070084741, + 118.30707123503)); +#16154 = LINE('',#16155,#16156); +#16155 = CARTESIAN_POINT('',(84.736205655655,103.45863283624, + 121.69888780988)); +#16156 = VECTOR('',#16157,1.); +#16157 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16158 = ORIENTED_EDGE('',*,*,#16159,.F.); +#16159 = EDGE_CURVE('',#15864,#16152,#16160,.T.); +#16160 = LINE('',#16161,#16162); +#16161 = CARTESIAN_POINT('',(84.736205655655,104.56070084741, + 118.30707123503)); +#16162 = VECTOR('',#16163,1.); +#16163 = DIRECTION('',(-1.,0.,0.)); +#16164 = FACE_BOUND('',#16165,.T.); +#16165 = EDGE_LOOP('',(#16166,#16176,#16184,#16192,#16200,#16208,#16216, + #16224,#16232,#16240,#16248,#16256,#16264,#16272,#16280,#16288, + #16296,#16304,#16312,#16320,#16328,#16336,#16344,#16352)); +#16166 = ORIENTED_EDGE('',*,*,#16167,.F.); +#16167 = EDGE_CURVE('',#16168,#16170,#16172,.T.); +#16168 = VERTEX_POINT('',#16169); +#16169 = CARTESIAN_POINT('',(76.815785154992,103.64598392536, + 121.12228044723)); +#16170 = VERTEX_POINT('',#16171); +#16171 = CARTESIAN_POINT('',(76.725652655655,103.92322165528, + 120.26903044997)); +#16172 = LINE('',#16173,#16174); +#16173 = CARTESIAN_POINT('',(76.725652655655,103.92322165528, + 120.26903044997)); +#16174 = VECTOR('',#16175,1.); +#16175 = DIRECTION('',(-9.996103639657E-02,0.307469237125, + -0.946293009286)); +#16176 = ORIENTED_EDGE('',*,*,#16177,.F.); +#16177 = EDGE_CURVE('',#16178,#16168,#16180,.T.); +#16178 = VERTEX_POINT('',#16179); +#16179 = CARTESIAN_POINT('',(76.724274655655,103.37048573859, + 121.97017668116)); +#16180 = LINE('',#16181,#16182); +#16181 = CARTESIAN_POINT('',(76.815785154992,103.64598392536, + 121.12228044723)); +#16182 = VECTOR('',#16183,1.); +#16183 = DIRECTION('',(0.102107744814,0.307401869238,-0.946085672251)); +#16184 = ORIENTED_EDGE('',*,*,#16185,.F.); +#16185 = EDGE_CURVE('',#16186,#16178,#16188,.T.); +#16186 = VERTEX_POINT('',#16187); +#16187 = CARTESIAN_POINT('',(76.451423655655,103.13840408727, + 122.6844505587)); +#16188 = LINE('',#16189,#16190); +#16189 = CARTESIAN_POINT('',(76.724274655655,103.37048573859, + 121.97017668116)); +#16190 = VECTOR('',#16191,1.); +#16191 = DIRECTION('',(0.341465011551,0.29044336927,-0.893892776083)); +#16192 = ORIENTED_EDGE('',*,*,#16193,.F.); +#16193 = EDGE_CURVE('',#16194,#16186,#16196,.T.); +#16194 = VERTEX_POINT('',#16195); +#16195 = CARTESIAN_POINT('',(76.014584655655,102.95018399912, + 123.26373242538)); +#16196 = LINE('',#16197,#16198); +#16197 = CARTESIAN_POINT('',(76.451423655655,103.13840408727, + 122.6844505587)); +#16198 = VECTOR('',#16199,1.); +#16199 = DIRECTION('',(0.582803033664,0.251111366826,-0.772841319679)); +#16200 = ORIENTED_EDGE('',*,*,#16201,.F.); +#16201 = EDGE_CURVE('',#16202,#16194,#16204,.T.); +#16202 = VERTEX_POINT('',#16203); +#16203 = CARTESIAN_POINT('',(75.431673655655,102.81136089555, + 123.69098600582)); +#16204 = LINE('',#16205,#16206); +#16205 = CARTESIAN_POINT('',(76.014584655655,102.95018399912, + 123.26373242538)); +#16206 = VECTOR('',#16207,1.); +#16207 = DIRECTION('',(0.792066848469,0.188634591111,-0.580557575605)); +#16208 = ORIENTED_EDGE('',*,*,#16209,.F.); +#16209 = EDGE_CURVE('',#16210,#16202,#16212,.T.); +#16210 = VERTEX_POINT('',#16211); +#16211 = CARTESIAN_POINT('',(74.719226655655,102.72576751434, + 123.95441534604)); +#16212 = LINE('',#16213,#16214); +#16213 = CARTESIAN_POINT('',(75.431673655655,102.81136089555, + 123.69098600582)); +#16214 = VECTOR('',#16215,1.); +#16215 = DIRECTION('',(0.9320385725,0.1119751123,-0.344623959699)); +#16216 = ORIENTED_EDGE('',*,*,#16217,.F.); +#16217 = EDGE_CURVE('',#16218,#16210,#16220,.T.); +#16218 = VERTEX_POINT('',#16219); +#16219 = CARTESIAN_POINT('',(73.893781655655,102.69723628427, + 124.04222544314)); +#16220 = LINE('',#16221,#16222); +#16221 = CARTESIAN_POINT('',(74.719226655655,102.72576751434, + 123.95441534604)); +#16222 = VECTOR('',#16223,1.); +#16223 = DIRECTION('',(0.993802479084,3.435044997367E-02,-0.105719814379 + )); +#16224 = ORIENTED_EDGE('',*,*,#16225,.F.); +#16225 = EDGE_CURVE('',#16226,#16218,#16228,.T.); +#16226 = VERTEX_POINT('',#16227); +#16227 = CARTESIAN_POINT('',(73.064201655655,102.72576751434, + 123.95441534604)); +#16228 = LINE('',#16229,#16230); +#16229 = CARTESIAN_POINT('',(73.893781655655,102.69723628427, + 124.04222544314)); +#16230 = VECTOR('',#16231,1.); +#16231 = DIRECTION('',(0.99386354147,-3.41813319553E-02,0.105199322638) + ); +#16232 = ORIENTED_EDGE('',*,*,#16233,.F.); +#16233 = EDGE_CURVE('',#16234,#16226,#16236,.T.); +#16234 = VERTEX_POINT('',#16235); +#16235 = CARTESIAN_POINT('',(72.350377655655,102.81136089555, + 123.69098600582)); +#16236 = LINE('',#16237,#16238); +#16237 = CARTESIAN_POINT('',(73.064201655655,102.72576751434, + 123.95441534604)); +#16238 = VECTOR('',#16239,1.); +#16239 = DIRECTION('',(0.932274512057,-0.11178739815,0.344046234951)); +#16240 = ORIENTED_EDGE('',*,*,#16241,.F.); +#16241 = EDGE_CURVE('',#16242,#16234,#16244,.T.); +#16242 = VERTEX_POINT('',#16243); +#16243 = CARTESIAN_POINT('',(71.763332655655,102.94890652286, + 123.26766409302)); +#16244 = LINE('',#16245,#16246); +#16245 = CARTESIAN_POINT('',(72.350377655655,102.81136089555, + 123.69098600582)); +#16246 = VECTOR('',#16247,1.); +#16247 = DIRECTION('',(0.796846461935,-0.186702461448,0.574611091949)); +#16248 = ORIENTED_EDGE('',*,*,#16249,.F.); +#16249 = EDGE_CURVE('',#16250,#16242,#16252,.T.); +#16250 = VERTEX_POINT('',#16251); +#16251 = CARTESIAN_POINT('',(71.325115655655,103.1367007856, + 122.68969278222)); +#16252 = LINE('',#16253,#16254); +#16253 = CARTESIAN_POINT('',(71.763332655655,102.94890652286, + 123.26766409302)); +#16254 = VECTOR('',#16255,1.); +#16255 = DIRECTION('',(0.584886659293,-0.250648329404,0.771416237027)); +#16256 = ORIENTED_EDGE('',*,*,#16257,.F.); +#16257 = EDGE_CURVE('',#16258,#16250,#16260,.T.); +#16258 = VERTEX_POINT('',#16259); +#16259 = CARTESIAN_POINT('',(71.052263655655,103.36920826234, + 121.9741083488)); +#16260 = LINE('',#16261,#16262); +#16261 = CARTESIAN_POINT('',(71.325115655655,103.1367007856, + 122.68969278222)); +#16262 = VECTOR('',#16263,1.); +#16263 = DIRECTION('',(0.340913481115,-0.290505230967,0.894083166811)); +#16264 = ORIENTED_EDGE('',*,*,#16265,.F.); +#16265 = EDGE_CURVE('',#16266,#16258,#16268,.T.); +#16266 = VERTEX_POINT('',#16267); +#16267 = CARTESIAN_POINT('',(70.960752455951,103.64599694556, + 121.12224037515)); +#16268 = LINE('',#16269,#16270); +#16269 = CARTESIAN_POINT('',(71.052263655655,103.36920826234, + 121.9741083488)); +#16270 = VECTOR('',#16271,1.); +#16271 = DIRECTION('',(0.101637377799,-0.307416753997,0.946131482827)); +#16272 = ORIENTED_EDGE('',*,*,#16273,.F.); +#16273 = EDGE_CURVE('',#16274,#16266,#16276,.T.); +#16274 = VERTEX_POINT('',#16275); +#16275 = CARTESIAN_POINT('',(71.052263655655,103.92449944055, + 120.26509783127)); +#16276 = LINE('',#16277,#16278); +#16277 = CARTESIAN_POINT('',(70.960752455951,103.64599694556, + 121.12224037515)); +#16278 = VECTOR('',#16279,1.); +#16279 = DIRECTION('',(-0.101018337181,-0.307436237697,0.94619144749)); +#16280 = ORIENTED_EDGE('',*,*,#16281,.F.); +#16281 = EDGE_CURVE('',#16282,#16274,#16284,.T.); +#16282 = VERTEX_POINT('',#16283); +#16283 = CARTESIAN_POINT('',(71.325115655655,104.15870990994, + 119.54427212539)); +#16284 = LINE('',#16285,#16286); +#16285 = CARTESIAN_POINT('',(71.052263655655,103.92449944055, + 120.26509783127)); +#16286 = VECTOR('',#16287,1.); +#16287 = DIRECTION('',(-0.338719951823,-0.290750146268,0.8948369386)); +#16288 = ORIENTED_EDGE('',*,*,#16289,.F.); +#16289 = EDGE_CURVE('',#16290,#16282,#16292,.T.); +#16290 = VERTEX_POINT('',#16291); +#16291 = CARTESIAN_POINT('',(71.757819655655,104.34693030711, + 118.96498930765)); +#16292 = LINE('',#16293,#16294); +#16293 = CARTESIAN_POINT('',(71.325115655655,104.15870990994, + 119.54427212539)); +#16294 = VECTOR('',#16295,1.); +#16295 = DIRECTION('',(-0.579141922607,-0.251918916146,0.775326700925)); +#16296 = ORIENTED_EDGE('',*,*,#16297,.F.); +#16297 = EDGE_CURVE('',#16298,#16290,#16300,.T.); +#16298 = VERTEX_POINT('',#16299); +#16299 = CARTESIAN_POINT('',(72.339352655655,104.48575341068, + 118.53773572721)); +#16300 = LINE('',#16301,#16302); +#16301 = CARTESIAN_POINT('',(71.757819655655,104.34693030711, + 118.96498930765)); +#16302 = VECTOR('',#16303,1.); +#16303 = DIRECTION('',(-0.791367564695,-0.188914646969,0.581419498907)); +#16304 = ORIENTED_EDGE('',*,*,#16305,.F.); +#16305 = EDGE_CURVE('',#16306,#16298,#16308,.T.); +#16306 = VERTEX_POINT('',#16307); +#16307 = CARTESIAN_POINT('',(73.054555655655,104.57006931563, + 118.27823805463)); +#16308 = LINE('',#16309,#16310); +#16309 = CARTESIAN_POINT('',(72.339352655655,104.48575341068, + 118.53773572721)); +#16310 = VECTOR('',#16311,1.); +#16311 = DIRECTION('',(-0.934316521564,-0.110147388958,0.338998805658)); +#16312 = ORIENTED_EDGE('',*,*,#16313,.F.); +#16313 = EDGE_CURVE('',#16314,#16306,#16316,.T.); +#16314 = VERTEX_POINT('',#16315); +#16315 = CARTESIAN_POINT('',(73.888269655655,104.59817441127, + 118.19173946447)); +#16316 = LINE('',#16317,#16318); +#16317 = CARTESIAN_POINT('',(73.054555655655,104.57006931563, + 118.27823805463)); +#16318 = VECTOR('',#16319,1.); +#16319 = DIRECTION('',(-0.994102256074,-3.351189854231E-02, + 0.103139018443)); +#16320 = ORIENTED_EDGE('',*,*,#16321,.F.); +#16321 = EDGE_CURVE('',#16322,#16314,#16324,.T.); +#16322 = VERTEX_POINT('',#16323); +#16323 = CARTESIAN_POINT('',(74.726117655655,104.56964349022, + 118.27954861051)); +#16324 = LINE('',#16325,#16326); +#16325 = CARTESIAN_POINT('',(73.888269655655,104.59817441127, + 118.19173946447)); +#16326 = VECTOR('',#16327,1.); +#16327 = DIRECTION('',(-0.993983098413,3.384773051016E-02, + -0.104172602962)); +#16328 = ORIENTED_EDGE('',*,*,#16329,.F.); +#16329 = EDGE_CURVE('',#16330,#16322,#16332,.T.); +#16330 = VERTEX_POINT('',#16331); +#16331 = CARTESIAN_POINT('',(75.442698655655,104.48405010901, + 118.54297795073)); +#16332 = LINE('',#16333,#16334); +#16333 = CARTESIAN_POINT('',(74.726117655655,104.56964349022, + 118.27954861051)); +#16334 = VECTOR('',#16335,1.); +#16335 = DIRECTION('',(-0.932743355133,0.111413305071,-0.342894894841)); +#16336 = ORIENTED_EDGE('',*,*,#16337,.F.); +#16337 = EDGE_CURVE('',#16338,#16330,#16340,.T.); +#16338 = VERTEX_POINT('',#16339); +#16339 = CARTESIAN_POINT('',(76.024230655655,104.34522700544, + 118.97023153117)); +#16340 = LINE('',#16341,#16342); +#16341 = CARTESIAN_POINT('',(75.442698655655,104.48405010901, + 118.54297795073)); +#16342 = VECTOR('',#16343,1.); +#16343 = DIRECTION('',(-0.791367056101,0.188914850414,-0.581420125048)); +#16344 = ORIENTED_EDGE('',*,*,#16345,.F.); +#16345 = EDGE_CURVE('',#16346,#16338,#16348,.T.); +#16346 = VERTEX_POINT('',#16347); +#16347 = CARTESIAN_POINT('',(76.456935655655,104.15700660827, + 119.5495143489)); +#16348 = LINE('',#16349,#16350); +#16349 = CARTESIAN_POINT('',(76.024230655655,104.34522700544, + 118.97023153117)); +#16350 = VECTOR('',#16351,1.); +#16351 = DIRECTION('',(-0.579142812116,0.251918720874,-0.77532609994)); +#16352 = ORIENTED_EDGE('',*,*,#16353,.F.); +#16353 = EDGE_CURVE('',#16170,#16346,#16354,.T.); +#16354 = LINE('',#16355,#16356); +#16355 = CARTESIAN_POINT('',(76.456935655655,104.15700660827, + 119.5495143489)); +#16356 = VECTOR('',#16357,1.); +#16357 = DIRECTION('',(-0.334703990143,0.291193920005,-0.896202733724)); +#16358 = FACE_BOUND('',#16359,.T.); +#16359 = EDGE_LOOP('',(#16360,#16370,#16378,#16386,#16394,#16402,#16410, + #16418,#16426,#16434,#16442,#16450,#16458,#16466,#16474,#16482, + #16490,#16498,#16506,#16514,#16522,#16530,#16538,#16546)); +#16360 = ORIENTED_EDGE('',*,*,#16361,.F.); +#16361 = EDGE_CURVE('',#16362,#16364,#16366,.T.); +#16362 = VERTEX_POINT('',#16363); +#16363 = CARTESIAN_POINT('',(70.134503655655,102.73470892108, + 123.92689652574)); +#16364 = VERTEX_POINT('',#16365); +#16365 = CARTESIAN_POINT('',(70.134503655655,104.56070084741, + 118.30707123503)); +#16366 = LINE('',#16367,#16368); +#16367 = CARTESIAN_POINT('',(70.134503655655,104.56070084741, + 118.30707123503)); +#16368 = VECTOR('',#16369,1.); +#16369 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16370 = ORIENTED_EDGE('',*,*,#16371,.F.); +#16371 = EDGE_CURVE('',#16372,#16362,#16374,.T.); +#16372 = VERTEX_POINT('',#16373); +#16373 = CARTESIAN_POINT('',(68.524953655655,102.73470892108, + 123.92689652574)); +#16374 = LINE('',#16375,#16376); +#16375 = CARTESIAN_POINT('',(70.134503655655,102.73470892108, + 123.92689652574)); +#16376 = VECTOR('',#16377,1.); +#16377 = DIRECTION('',(1.,0.,0.)); +#16378 = ORIENTED_EDGE('',*,*,#16379,.F.); +#16379 = EDGE_CURVE('',#16380,#16372,#16382,.T.); +#16380 = VERTEX_POINT('',#16381); +#16381 = CARTESIAN_POINT('',(68.524953655655,103.034498668, + 123.00423855703)); +#16382 = LINE('',#16383,#16384); +#16383 = CARTESIAN_POINT('',(68.524953655655,102.73470892108, + 123.92689652574)); +#16384 = VECTOR('',#16385,1.); +#16385 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16386 = ORIENTED_EDGE('',*,*,#16387,.F.); +#16387 = EDGE_CURVE('',#16388,#16380,#16390,.T.); +#16388 = VERTEX_POINT('',#16389); +#16389 = CARTESIAN_POINT('',(68.491883655655,103.034498668, + 123.00423855703)); +#16390 = LINE('',#16391,#16392); +#16391 = CARTESIAN_POINT('',(68.524953655655,103.034498668, + 123.00423855703)); +#16392 = VECTOR('',#16393,1.); +#16393 = DIRECTION('',(1.,0.,0.)); +#16394 = ORIENTED_EDGE('',*,*,#16395,.F.); +#16395 = EDGE_CURVE('',#16396,#16388,#16398,.T.); +#16396 = VERTEX_POINT('',#16397); +#16397 = CARTESIAN_POINT('',(68.205251655655,102.89439808817, + 123.4354238051)); +#16398 = LINE('',#16399,#16400); +#16399 = CARTESIAN_POINT('',(68.491883655655,103.034498668, + 123.00423855703)); +#16400 = VECTOR('',#16401,1.); +#16401 = DIRECTION('',(0.534379285796,0.261195008884,-0.803875578834)); +#16402 = ORIENTED_EDGE('',*,*,#16403,.F.); +#16403 = EDGE_CURVE('',#16404,#16396,#16406,.T.); +#16404 = VERTEX_POINT('',#16405); +#16405 = CARTESIAN_POINT('',(67.808376655655,102.78751281802, + 123.76438284141)); +#16406 = LINE('',#16407,#16408); +#16407 = CARTESIAN_POINT('',(68.205251655655,102.89439808817, + 123.4354238051)); +#16408 = VECTOR('',#16409,1.); +#16409 = DIRECTION('',(0.753872069675,0.203030727121,-0.624864326401)); +#16410 = ORIENTED_EDGE('',*,*,#16411,.F.); +#16411 = EDGE_CURVE('',#16412,#16404,#16414,.T.); +#16412 = VERTEX_POINT('',#16413); +#16413 = CARTESIAN_POINT('',(67.302635655655,102.7198044134, + 123.97276788364)); +#16414 = LINE('',#16415,#16416); +#16415 = CARTESIAN_POINT('',(67.808376655655,102.78751281802, + 123.76438284141)); +#16416 = VECTOR('',#16417,1.); +#16417 = DIRECTION('',(0.917585695908,0.122846009267,-0.378081140328)); +#16418 = ORIENTED_EDGE('',*,*,#16419,.F.); +#16419 = EDGE_CURVE('',#16420,#16412,#16422,.T.); +#16420 = VERTEX_POINT('',#16421); +#16421 = CARTESIAN_POINT('',(66.689408655655,102.6972350482, + 124.04222924736)); +#16422 = LINE('',#16423,#16424); +#16423 = CARTESIAN_POINT('',(67.302635655655,102.7198044134, + 123.97276788364)); +#16424 = VECTOR('',#16425,1.); +#16425 = DIRECTION('',(0.992982041012,3.6545968005E-02,-0.112476924079) + ); +#16426 = ORIENTED_EDGE('',*,*,#16427,.F.); +#16427 = EDGE_CURVE('',#16428,#16420,#16430,.T.); +#16428 = VERTEX_POINT('',#16429); +#16429 = CARTESIAN_POINT('',(65.825377655655,102.74279960402, + 123.90199596403)); +#16430 = LINE('',#16431,#16432); +#16431 = CARTESIAN_POINT('',(66.689408655655,102.6972350482, + 124.04222924736)); +#16432 = VECTOR('',#16433,1.); +#16433 = DIRECTION('',(0.985749195827,-5.198334811871E-02,0.159988294712 + )); +#16434 = ORIENTED_EDGE('',*,*,#16435,.F.); +#16435 = EDGE_CURVE('',#16436,#16428,#16438,.T.); +#16436 = VERTEX_POINT('',#16437); +#16437 = CARTESIAN_POINT('',(65.184588655655,102.8794935805, + 123.48129516299)); +#16438 = LINE('',#16439,#16440); +#16439 = CARTESIAN_POINT('',(65.825377655655,102.74279960402, + 123.90199596403)); +#16440 = VECTOR('',#16441,1.); +#16441 = DIRECTION('',(0.822956072371,-0.175554102832,0.54029997217)); +#16442 = ORIENTED_EDGE('',*,*,#16443,.F.); +#16443 = EDGE_CURVE('',#16444,#16436,#16446,.T.); +#16444 = VERTEX_POINT('',#16445); +#16445 = CARTESIAN_POINT('',(64.783579655655,103.09539324789, + 122.81682431098)); +#16446 = LINE('',#16447,#16448); +#16447 = CARTESIAN_POINT('',(65.184588655655,102.8794935805, + 123.48129516299)); +#16448 = VECTOR('',#16449,1.); +#16449 = DIRECTION('',(0.497795590459,-0.268008704067,0.824845976327)); +#16450 = ORIENTED_EDGE('',*,*,#16451,.F.); +#16451 = EDGE_CURVE('',#16452,#16444,#16454,.T.); +#16452 = VERTEX_POINT('',#16453); +#16453 = CARTESIAN_POINT('',(64.649909655655,103.38198209783, + 121.93479452558)); +#16454 = LINE('',#16455,#16456); +#16455 = CARTESIAN_POINT('',(64.783579655655,103.09539324789, + 122.81682431098)); +#16456 = VECTOR('',#16457,1.); +#16457 = DIRECTION('',(0.142656736468,-0.305856437798,0.94132932335)); +#16458 = ORIENTED_EDGE('',*,*,#16459,.F.); +#16459 = EDGE_CURVE('',#16460,#16452,#16462,.T.); +#16460 = VERTEX_POINT('',#16461); +#16461 = CARTESIAN_POINT('',(64.649909655655,104.56070084741, + 118.30707123503)); +#16462 = LINE('',#16463,#16464); +#16463 = CARTESIAN_POINT('',(64.649909655655,103.38198209783, + 121.93479452558)); +#16464 = VECTOR('',#16465,1.); +#16465 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16466 = ORIENTED_EDGE('',*,*,#16467,.F.); +#16467 = EDGE_CURVE('',#16468,#16460,#16470,.T.); +#16468 = VERTEX_POINT('',#16469); +#16469 = CARTESIAN_POINT('',(66.259459655655,104.56070084741, + 118.30707123503)); +#16470 = LINE('',#16471,#16472); +#16471 = CARTESIAN_POINT('',(64.649909655655,104.56070084741, + 118.30707123503)); +#16472 = VECTOR('',#16473,1.); +#16473 = DIRECTION('',(-1.,0.,0.)); +#16474 = ORIENTED_EDGE('',*,*,#16475,.F.); +#16475 = EDGE_CURVE('',#16476,#16468,#16478,.T.); +#16476 = VERTEX_POINT('',#16477); +#16477 = CARTESIAN_POINT('',(66.259459655655,103.48418328838, + 121.62025160395)); +#16478 = LINE('',#16479,#16480); +#16479 = CARTESIAN_POINT('',(66.259459655655,104.56070084741, + 118.30707123503)); +#16480 = VECTOR('',#16481,1.); +#16481 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16482 = ORIENTED_EDGE('',*,*,#16483,.F.); +#16483 = EDGE_CURVE('',#16484,#16476,#16486,.T.); +#16484 = VERTEX_POINT('',#16485); +#16485 = CARTESIAN_POINT('',(66.328361655655,103.32577159754, + 122.10779265695)); +#16486 = LINE('',#16487,#16488); +#16487 = CARTESIAN_POINT('',(66.259459655655,103.48418328838, + 121.62025160395)); +#16488 = VECTOR('',#16489,1.); +#16489 = DIRECTION('',(-0.133210686866,0.306262955282,-0.942580455519)); +#16490 = ORIENTED_EDGE('',*,*,#16491,.F.); +#16491 = EDGE_CURVE('',#16492,#16484,#16494,.T.); +#16492 = VERTEX_POINT('',#16493); +#16493 = CARTESIAN_POINT('',(66.535067655655,103.20824038292, + 122.4695165413)); +#16494 = LINE('',#16495,#16496); +#16495 = CARTESIAN_POINT('',(66.328361655655,103.32577159754, + 122.10779265695)); +#16496 = VECTOR('',#16497,1.); +#16497 = DIRECTION('',(-0.477513359189,0.271509898621,-0.835621545167)); +#16498 = ORIENTED_EDGE('',*,*,#16499,.F.); +#16499 = EDGE_CURVE('',#16500,#16492,#16502,.T.); +#16500 = VERTEX_POINT('',#16501); +#16501 = CARTESIAN_POINT('',(66.872687655655,103.13414459702, + 122.69755992172)); +#16502 = LINE('',#16503,#16504); +#16503 = CARTESIAN_POINT('',(66.535067655655,103.20824038292, + 122.4695165413)); +#16504 = VECTOR('',#16505,1.); +#16505 = DIRECTION('',(-0.815304550829,0.178930843661,-0.550692511828)); +#16506 = ORIENTED_EDGE('',*,*,#16507,.F.); +#16507 = EDGE_CURVE('',#16508,#16500,#16510,.T.); +#16508 = VERTEX_POINT('',#16509); +#16509 = CARTESIAN_POINT('',(67.345354655655,103.10944610473, + 122.77357406485)); +#16510 = LINE('',#16511,#16512); +#16511 = CARTESIAN_POINT('',(66.872687655655,103.13414459702, + 122.69755992172)); +#16512 = VECTOR('',#16513,1.); +#16513 = DIRECTION('',(-0.98600277272,5.152206919953E-02,-0.158568624177 + )); +#16514 = ORIENTED_EDGE('',*,*,#16515,.F.); +#16515 = EDGE_CURVE('',#16516,#16508,#16518,.T.); +#16516 = VERTEX_POINT('',#16517); +#16517 = CARTESIAN_POINT('',(67.968228655655,103.1605467,122.61630260403 + )); +#16518 = LINE('',#16519,#16520); +#16519 = CARTESIAN_POINT('',(67.345354655655,103.10944610473, + 122.77357406485)); +#16520 = VECTOR('',#16521,1.); +#16521 = DIRECTION('',(-0.966518193451,-7.929317169974E-02, + 0.244039289151)); +#16522 = ORIENTED_EDGE('',*,*,#16523,.F.); +#16523 = EDGE_CURVE('',#16524,#16516,#16526,.T.); +#16524 = VERTEX_POINT('',#16525); +#16525 = CARTESIAN_POINT('',(68.381640655655,103.30022145441, + 122.18642791183)); +#16526 = LINE('',#16527,#16528); +#16527 = CARTESIAN_POINT('',(67.968228655655,103.1605467,122.61630260403 + )); +#16528 = VECTOR('',#16529,1.); +#16529 = DIRECTION('',(-0.674909328376,-0.228023847125,0.701785240379)); +#16530 = ORIENTED_EDGE('',*,*,#16531,.F.); +#16531 = EDGE_CURVE('',#16532,#16524,#16534,.T.); +#16532 = VERTEX_POINT('',#16533); +#16533 = CARTESIAN_POINT('',(68.524956655655,103.51143673318, + 121.53637412555)); +#16534 = LINE('',#16535,#16536); +#16535 = CARTESIAN_POINT('',(68.381640655655,103.30022145441, + 122.18642791183)); +#16536 = VECTOR('',#16537,1.); +#16537 = DIRECTION('',(-0.20521486642,-0.302440168715,0.930815128233)); +#16538 = ORIENTED_EDGE('',*,*,#16539,.F.); +#16539 = EDGE_CURVE('',#16540,#16532,#16542,.T.); +#16540 = VERTEX_POINT('',#16541); +#16541 = CARTESIAN_POINT('',(68.524956655655,104.56070084741, + 118.30707123503)); +#16542 = LINE('',#16543,#16544); +#16543 = CARTESIAN_POINT('',(68.524956655655,103.51143673318, + 121.53637412555)); +#16544 = VECTOR('',#16545,1.); +#16545 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16546 = ORIENTED_EDGE('',*,*,#16547,.F.); +#16547 = EDGE_CURVE('',#16364,#16540,#16548,.T.); +#16548 = LINE('',#16549,#16550); +#16549 = CARTESIAN_POINT('',(68.524956655655,104.56070084741, + 118.30707123503)); +#16550 = VECTOR('',#16551,1.); +#16551 = DIRECTION('',(-1.,0.,0.)); +#16552 = FACE_BOUND('',#16553,.T.); +#16553 = EDGE_LOOP('',(#16554,#16564,#16572,#16580,#16588,#16596,#16604, + #16612,#16620,#16628,#16636,#16644,#16652,#16660,#16668,#16676, + #16688,#16699,#16707,#16715,#16723,#16731,#16744,#16754,#16762, + #16770,#16778,#16786,#16794,#16802,#16810,#16818,#16826)); +#16554 = ORIENTED_EDGE('',*,*,#16555,.F.); +#16555 = EDGE_CURVE('',#16556,#16558,#16560,.T.); +#16556 = VERTEX_POINT('',#16557); +#16557 = CARTESIAN_POINT('',(55.185518655655,102.80284500522, + 123.7171952213)); +#16558 = VERTEX_POINT('',#16559); +#16559 = CARTESIAN_POINT('',(55.185518655655,102.81306419722, + 123.6857437823)); +#16560 = LINE('',#16561,#16562); +#16561 = CARTESIAN_POINT('',(55.185518655655,102.81306419722, + 123.6857437823)); +#16562 = VECTOR('',#16563,1.); +#16563 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16564 = ORIENTED_EDGE('',*,*,#16565,.F.); +#16565 = EDGE_CURVE('',#16566,#16556,#16568,.T.); +#16566 = VERTEX_POINT('',#16567); +#16567 = CARTESIAN_POINT('',(55.095946655655,102.60142371106, + 124.33710622235)); +#16568 = LINE('',#16569,#16570); +#16569 = CARTESIAN_POINT('',(55.185518655655,102.80284500522, + 123.7171952213)); +#16570 = VECTOR('',#16571,1.); +#16571 = DIRECTION('',(0.136140342999,0.306139910613,-0.942201762967)); +#16572 = ORIENTED_EDGE('',*,*,#16573,.F.); +#16573 = EDGE_CURVE('',#16574,#16566,#16576,.T.); +#16574 = VERTEX_POINT('',#16575); +#16575 = CARTESIAN_POINT('',(54.827228655655,102.42299791654, + 124.88624435275)); +#16576 = LINE('',#16577,#16578); +#16577 = CARTESIAN_POINT('',(55.095946655655,102.60142371106, + 124.33710622235)); +#16578 = VECTOR('',#16579,1.); +#16579 = DIRECTION('',(0.421938306747,0.280162391872,-0.862251181199)); +#16580 = ORIENTED_EDGE('',*,*,#16581,.F.); +#16581 = EDGE_CURVE('',#16582,#16574,#16584,.T.); +#16582 = VERTEX_POINT('',#16583); +#16583 = CARTESIAN_POINT('',(54.406926655655,102.27267721766, + 125.34888389299)); +#16584 = LINE('',#16585,#16586); +#16585 = CARTESIAN_POINT('',(54.827228655655,102.42299791654, + 124.88624435275)); +#16586 = VECTOR('',#16587,1.); +#16587 = DIRECTION('',(0.653787194936,0.233826505849,-0.719643987607)); +#16588 = ORIENTED_EDGE('',*,*,#16589,.F.); +#16589 = EDGE_CURVE('',#16590,#16582,#16592,.T.); +#16590 = VERTEX_POINT('',#16591); +#16591 = CARTESIAN_POINT('',(53.862600655655,102.1589784318, + 125.69881277442)); +#16592 = LINE('',#16593,#16594); +#16593 = CARTESIAN_POINT('',(54.406926655655,102.27267721766, + 125.34888389299)); +#16594 = VECTOR('',#16595,1.); +#16595 = DIRECTION('',(0.828483636637,0.17305361785,-0.532604270706)); +#16596 = ORIENTED_EDGE('',*,*,#16597,.F.); +#16597 = EDGE_CURVE('',#16598,#16590,#16600,.T.); +#16598 = VERTEX_POINT('',#16599); +#16599 = CARTESIAN_POINT('',(53.219055655655,102.08616012217, + 125.92292448721)); +#16600 = LINE('',#16601,#16602); +#16601 = CARTESIAN_POINT('',(53.862600655655,102.1589784318, + 125.69881277442)); +#16602 = VECTOR('',#16603,1.); +#16603 = DIRECTION('',(0.939027849092,0.106252741728,-0.327012313996)); +#16604 = ORIENTED_EDGE('',*,*,#16605,.F.); +#16605 = EDGE_CURVE('',#16606,#16598,#16608,.T.); +#16606 = VERTEX_POINT('',#16607); +#16607 = CARTESIAN_POINT('',(52.512120655655,102.06188745529, + 125.99762807445)); +#16608 = LINE('',#16609,#16610); +#16609 = CARTESIAN_POINT('',(53.219055655655,102.08616012217, + 125.92292448721)); +#16610 = VECTOR('',#16611,1.); +#16611 = DIRECTION('',(0.993883786109,3.41250752217E-02,-0.105026182215) + ); +#16612 = ORIENTED_EDGE('',*,*,#16613,.F.); +#16613 = EDGE_CURVE('',#16614,#16606,#16616,.T.); +#16614 = VERTEX_POINT('',#16615); +#16615 = CARTESIAN_POINT('',(51.829993655655,102.08445682049, + 125.92816671072)); +#16616 = LINE('',#16617,#16618); +#16617 = CARTESIAN_POINT('',(52.512120655655,102.06188745529, + 125.99762807445)); +#16618 = VECTOR('',#16619,1.); +#16619 = DIRECTION('',(0.994316722842,-3.289870836875E-02,0.101251813141 + )); +#16620 = ORIENTED_EDGE('',*,*,#16621,.F.); +#16621 = EDGE_CURVE('',#16622,#16614,#16624,.T.); +#16622 = VERTEX_POINT('',#16623); +#16623 = CARTESIAN_POINT('',(51.227790655655,102.15216522511, + 125.71978166849)); +#16624 = LINE('',#16625,#16626); +#16625 = CARTESIAN_POINT('',(51.829993655655,102.08445682049, + 125.92816671072)); +#16626 = VECTOR('',#16627,1.); +#16627 = DIRECTION('',(0.939730213375,-0.105658114492,0.32518223954)); +#16628 = ORIENTED_EDGE('',*,*,#16629,.F.); +#16629 = EDGE_CURVE('',#16630,#16622,#16632,.T.); +#16630 = VERTEX_POINT('',#16631); +#16631 = CARTESIAN_POINT('',(50.726182655655,102.25862466984, + 125.39213318807)); +#16632 = LINE('',#16633,#16634); +#16633 = CARTESIAN_POINT('',(51.227790655655,102.15216522511, + 125.71978166849)); +#16634 = VECTOR('',#16635,1.); +#16635 = DIRECTION('',(0.824306893797,-0.174947876036,0.538434197939)); +#16636 = ORIENTED_EDGE('',*,*,#16637,.F.); +#16637 = EDGE_CURVE('',#16638,#16630,#16640,.T.); +#16638 = VERTEX_POINT('',#16639); +#16639 = CARTESIAN_POINT('',(50.345840655655,102.39744777341, + 124.96487960763)); +#16640 = LINE('',#16641,#16642); +#16641 = CARTESIAN_POINT('',(50.726182655655,102.25862466984, + 125.39213318807)); +#16642 = VECTOR('',#16643,1.); +#16643 = DIRECTION('',(0.64615507419,-0.235843669084,0.725852177686)); +#16644 = ORIENTED_EDGE('',*,*,#16645,.F.); +#16645 = EDGE_CURVE('',#16646,#16638,#16648,.T.); +#16646 = VERTEX_POINT('',#16647); +#16647 = CARTESIAN_POINT('',(50.101933655655,102.56182102011, + 124.45899077231)); +#16648 = LINE('',#16649,#16650); +#16649 = CARTESIAN_POINT('',(50.345840655655,102.39744777341, + 124.96487960763)); +#16650 = VECTOR('',#16651,1.); +#16651 = DIRECTION('',(0.416808577567,-0.28089468177,0.864504937765)); +#16652 = ORIENTED_EDGE('',*,*,#16653,.F.); +#16653 = EDGE_CURVE('',#16654,#16646,#16656,.T.); +#16654 = VERTEX_POINT('',#16655); +#16655 = CARTESIAN_POINT('',(50.019741113839,102.74693462459, + 123.88926967932)); +#16656 = LINE('',#16657,#16658); +#16657 = CARTESIAN_POINT('',(50.101933655655,102.56182102011, + 124.45899077231)); +#16658 = VECTOR('',#16659,1.); +#16659 = DIRECTION('',(0.135933492782,-0.306148687719,0.94222877612)); +#16660 = ORIENTED_EDGE('',*,*,#16661,.F.); +#16661 = EDGE_CURVE('',#16662,#16654,#16664,.T.); +#16662 = VERTEX_POINT('',#16663); +#16663 = CARTESIAN_POINT('',(50.185990655655,103.0089491429, + 123.08287190979)); +#16664 = LINE('',#16665,#16666); +#16665 = CARTESIAN_POINT('',(50.019741113839,102.74693462459, + 123.88926967932)); +#16666 = VECTOR('',#16667,1.); +#16667 = DIRECTION('',(-0.192409187786,-0.303242944955,0.933285819452)); +#16668 = ORIENTED_EDGE('',*,*,#16669,.F.); +#16669 = EDGE_CURVE('',#16670,#16662,#16672,.T.); +#16670 = VERTEX_POINT('',#16671); +#16671 = CARTESIAN_POINT('',(50.748230655655,103.29340886575, + 122.20739490379)); +#16672 = LINE('',#16673,#16674); +#16673 = CARTESIAN_POINT('',(50.185990655655,103.0089491429, + 123.08287190979)); +#16674 = VECTOR('',#16675,1.); +#16675 = DIRECTION('',(-0.521242956754,-0.263717677531,0.8116395546)); +#16676 = ORIENTED_EDGE('',*,*,#16677,.F.); +#16677 = EDGE_CURVE('',#16678,#16670,#16680,.T.); +#16678 = VERTEX_POINT('',#16679); +#16679 = CARTESIAN_POINT('',(51.886158370794,103.6810650187, + 121.01431194377)); +#16680 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#16681,#16682,#16683,#16684, + #16685,#16686,#16687),.UNSPECIFIED.,.F.,.F.,(4,2,1,4),(0.,0.25,0.5, + 1.),.UNSPECIFIED.); +#16681 = CARTESIAN_POINT('',(51.886158370794,103.6810650187, + 121.01431194377)); +#16682 = CARTESIAN_POINT('',(51.789081784394,103.6493983359, + 121.11177197213)); +#16683 = CARTESIAN_POINT('',(51.694459713652,103.61703544146, + 121.21137471953)); +#16684 = CARTESIAN_POINT('',(51.505213902053,103.55231012632, + 121.41057875638)); +#16685 = CARTESIAN_POINT('',(51.221345184654,103.45522215361, + 121.70938481166)); +#16686 = CARTESIAN_POINT('',(50.937476467254,103.35813418089, + 122.00819086694)); +#16687 = CARTESIAN_POINT('',(50.748230655655,103.29340886575, + 122.20739490379)); +#16688 = ORIENTED_EDGE('',*,*,#16689,.F.); +#16689 = EDGE_CURVE('',#16690,#16678,#16692,.T.); +#16690 = VERTEX_POINT('',#16691); +#16691 = CARTESIAN_POINT('',(53.797728648721,104.28816454529, + 119.14585172535)); +#16692 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#16693,#16694,#16695,#16696, + #16697,#16698),.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,0.5,0.75,1.), + .UNSPECIFIED.); +#16693 = CARTESIAN_POINT('',(53.797728648721,104.28816454529, + 119.14585172535)); +#16694 = CARTESIAN_POINT('',(53.478735358549,104.18710074152, + 119.45689413044)); +#16695 = CARTESIAN_POINT('',(53.000245423291,104.03550503586, + 119.92345773806)); +#16696 = CARTESIAN_POINT('',(52.362258842948,103.83337742831, + 120.54554254822)); +#16697 = CARTESIAN_POINT('',(52.043265164732,103.73231374093, + 120.85658459508)); +#16698 = CARTESIAN_POINT('',(51.886158370794,103.6810650187, + 121.01431194377)); +#16699 = ORIENTED_EDGE('',*,*,#16700,.F.); +#16700 = EDGE_CURVE('',#16701,#16690,#16703,.T.); +#16701 = VERTEX_POINT('',#16702); +#16702 = CARTESIAN_POINT('',(49.888330655655,104.28816454529, + 119.14585172535)); +#16703 = LINE('',#16704,#16705); +#16704 = CARTESIAN_POINT('',(53.797728648721,104.28816454529, + 119.14585172535)); +#16705 = VECTOR('',#16706,1.); +#16706 = DIRECTION('',(1.,0.,0.)); +#16707 = ORIENTED_EDGE('',*,*,#16708,.F.); +#16708 = EDGE_CURVE('',#16709,#16701,#16711,.T.); +#16709 = VERTEX_POINT('',#16710); +#16710 = CARTESIAN_POINT('',(49.888330655655,104.56070084741, + 118.30707123503)); +#16711 = LINE('',#16712,#16713); +#16712 = CARTESIAN_POINT('',(49.888330655655,104.28816454529, + 119.14585172535)); +#16713 = VECTOR('',#16714,1.); +#16714 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16715 = ORIENTED_EDGE('',*,*,#16716,.F.); +#16716 = EDGE_CURVE('',#16717,#16709,#16719,.T.); +#16717 = VERTEX_POINT('',#16718); +#16718 = CARTESIAN_POINT('',(55.135908655655,104.56070084741, + 118.30707123503)); +#16719 = LINE('',#16720,#16721); +#16720 = CARTESIAN_POINT('',(49.888330655655,104.56070084741, + 118.30707123503)); +#16721 = VECTOR('',#16722,1.); +#16722 = DIRECTION('',(-1.,0.,0.)); +#16723 = ORIENTED_EDGE('',*,*,#16724,.F.); +#16724 = EDGE_CURVE('',#16725,#16717,#16727,.T.); +#16725 = VERTEX_POINT('',#16726); +#16726 = CARTESIAN_POINT('',(55.135908655655,104.34948525962, + 118.95712597237)); +#16727 = LINE('',#16728,#16729); +#16728 = CARTESIAN_POINT('',(55.135908655655,104.56070084741, + 118.30707123503)); +#16729 = VECTOR('',#16730,1.); +#16730 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#16731 = ORIENTED_EDGE('',*,*,#16732,.F.); +#16732 = EDGE_CURVE('',#16733,#16725,#16735,.T.); +#16733 = VERTEX_POINT('',#16734); +#16734 = CARTESIAN_POINT('',(52.338373215183,103.44595939773, + 121.73789264294)); +#16735 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#16736,#16737,#16738,#16739, + #16740,#16741,#16742,#16743),.UNSPECIFIED.,.F.,.F.,(4,2,1,1,4),(0., + 0.125,0.25,0.5,1.),.UNSPECIFIED.); +#16736 = CARTESIAN_POINT('',(52.338373215183,103.44595939773, + 121.73789264294)); +#16737 = CARTESIAN_POINT('',(52.452445997017,103.48433895686, + 121.61977250563)); +#16738 = CARTESIAN_POINT('',(52.569119185825,103.52195374902, + 121.50400607904)); +#16739 = CARTESIAN_POINT('',(52.802463683083,103.59718388635, + 121.27247152389)); +#16740 = CARTESIAN_POINT('',(53.152480428969,103.71002909234, + 120.92516969116)); +#16741 = CARTESIAN_POINT('',(53.969186169369,103.97333457299, + 120.11479874813)); +#16742 = CARTESIAN_POINT('',(54.669219661141,104.19902498497, + 119.42019508268)); +#16743 = CARTESIAN_POINT('',(55.135908655655,104.34948525962, + 118.95712597237)); +#16744 = ORIENTED_EDGE('',*,*,#16745,.F.); +#16745 = EDGE_CURVE('',#16746,#16733,#16748,.T.); +#16746 = VERTEX_POINT('',#16747); +#16747 = CARTESIAN_POINT('',(51.514420655655,103.1605467,122.61630260403 + )); +#16748 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#16749,#16750,#16751,#16752, + #16753),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#16749 = CARTESIAN_POINT('',(51.514420655655,103.1605467,122.61630260403 + )); +#16750 = CARTESIAN_POINT('',(51.651301054317,103.20823888271, + 122.46952115845)); +#16751 = CARTESIAN_POINT('',(51.925062300515,103.30362312366, + 122.17595865037)); +#16752 = CARTESIAN_POINT('',(52.198822200091,103.39900773801, + 121.88239499309)); +#16753 = CARTESIAN_POINT('',(52.338373215183,103.44595939773, + 121.73789264294)); +#16754 = ORIENTED_EDGE('',*,*,#16755,.F.); +#16755 = EDGE_CURVE('',#16756,#16746,#16758,.T.); +#16756 = VERTEX_POINT('',#16757); +#16757 = CARTESIAN_POINT('',(51.123060655655,102.95614462792, + 123.24538749624)); +#16758 = LINE('',#16759,#16760); +#16759 = CARTESIAN_POINT('',(51.514420655655,103.1605467,122.61630260403 + )); +#16760 = VECTOR('',#16761,1.); +#16761 = DIRECTION('',(0.509209367096,0.265953213814,-0.818519827813)); +#16762 = ORIENTED_EDGE('',*,*,#16763,.F.); +#16763 = EDGE_CURVE('',#16764,#16756,#16766,.T.); +#16764 = VERTEX_POINT('',#16765); +#16765 = CARTESIAN_POINT('',(51.011637368811,102.76161760768, + 123.84408010396)); +#16766 = LINE('',#16767,#16768); +#16767 = CARTESIAN_POINT('',(51.123060655655,102.95614462792, + 123.24538749624)); +#16768 = VECTOR('',#16769,1.); +#16769 = DIRECTION('',(0.174292871275,0.304287136542,-0.936499510709)); +#16770 = ORIENTED_EDGE('',*,*,#16771,.F.); +#16771 = EDGE_CURVE('',#16772,#16764,#16774,.T.); +#16772 = VERTEX_POINT('',#16773); +#16773 = CARTESIAN_POINT('',(51.205740655655,102.53712190979, + 124.53500681755)); +#16774 = LINE('',#16775,#16776); +#16775 = CARTESIAN_POINT('',(51.011637368811,102.76161760768, + 123.84408010396)); +#16776 = VECTOR('',#16777,1.); +#16777 = DIRECTION('',(-0.258127455384,0.298544677863,-0.918826040171)); +#16778 = ORIENTED_EDGE('',*,*,#16779,.F.); +#16779 = EDGE_CURVE('',#16780,#16772,#16782,.T.); +#16780 = VERTEX_POINT('',#16781); +#16781 = CARTESIAN_POINT('',(51.729390655655,102.38552342564, + 125.00157897648)); +#16782 = LINE('',#16783,#16784); +#16783 = CARTESIAN_POINT('',(51.205740655655,102.53712190979, + 124.53500681755)); +#16784 = VECTOR('',#16785,1.); +#16785 = DIRECTION('',(-0.729772802603,0.211271747636,-0.650227579569)); +#16786 = ORIENTED_EDGE('',*,*,#16787,.F.); +#16787 = EDGE_CURVE('',#16788,#16780,#16790,.T.); +#16788 = VERTEX_POINT('',#16789); +#16789 = CARTESIAN_POINT('',(52.495580655655,102.32931292534, + 125.17457710785)); +#16790 = LINE('',#16791,#16792); +#16791 = CARTESIAN_POINT('',(51.729390655655,102.38552342564, + 125.00157897648)); +#16792 = VECTOR('',#16793,1.); +#16793 = DIRECTION('',(-0.972956281604,7.137963083954E-02, + -0.219683914724)); +#16794 = ORIENTED_EDGE('',*,*,#16795,.F.); +#16795 = EDGE_CURVE('',#16796,#16788,#16798,.T.); +#16796 = VERTEX_POINT('',#16797); +#16797 = CARTESIAN_POINT('',(53.383042655655,102.39404024302, + 124.97536690783)); +#16798 = LINE('',#16799,#16800); +#16799 = CARTESIAN_POINT('',(52.495580655655,102.32931292534, + 125.17457710785)); +#16800 = VECTOR('',#16801,1.); +#16801 = DIRECTION('',(-0.973258640502,-7.098492240171E-02, + 0.218469127063)); +#16802 = ORIENTED_EDGE('',*,*,#16803,.F.); +#16803 = EDGE_CURVE('',#16804,#16796,#16806,.T.); +#16804 = VERTEX_POINT('',#16805); +#16805 = CARTESIAN_POINT('',(54.000404655655,102.56437535459, + 124.45112933915)); +#16806 = LINE('',#16807,#16808); +#16807 = CARTESIAN_POINT('',(53.383042655655,102.39404024302, + 124.97536690783)); +#16808 = VECTOR('',#16809,1.); +#16809 = DIRECTION('',(-0.745937704503,-0.205810176399,0.633418591685)); +#16810 = ORIENTED_EDGE('',*,*,#16811,.F.); +#16811 = EDGE_CURVE('',#16812,#16804,#16814,.T.); +#16812 = VERTEX_POINT('',#16813); +#16813 = CARTESIAN_POINT('',(54.226402655655,102.80454768886, + 123.71195489989)); +#16814 = LINE('',#16815,#16816); +#16815 = CARTESIAN_POINT('',(54.000404655655,102.56437535459, + 124.45112933915)); +#16816 = VECTOR('',#16817,1.); +#16817 = DIRECTION('',(-0.279214926957,-0.296726965589,0.913231697028)); +#16818 = ORIENTED_EDGE('',*,*,#16819,.F.); +#16819 = EDGE_CURVE('',#16820,#16812,#16822,.T.); +#16820 = VERTEX_POINT('',#16821); +#16821 = CARTESIAN_POINT('',(54.226402655655,102.81306419722, + 123.6857437823)); +#16822 = LINE('',#16823,#16824); +#16823 = CARTESIAN_POINT('',(54.226402655655,102.80454768886, + 123.71195489989)); +#16824 = VECTOR('',#16825,1.); +#16825 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#16826 = ORIENTED_EDGE('',*,*,#16827,.F.); +#16827 = EDGE_CURVE('',#16558,#16820,#16828,.T.); +#16828 = LINE('',#16829,#16830); +#16829 = CARTESIAN_POINT('',(54.226402655655,102.81306419722, + 123.6857437823)); +#16830 = VECTOR('',#16831,1.); +#16831 = DIRECTION('',(-1.,0.,0.)); +#16832 = FACE_BOUND('',#16833,.T.); +#16833 = EDGE_LOOP('',(#16834,#16844,#16852,#16860,#16868,#16876,#16884, + #16892,#16900,#16908,#16916,#16924,#16932,#16940,#16948,#16956, + #16964,#16972,#16980,#16988,#16996,#17004,#17012,#17020)); +#16834 = ORIENTED_EDGE('',*,*,#16835,.F.); +#16835 = EDGE_CURVE('',#16836,#16838,#16840,.T.); +#16836 = VERTEX_POINT('',#16837); +#16837 = CARTESIAN_POINT('',(48.891037507081,103.3308808838, + 122.09206789074)); +#16838 = VERTEX_POINT('',#16839); +#16839 = CARTESIAN_POINT('',(48.803812655655,103.69625052701, + 120.96757575485)); +#16840 = LINE('',#16841,#16842); +#16841 = CARTESIAN_POINT('',(48.803812655655,103.69625052701, + 120.96757575485)); +#16842 = VECTOR('',#16843,1.); +#16843 = DIRECTION('',(-7.357183209831E-02,0.308179533752, + -0.948479077523)); +#16844 = ORIENTED_EDGE('',*,*,#16845,.F.); +#16845 = EDGE_CURVE('',#16846,#16836,#16848,.T.); +#16846 = VERTEX_POINT('',#16847); +#16847 = CARTESIAN_POINT('',(48.803812655655,102.96551155106, + 123.21655907112)); +#16848 = LINE('',#16849,#16850); +#16849 = CARTESIAN_POINT('',(48.891037507081,103.3308808838, + 122.09206789074)); +#16850 = VECTOR('',#16851,1.); +#16851 = DIRECTION('',(7.357189427608E-02,0.308179532334,-0.94847907316) + ); +#16852 = ORIENTED_EDGE('',*,*,#16853,.F.); +#16853 = EDGE_CURVE('',#16854,#16846,#16856,.T.); +#16854 = VERTEX_POINT('',#16855); +#16855 = CARTESIAN_POINT('',(48.543360655655,102.65465003424, + 124.17329244376)); +#16856 = LINE('',#16857,#16858); +#16857 = CARTESIAN_POINT('',(48.803812655655,102.96551155106, + 123.21655907112)); +#16858 = VECTOR('',#16859,1.); +#16859 = DIRECTION('',(0.250642232811,0.299153105636,-0.920698588312)); +#16860 = ORIENTED_EDGE('',*,*,#16861,.F.); +#16861 = EDGE_CURVE('',#16862,#16854,#16864,.T.); +#16862 = VERTEX_POINT('',#16863); +#16863 = CARTESIAN_POINT('',(48.120305655655,102.40297979565, + 124.94785379387)); +#16864 = LINE('',#16865,#16866); +#16865 = CARTESIAN_POINT('',(48.543360655655,102.65465003424, + 124.17329244376)); +#16866 = VECTOR('',#16867,1.); +#16867 = DIRECTION('',(0.46097149669,0.274226298132,-0.843981763223)); +#16868 = ORIENTED_EDGE('',*,*,#16869,.F.); +#16869 = EDGE_CURVE('',#16870,#16862,#16872,.T.); +#16870 = VERTEX_POINT('',#16871); +#16871 = CARTESIAN_POINT('',(47.545660655655,102.21688883458, + 125.52058288116)); +#16872 = LINE('',#16873,#16874); +#16873 = CARTESIAN_POINT('',(48.120305655655,102.40297979565, + 124.94785379387)); +#16874 = VECTOR('',#16875,1.); +#16875 = DIRECTION('',(0.690359359732,0.223563481335,-0.688057646018)); +#16876 = ORIENTED_EDGE('',*,*,#16877,.F.); +#16877 = EDGE_CURVE('',#16878,#16870,#16880,.T.); +#16878 = VERTEX_POINT('',#16879); +#16879 = CARTESIAN_POINT('',(46.824950655655,102.10063509622, + 125.87837509787)); +#16880 = LINE('',#16881,#16882); +#16881 = CARTESIAN_POINT('',(47.545660655655,102.21688883458, + 125.52058288116)); +#16882 = VECTOR('',#16883,1.); +#16883 = DIRECTION('',(0.886492823333,0.142995247394,-0.4400941188)); +#16884 = ORIENTED_EDGE('',*,*,#16885,.F.); +#16885 = EDGE_CURVE('',#16886,#16878,#16888,.T.); +#16886 = VERTEX_POINT('',#16887); +#16887 = CARTESIAN_POINT('',(45.974700655655,102.06188374709, + 125.99763948713)); +#16888 = LINE('',#16889,#16890); +#16889 = CARTESIAN_POINT('',(46.824950655655,102.10063509622, + 125.87837509787)); +#16890 = VECTOR('',#16891,1.); +#16891 = DIRECTION('',(0.989297875987,4.508865320149E-02,-0.138768605672 + )); +#16892 = ORIENTED_EDGE('',*,*,#16893,.F.); +#16893 = EDGE_CURVE('',#16894,#16886,#16896,.T.); +#16894 = VERTEX_POINT('',#16895); +#16895 = CARTESIAN_POINT('',(45.124448655655,102.10063509622, + 125.87837509787)); +#16896 = LINE('',#16897,#16898); +#16897 = CARTESIAN_POINT('',(45.974700655655,102.06188374709, + 125.99763948713)); +#16898 = VECTOR('',#16899,1.); +#16899 = DIRECTION('',(0.98929792553,-4.508854939996E-02,0.138768286203) + ); +#16900 = ORIENTED_EDGE('',*,*,#16901,.F.); +#16901 = EDGE_CURVE('',#16902,#16894,#16904,.T.); +#16902 = VERTEX_POINT('',#16903); +#16903 = CARTESIAN_POINT('',(44.403730655655,102.21688883458, + 125.52058288116)); +#16904 = LINE('',#16905,#16906); +#16905 = CARTESIAN_POINT('',(45.124448655655,102.10063509622, + 125.87837509787)); +#16906 = VECTOR('',#16907,1.); +#16907 = DIRECTION('',(0.886494930395,-0.142994000016,0.440090279764)); +#16908 = ORIENTED_EDGE('',*,*,#16909,.F.); +#16909 = EDGE_CURVE('',#16910,#16902,#16912,.T.); +#16910 = VERTEX_POINT('',#16911); +#16911 = CARTESIAN_POINT('',(43.824958655655,102.40297979565, + 124.94785379387)); +#16912 = LINE('',#16913,#16914); +#16913 = CARTESIAN_POINT('',(44.403730655655,102.21688883458, + 125.52058288116)); +#16914 = VECTOR('',#16915,1.); +#16915 = DIRECTION('',(0.692941138044,-0.222799448382,0.685706194377)); +#16916 = ORIENTED_EDGE('',*,*,#16917,.F.); +#16917 = EDGE_CURVE('',#16918,#16910,#16920,.T.); +#16918 = VERTEX_POINT('',#16919); +#16919 = CARTESIAN_POINT('',(43.400520655655,102.65465003424, + 124.17329244376)); +#16920 = LINE('',#16921,#16922); +#16921 = CARTESIAN_POINT('',(43.824958655655,102.40297979565, + 124.94785379387)); +#16922 = VECTOR('',#16923,1.); +#16923 = DIRECTION('',(0.462156992867,-0.274035691107,0.84339513512)); +#16924 = ORIENTED_EDGE('',*,*,#16925,.F.); +#16925 = EDGE_CURVE('',#16926,#16918,#16928,.T.); +#16926 = VERTEX_POINT('',#16927); +#16927 = CARTESIAN_POINT('',(43.135935655655,102.96551155106, + 123.21655907112)); +#16928 = LINE('',#16929,#16930); +#16929 = CARTESIAN_POINT('',(43.400520655655,102.65465003424, + 124.17329244376)); +#16930 = VECTOR('',#16931,1.); +#16931 = DIRECTION('',(0.254364109788,-0.298852969714,0.919774864924)); +#16932 = ORIENTED_EDGE('',*,*,#16933,.F.); +#16933 = EDGE_CURVE('',#16934,#16926,#16936,.T.); +#16934 = VERTEX_POINT('',#16935); +#16935 = CARTESIAN_POINT('',(43.047327351254,103.3308808838, + 122.09206789074)); +#16936 = LINE('',#16937,#16938); +#16937 = CARTESIAN_POINT('',(43.135935655655,102.96551155106, + 123.21655907112)); +#16938 = VECTOR('',#16939,1.); +#16939 = DIRECTION('',(7.473233440423E-02,-0.308152868291,0.948397009674 + )); +#16940 = ORIENTED_EDGE('',*,*,#16941,.F.); +#16941 = EDGE_CURVE('',#16942,#16934,#16944,.T.); +#16942 = VERTEX_POINT('',#16943); +#16943 = CARTESIAN_POINT('',(43.135935655655,103.69625052701, + 120.96757575485)); +#16944 = LINE('',#16945,#16946); +#16945 = CARTESIAN_POINT('',(43.047327351254,103.3308808838, + 122.09206789074)); +#16946 = VECTOR('',#16947,1.); +#16947 = DIRECTION('',(-7.473227125666E-02,-0.308152869754, + 0.948397014175)); +#16948 = ORIENTED_EDGE('',*,*,#16949,.F.); +#16949 = EDGE_CURVE('',#16950,#16942,#16952,.T.); +#16950 = VERTEX_POINT('',#16951); +#16951 = CARTESIAN_POINT('',(43.400520655655,104.00711173481, + 120.01084333326)); +#16952 = LINE('',#16953,#16954); +#16953 = CARTESIAN_POINT('',(43.135935655655,103.69625052701, + 120.96757575485)); +#16954 = VECTOR('',#16955,1.); +#16955 = DIRECTION('',(-0.254364346283,-0.298852950492,0.919774805766)); +#16956 = ORIENTED_EDGE('',*,*,#16957,.F.); +#16957 = EDGE_CURVE('',#16958,#16950,#16960,.T.); +#16958 = VERTEX_POINT('',#16959); +#16959 = CARTESIAN_POINT('',(43.824958655655,104.25920779882, + 119.23497142727)); +#16960 = LINE('',#16961,#16962); +#16961 = CARTESIAN_POINT('',(43.400520655655,104.00711173481, + 120.01084333326)); +#16962 = VECTOR('',#16963,1.); +#16963 = DIRECTION('',(-0.461542750808,-0.274134528132,0.843699324204)); +#16964 = ORIENTED_EDGE('',*,*,#16965,.F.); +#16965 = EDGE_CURVE('',#16966,#16958,#16968,.T.); +#16966 = VERTEX_POINT('',#16967); +#16967 = CARTESIAN_POINT('',(44.403730655655,104.44657623614, + 118.65831067235)); +#16968 = LINE('',#16969,#16970); +#16969 = CARTESIAN_POINT('',(43.824958655655,104.25920779882, + 119.23497142727)); +#16970 = VECTOR('',#16971,1.); +#16971 = DIRECTION('',(-0.690473107898,-0.223529934477,0.687954399406)); +#16972 = ORIENTED_EDGE('',*,*,#16973,.F.); +#16973 = EDGE_CURVE('',#16974,#16966,#16976,.T.); +#16974 = VERTEX_POINT('',#16975); +#16975 = CARTESIAN_POINT('',(45.124448655655,104.56282997451, + 118.30051845564)); +#16976 = LINE('',#16977,#16978); +#16977 = CARTESIAN_POINT('',(44.403730655655,104.44657623614, + 118.65831067235)); +#16978 = VECTOR('',#16979,1.); +#16979 = DIRECTION('',(-0.886494930395,-0.142994000016,0.440090279764)); +#16980 = ORIENTED_EDGE('',*,*,#16981,.F.); +#16981 = EDGE_CURVE('',#16982,#16974,#16984,.T.); +#16982 = VERTEX_POINT('',#16983); +#16983 = CARTESIAN_POINT('',(45.974700655655,104.60158132363, + 118.18125406638)); +#16984 = LINE('',#16985,#16986); +#16985 = CARTESIAN_POINT('',(45.124448655655,104.56282997451, + 118.30051845564)); +#16986 = VECTOR('',#16987,1.); +#16987 = DIRECTION('',(-0.98929792553,-4.508854939996E-02,0.138768286203 + )); +#16988 = ORIENTED_EDGE('',*,*,#16989,.F.); +#16989 = EDGE_CURVE('',#16990,#16982,#16992,.T.); +#16990 = VERTEX_POINT('',#16991); +#16991 = CARTESIAN_POINT('',(46.824950655655,104.56282997451, + 118.30051845564)); +#16992 = LINE('',#16993,#16994); +#16993 = CARTESIAN_POINT('',(45.974700655655,104.60158132363, + 118.18125406638)); +#16994 = VECTOR('',#16995,1.); +#16995 = DIRECTION('',(-0.989297875987,4.508865320149E-02, + -0.138768605672)); +#16996 = ORIENTED_EDGE('',*,*,#16997,.F.); +#16997 = EDGE_CURVE('',#16998,#16990,#17000,.T.); +#16998 = VERTEX_POINT('',#16999); +#16999 = CARTESIAN_POINT('',(47.545660655655,104.44657623614, + 118.65831067235)); +#17000 = LINE('',#17001,#17002); +#17001 = CARTESIAN_POINT('',(46.824950655655,104.56282997451, + 118.30051845564)); +#17002 = VECTOR('',#17003,1.); +#17003 = DIRECTION('',(-0.886492823333,0.142995247394,-0.4400941188)); +#17004 = ORIENTED_EDGE('',*,*,#17005,.F.); +#17005 = EDGE_CURVE('',#17006,#16998,#17008,.T.); +#17006 = VERTEX_POINT('',#17007); +#17007 = CARTESIAN_POINT('',(48.120305655655,104.25920779882, + 119.23497142727)); +#17008 = LINE('',#17009,#17010); +#17009 = CARTESIAN_POINT('',(47.545660655655,104.44657623614, + 118.65831067235)); +#17010 = VECTOR('',#17011,1.); +#17011 = DIRECTION('',(-0.687883723009,0.224290993982,-0.690296699715)); +#17012 = ORIENTED_EDGE('',*,*,#17013,.F.); +#17013 = EDGE_CURVE('',#17014,#17006,#17016,.T.); +#17014 = VERTEX_POINT('',#17015); +#17015 = CARTESIAN_POINT('',(48.543360655655,104.00711173481, + 120.01084333326)); +#17016 = LINE('',#17017,#17018); +#17017 = CARTESIAN_POINT('',(48.120305655655,104.25920779882, + 119.23497142727)); +#17018 = VECTOR('',#17019,1.); +#17019 = DIRECTION('',(-0.460357979363,0.274324696868,-0.844284603392)); +#17020 = ORIENTED_EDGE('',*,*,#17021,.F.); +#17021 = EDGE_CURVE('',#16838,#17014,#17022,.T.); +#17022 = LINE('',#17023,#17024); +#17023 = CARTESIAN_POINT('',(48.543360655655,104.00711173481, + 120.01084333326)); +#17024 = VECTOR('',#17025,1.); +#17025 = DIRECTION('',(-0.250642466313,0.299153086955,-0.920698530815)); +#17026 = FACE_BOUND('',#17027,.T.); +#17027 = EDGE_LOOP('',(#17028,#17038,#17046,#17054,#17062,#17070,#17078, + #17086,#17094,#17102,#17110,#17118,#17126,#17134,#17142,#17150, + #17162,#17173,#17181,#17189,#17197,#17205,#17218,#17228,#17236, + #17244,#17252,#17260,#17268,#17276,#17284,#17292,#17300)); +#17028 = ORIENTED_EDGE('',*,*,#17029,.F.); +#17029 = EDGE_CURVE('',#17030,#17032,#17034,.T.); +#17030 = VERTEX_POINT('',#17031); +#17031 = CARTESIAN_POINT('',(42.061070655655,102.80284500522, + 123.7171952213)); +#17032 = VERTEX_POINT('',#17033); +#17033 = CARTESIAN_POINT('',(42.061070655655,102.81306419722, + 123.6857437823)); +#17034 = LINE('',#17035,#17036); +#17035 = CARTESIAN_POINT('',(42.061070655655,102.81306419722, + 123.6857437823)); +#17036 = VECTOR('',#17037,1.); +#17037 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#17038 = ORIENTED_EDGE('',*,*,#17039,.F.); +#17039 = EDGE_CURVE('',#17040,#17030,#17042,.T.); +#17040 = VERTEX_POINT('',#17041); +#17041 = CARTESIAN_POINT('',(41.971498655655,102.60142371106, + 124.33710622235)); +#17042 = LINE('',#17043,#17044); +#17043 = CARTESIAN_POINT('',(42.061070655655,102.80284500522, + 123.7171952213)); +#17044 = VECTOR('',#17045,1.); +#17045 = DIRECTION('',(0.136140342999,0.306139910613,-0.942201762967)); +#17046 = ORIENTED_EDGE('',*,*,#17047,.F.); +#17047 = EDGE_CURVE('',#17048,#17040,#17050,.T.); +#17048 = VERTEX_POINT('',#17049); +#17049 = CARTESIAN_POINT('',(41.702780655655,102.42299791654, + 124.88624435275)); +#17050 = LINE('',#17051,#17052); +#17051 = CARTESIAN_POINT('',(41.971498655655,102.60142371106, + 124.33710622235)); +#17052 = VECTOR('',#17053,1.); +#17053 = DIRECTION('',(0.421938306747,0.280162391872,-0.862251181199)); +#17054 = ORIENTED_EDGE('',*,*,#17055,.F.); +#17055 = EDGE_CURVE('',#17056,#17048,#17058,.T.); +#17056 = VERTEX_POINT('',#17057); +#17057 = CARTESIAN_POINT('',(41.282478655655,102.27267721766, + 125.34888389299)); +#17058 = LINE('',#17059,#17060); +#17059 = CARTESIAN_POINT('',(41.702780655655,102.42299791654, + 124.88624435275)); +#17060 = VECTOR('',#17061,1.); +#17061 = DIRECTION('',(0.653787194936,0.233826505849,-0.719643987607)); +#17062 = ORIENTED_EDGE('',*,*,#17063,.F.); +#17063 = EDGE_CURVE('',#17064,#17056,#17066,.T.); +#17064 = VERTEX_POINT('',#17065); +#17065 = CARTESIAN_POINT('',(40.738150655655,102.1589784318, + 125.69881277442)); +#17066 = LINE('',#17067,#17068); +#17067 = CARTESIAN_POINT('',(41.282478655655,102.27267721766, + 125.34888389299)); +#17068 = VECTOR('',#17069,1.); +#17069 = DIRECTION('',(0.828484591299,0.173053181416,-0.5326029275)); +#17070 = ORIENTED_EDGE('',*,*,#17071,.F.); +#17071 = EDGE_CURVE('',#17072,#17064,#17074,.T.); +#17072 = VERTEX_POINT('',#17073); +#17073 = CARTESIAN_POINT('',(40.094605655655,102.08616012217, + 125.92292448721)); +#17074 = LINE('',#17075,#17076); +#17075 = CARTESIAN_POINT('',(40.738150655655,102.1589784318, + 125.69881277442)); +#17076 = VECTOR('',#17077,1.); +#17077 = DIRECTION('',(0.939027849092,0.106252741728,-0.327012313996)); +#17078 = ORIENTED_EDGE('',*,*,#17079,.F.); +#17079 = EDGE_CURVE('',#17080,#17072,#17082,.T.); +#17080 = VERTEX_POINT('',#17081); +#17081 = CARTESIAN_POINT('',(39.387670655655,102.06188745529, + 125.99762807445)); +#17082 = LINE('',#17083,#17084); +#17083 = CARTESIAN_POINT('',(40.094605655655,102.08616012217, + 125.92292448721)); +#17084 = VECTOR('',#17085,1.); +#17085 = DIRECTION('',(0.993883786109,3.41250752217E-02,-0.105026182215) + ); +#17086 = ORIENTED_EDGE('',*,*,#17087,.F.); +#17087 = EDGE_CURVE('',#17088,#17080,#17090,.T.); +#17088 = VERTEX_POINT('',#17089); +#17089 = CARTESIAN_POINT('',(38.705543655655,102.08445682049, + 125.92816671072)); +#17090 = LINE('',#17091,#17092); +#17091 = CARTESIAN_POINT('',(39.387670655655,102.06188745529, + 125.99762807445)); +#17092 = VECTOR('',#17093,1.); +#17093 = DIRECTION('',(0.994316722842,-3.289870836875E-02,0.101251813141 + )); +#17094 = ORIENTED_EDGE('',*,*,#17095,.F.); +#17095 = EDGE_CURVE('',#17096,#17088,#17098,.T.); +#17096 = VERTEX_POINT('',#17097); +#17097 = CARTESIAN_POINT('',(38.103340655655,102.15216522511, + 125.71978166849)); +#17098 = LINE('',#17099,#17100); +#17099 = CARTESIAN_POINT('',(38.705543655655,102.08445682049, + 125.92816671072)); +#17100 = VECTOR('',#17101,1.); +#17101 = DIRECTION('',(0.939730213375,-0.105658114492,0.32518223954)); +#17102 = ORIENTED_EDGE('',*,*,#17103,.F.); +#17103 = EDGE_CURVE('',#17104,#17096,#17106,.T.); +#17104 = VERTEX_POINT('',#17105); +#17105 = CARTESIAN_POINT('',(37.601733655655,102.25862466984, + 125.39213318807)); +#17106 = LINE('',#17107,#17108); +#17107 = CARTESIAN_POINT('',(38.103340655655,102.15216522511, + 125.71978166849)); +#17108 = VECTOR('',#17109,1.); +#17109 = DIRECTION('',(0.824306367079,-0.174948113021,0.538434927306)); +#17110 = ORIENTED_EDGE('',*,*,#17111,.F.); +#17111 = EDGE_CURVE('',#17112,#17104,#17114,.T.); +#17112 = VERTEX_POINT('',#17113); +#17113 = CARTESIAN_POINT('',(37.221390655655,102.39744777341, + 124.96487960763)); +#17114 = LINE('',#17115,#17116); +#17115 = CARTESIAN_POINT('',(37.601733655655,102.25862466984, + 125.39213318807)); +#17116 = VECTOR('',#17117,1.); +#17117 = DIRECTION('',(0.646156063758,-0.235843410189,0.72585138089)); +#17118 = ORIENTED_EDGE('',*,*,#17119,.F.); +#17119 = EDGE_CURVE('',#17120,#17112,#17122,.T.); +#17120 = VERTEX_POINT('',#17121); +#17121 = CARTESIAN_POINT('',(36.977475655655,102.56182102011, + 124.45899077231)); +#17122 = LINE('',#17123,#17124); +#17123 = CARTESIAN_POINT('',(37.221390655655,102.39744777341, + 124.96487960763)); +#17124 = VECTOR('',#17125,1.); +#17125 = DIRECTION('',(0.41681987347,-0.280893081159,0.864500011589)); +#17126 = ORIENTED_EDGE('',*,*,#17127,.F.); +#17127 = EDGE_CURVE('',#17128,#17120,#17130,.T.); +#17128 = VERTEX_POINT('',#17129); +#17129 = CARTESIAN_POINT('',(36.895281078819,102.74693465417, + 123.88926958826)); +#17130 = LINE('',#17131,#17132); +#17131 = CARTESIAN_POINT('',(36.977475655655,102.56182102011, + 124.45899077231)); +#17132 = VECTOR('',#17133,1.); +#17133 = DIRECTION('',(0.135936774866,-0.306148548559,0.94222834783)); +#17134 = ORIENTED_EDGE('',*,*,#17135,.F.); +#17135 = EDGE_CURVE('',#17136,#17128,#17138,.T.); +#17136 = VERTEX_POINT('',#17137); +#17137 = CARTESIAN_POINT('',(37.061540655655,103.0089491429, + 123.08287190979)); +#17138 = LINE('',#17139,#17140); +#17139 = CARTESIAN_POINT('',(36.895281078819,102.74693465417, + 123.88926958826)); +#17140 = VECTOR('',#17141,1.); +#17141 = DIRECTION('',(-0.192420392753,-0.303242266027,0.933283729928)); +#17142 = ORIENTED_EDGE('',*,*,#17143,.F.); +#17143 = EDGE_CURVE('',#17144,#17136,#17146,.T.); +#17144 = VERTEX_POINT('',#17145); +#17145 = CARTESIAN_POINT('',(37.623780655655,103.29340886575, + 122.20739490379)); +#17146 = LINE('',#17147,#17148); +#17147 = CARTESIAN_POINT('',(37.061540655655,103.0089491429, + 123.08287190979)); +#17148 = VECTOR('',#17149,1.); +#17149 = DIRECTION('',(-0.521242956754,-0.263717677531,0.8116395546)); +#17150 = ORIENTED_EDGE('',*,*,#17151,.F.); +#17151 = EDGE_CURVE('',#17152,#17144,#17154,.T.); +#17152 = VERTEX_POINT('',#17153); +#17153 = CARTESIAN_POINT('',(38.761698791177,103.68106489591, + 121.01431232169)); +#17154 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#17155,#17156,#17157,#17158, + #17159,#17160,#17161),.UNSPECIFIED.,.F.,.F.,(4,2,1,4),(0.,0.25,0.5, + 1.),.UNSPECIFIED.); +#17155 = CARTESIAN_POINT('',(38.761698791177,103.68106489591, + 121.01431232169)); +#17156 = CARTESIAN_POINT('',(38.66462260612,103.6493983321, + 121.11177198379)); +#17157 = CARTESIAN_POINT('',(38.57000137017,103.6170354379, + 121.21137473049)); +#17158 = CARTESIAN_POINT('',(38.380757227267,103.55231012347, + 121.41057876515)); +#17159 = CARTESIAN_POINT('',(38.096891012913,103.45522215183, + 121.70938481714)); +#17160 = CARTESIAN_POINT('',(37.813024798558,103.35813418018, + 122.00819086913)); +#17161 = CARTESIAN_POINT('',(37.623780655655,103.29340886575, + 122.20739490379)); +#17162 = ORIENTED_EDGE('',*,*,#17163,.F.); +#17163 = EDGE_CURVE('',#17164,#17152,#17166,.T.); +#17164 = VERTEX_POINT('',#17165); +#17165 = CARTESIAN_POINT('',(40.673280343296,104.28816547234, + 119.14584887219)); +#17166 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#17167,#17168,#17169,#17170, + #17171,#17172),.UNSPECIFIED.,.F.,.F.,(4,1,1,4),(0.,0.5,0.75,1.), + .UNSPECIFIED.); +#17167 = CARTESIAN_POINT('',(40.673280343296,104.28816547234, + 119.14584887219)); +#17168 = CARTESIAN_POINT('',(40.354285105658,104.18710151457, + 119.45689175123)); +#17169 = CARTESIAN_POINT('',(39.8757922492,104.03550557791, + 119.92345606979)); +#17170 = CARTESIAN_POINT('',(39.237802162166,103.83337754591, + 120.54554218627)); +#17171 = CARTESIAN_POINT('',(38.918806148043,103.73231382104, + 120.85658434851)); +#17172 = CARTESIAN_POINT('',(38.761698791177,103.68106489591, + 121.01431232169)); +#17173 = ORIENTED_EDGE('',*,*,#17174,.F.); +#17174 = EDGE_CURVE('',#17175,#17164,#17177,.T.); +#17175 = VERTEX_POINT('',#17176); +#17176 = CARTESIAN_POINT('',(36.763880655655,104.28816547234, + 119.14584887219)); +#17177 = LINE('',#17178,#17179); +#17178 = CARTESIAN_POINT('',(40.673280343296,104.28816547234, + 119.14584887219)); +#17179 = VECTOR('',#17180,1.); +#17180 = DIRECTION('',(1.,0.,0.)); +#17181 = ORIENTED_EDGE('',*,*,#17182,.F.); +#17182 = EDGE_CURVE('',#17183,#17175,#17185,.T.); +#17183 = VERTEX_POINT('',#17184); +#17184 = CARTESIAN_POINT('',(36.763880655655,104.56070177447, + 118.30706838186)); +#17185 = LINE('',#17186,#17187); +#17186 = CARTESIAN_POINT('',(36.763880655655,104.28816547234, + 119.14584887219)); +#17187 = VECTOR('',#17188,1.); +#17188 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17189 = ORIENTED_EDGE('',*,*,#17190,.F.); +#17190 = EDGE_CURVE('',#17191,#17183,#17193,.T.); +#17191 = VERTEX_POINT('',#17192); +#17192 = CARTESIAN_POINT('',(42.011460655655,104.56070084741, + 118.30707123503)); +#17193 = LINE('',#17194,#17195); +#17194 = CARTESIAN_POINT('',(36.763880655655,104.56070177447, + 118.30706838186)); +#17195 = VECTOR('',#17196,1.); +#17196 = DIRECTION('',(-1.,1.766625709489E-07,-5.437114862443E-07)); +#17197 = ORIENTED_EDGE('',*,*,#17198,.F.); +#17198 = EDGE_CURVE('',#17199,#17191,#17201,.T.); +#17199 = VERTEX_POINT('',#17200); +#17200 = CARTESIAN_POINT('',(42.011460655655,104.34948525962, + 118.95712597237)); +#17201 = LINE('',#17202,#17203); +#17202 = CARTESIAN_POINT('',(42.011460655655,104.56070084741, + 118.30707123503)); +#17203 = VECTOR('',#17204,1.); +#17204 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#17205 = ORIENTED_EDGE('',*,*,#17206,.F.); +#17206 = EDGE_CURVE('',#17207,#17199,#17209,.T.); +#17207 = VERTEX_POINT('',#17208); +#17208 = CARTESIAN_POINT('',(39.213923239659,103.44595939054, + 121.73789266507)); +#17209 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#17210,#17211,#17212,#17213, + #17214,#17215,#17216,#17217),.UNSPECIFIED.,.F.,.F.,(4,2,1,1,4),(0., + 0.125,0.25,0.5,1.),.UNSPECIFIED.); +#17210 = CARTESIAN_POINT('',(39.213923239659,103.44595939054, + 121.73789266507)); +#17211 = CARTESIAN_POINT('',(39.327996081121,103.48433895712, + 121.61977250485)); +#17212 = CARTESIAN_POINT('',(39.444669353253,103.52195374926, + 121.50400607832)); +#17213 = CARTESIAN_POINT('',(39.678014017108,103.59718388657, + 121.27247152323)); +#17214 = CARTESIAN_POINT('',(40.02803101289,103.71002909252, + 120.9251696906)); +#17215 = CARTESIAN_POINT('',(40.844737336382,103.97333457309, + 120.1147987478)); +#17216 = CARTESIAN_POINT('',(41.544771327946,104.19902498501, + 119.42019508255)); +#17217 = CARTESIAN_POINT('',(42.011460655655,104.34948525962, + 118.95712597237)); +#17218 = ORIENTED_EDGE('',*,*,#17219,.F.); +#17219 = EDGE_CURVE('',#17220,#17207,#17222,.T.); +#17220 = VERTEX_POINT('',#17221); +#17221 = CARTESIAN_POINT('',(38.389970655655,103.1605467,122.61630260403 + )); +#17222 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#17223,#17224,#17225,#17226, + #17227),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#17223 = CARTESIAN_POINT('',(38.389970655655,103.1605467,122.61630260403 + )); +#17224 = CARTESIAN_POINT('',(38.52685105423,103.20823888268, + 122.46952115855)); +#17225 = CARTESIAN_POINT('',(38.800612300268,103.30362312357, + 122.17595865066)); +#17226 = CARTESIAN_POINT('',(39.074372199645,103.39900773787, + 121.88239499354)); +#17227 = CARTESIAN_POINT('',(39.213923239659,103.44595939054, + 121.73789266507)); +#17228 = ORIENTED_EDGE('',*,*,#17229,.F.); +#17229 = EDGE_CURVE('',#17230,#17220,#17232,.T.); +#17230 = VERTEX_POINT('',#17231); +#17231 = CARTESIAN_POINT('',(37.998610655655,102.95614462792, + 123.24538749624)); +#17232 = LINE('',#17233,#17234); +#17233 = CARTESIAN_POINT('',(38.389970655655,103.1605467,122.61630260403 + )); +#17234 = VECTOR('',#17235,1.); +#17235 = DIRECTION('',(0.509209367096,0.265953213814,-0.818519827813)); +#17236 = ORIENTED_EDGE('',*,*,#17237,.F.); +#17237 = EDGE_CURVE('',#17238,#17230,#17240,.T.); +#17238 = VERTEX_POINT('',#17239); +#17239 = CARTESIAN_POINT('',(37.887187368812,102.76161760768, + 123.84408010396)); +#17240 = LINE('',#17241,#17242); +#17241 = CARTESIAN_POINT('',(37.998610655655,102.95614462792, + 123.24538749624)); +#17242 = VECTOR('',#17243,1.); +#17243 = DIRECTION('',(0.174292871275,0.304287136542,-0.936499510709)); +#17244 = ORIENTED_EDGE('',*,*,#17245,.F.); +#17245 = EDGE_CURVE('',#17246,#17238,#17248,.T.); +#17246 = VERTEX_POINT('',#17247); +#17247 = CARTESIAN_POINT('',(38.081290655655,102.53712190979, + 124.53500681755)); +#17248 = LINE('',#17249,#17250); +#17249 = CARTESIAN_POINT('',(37.887187368812,102.76161760768, + 123.84408010396)); +#17250 = VECTOR('',#17251,1.); +#17251 = DIRECTION('',(-0.258127455384,0.298544677863,-0.918826040171)); +#17252 = ORIENTED_EDGE('',*,*,#17253,.F.); +#17253 = EDGE_CURVE('',#17254,#17246,#17256,.T.); +#17254 = VERTEX_POINT('',#17255); +#17255 = CARTESIAN_POINT('',(38.604940655655,102.38552342564, + 125.00157897648)); +#17256 = LINE('',#17257,#17258); +#17257 = CARTESIAN_POINT('',(38.081290655655,102.53712190979, + 124.53500681755)); +#17258 = VECTOR('',#17259,1.); +#17259 = DIRECTION('',(-0.729772802603,0.211271747636,-0.650227579569)); +#17260 = ORIENTED_EDGE('',*,*,#17261,.F.); +#17261 = EDGE_CURVE('',#17262,#17254,#17264,.T.); +#17262 = VERTEX_POINT('',#17263); +#17263 = CARTESIAN_POINT('',(39.371130655655,102.32931292534, + 125.17457710785)); +#17264 = LINE('',#17265,#17266); +#17265 = CARTESIAN_POINT('',(38.604940655655,102.38552342564, + 125.00157897648)); +#17266 = VECTOR('',#17267,1.); +#17267 = DIRECTION('',(-0.972956281604,7.137963083954E-02, + -0.219683914724)); +#17268 = ORIENTED_EDGE('',*,*,#17269,.F.); +#17269 = EDGE_CURVE('',#17270,#17262,#17272,.T.); +#17270 = VERTEX_POINT('',#17271); +#17271 = CARTESIAN_POINT('',(40.258590655655,102.39404024302, + 124.97536690783)); +#17272 = LINE('',#17273,#17274); +#17273 = CARTESIAN_POINT('',(39.371130655655,102.32931292534, + 125.17457710785)); +#17274 = VECTOR('',#17275,1.); +#17275 = DIRECTION('',(-0.973258524764,-7.09850739335E-02,0.21846959343) + ); +#17276 = ORIENTED_EDGE('',*,*,#17277,.F.); +#17277 = EDGE_CURVE('',#17278,#17270,#17280,.T.); +#17278 = VERTEX_POINT('',#17279); +#17279 = CARTESIAN_POINT('',(40.875950655655,102.56437535459, + 124.45112933915)); +#17280 = LINE('',#17281,#17282); +#17281 = CARTESIAN_POINT('',(40.258590655655,102.39404024302, + 124.97536690783)); +#17282 = VECTOR('',#17283,1.); +#17283 = DIRECTION('',(-0.745936632582,-0.205810547389,0.633419733476)); +#17284 = ORIENTED_EDGE('',*,*,#17285,.F.); +#17285 = EDGE_CURVE('',#17286,#17278,#17288,.T.); +#17286 = VERTEX_POINT('',#17287); +#17287 = CARTESIAN_POINT('',(41.101950655655,102.80454768886, + 123.71195489989)); +#17288 = LINE('',#17289,#17290); +#17289 = CARTESIAN_POINT('',(40.875950655655,102.56437535459, + 124.45112933915)); +#17290 = VECTOR('',#17291,1.); +#17291 = DIRECTION('',(-0.279217205267,-0.296726760868,0.913231066964)); +#17292 = ORIENTED_EDGE('',*,*,#17293,.F.); +#17293 = EDGE_CURVE('',#17294,#17286,#17296,.T.); +#17294 = VERTEX_POINT('',#17295); +#17295 = CARTESIAN_POINT('',(41.101950655655,102.81306419722, + 123.6857437823)); +#17296 = LINE('',#17297,#17298); +#17297 = CARTESIAN_POINT('',(41.101950655655,102.80454768886, + 123.71195489989)); +#17298 = VECTOR('',#17299,1.); +#17299 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17300 = ORIENTED_EDGE('',*,*,#17301,.F.); +#17301 = EDGE_CURVE('',#17032,#17294,#17302,.T.); +#17302 = LINE('',#17303,#17304); +#17303 = CARTESIAN_POINT('',(41.101950655655,102.81306419722, + 123.6857437823)); +#17304 = VECTOR('',#17305,1.); +#17305 = DIRECTION('',(-1.,0.,0.)); +#17306 = FACE_BOUND('',#17307,.T.); +#17307 = EDGE_LOOP('',(#17308,#17318,#17326,#17334,#17342,#17350,#17358, + #17366,#17374,#17382,#17390,#17398,#17406,#17414,#17422,#17430, + #17438,#17446,#17454,#17462,#17470,#17478,#17486,#17494,#17502, + #17510,#17518,#17526,#17534,#17542,#17550,#17558,#17566,#17574, + #17582,#17590,#17598,#17606,#17614,#17622,#17630,#17638,#17646)); +#17308 = ORIENTED_EDGE('',*,*,#17309,.F.); +#17309 = EDGE_CURVE('',#17310,#17312,#17314,.T.); +#17310 = VERTEX_POINT('',#17311); +#17311 = CARTESIAN_POINT('',(35.617850655655,103.88958175625, + 120.37256341339)); +#17312 = VERTEX_POINT('',#17313); +#17313 = CARTESIAN_POINT('',(35.611850655655,103.90831745662, + 120.31490085681)); +#17314 = LINE('',#17315,#17316); +#17315 = CARTESIAN_POINT('',(35.611850655655,103.90831745662, + 120.31490085681)); +#17316 = VECTOR('',#17317,1.); +#17317 = DIRECTION('',(-9.847986576642E-02,0.307514876229, + -0.946433472008)); +#17318 = ORIENTED_EDGE('',*,*,#17319,.F.); +#17319 = EDGE_CURVE('',#17320,#17310,#17322,.T.); +#17320 = VERTEX_POINT('',#17321); +#17321 = CARTESIAN_POINT('',(34.642200655655,103.88958175625, + 120.37256341339)); +#17322 = LINE('',#17323,#17324); +#17323 = CARTESIAN_POINT('',(35.617850655655,103.88958175625, + 120.37256341339)); +#17324 = VECTOR('',#17325,1.); +#17325 = DIRECTION('',(1.,0.,0.)); +#17326 = ORIENTED_EDGE('',*,*,#17327,.F.); +#17327 = EDGE_CURVE('',#17328,#17320,#17330,.T.); +#17328 = VERTEX_POINT('',#17329); +#17329 = CARTESIAN_POINT('',(34.636200655655,103.9032094057, + 120.33062182102)); +#17330 = LINE('',#17331,#17332); +#17331 = CARTESIAN_POINT('',(34.642200655655,103.88958175625, + 120.37256341339)); +#17332 = VECTOR('',#17333,1.); +#17333 = DIRECTION('',(0.134812400049,-0.306196021606,0.942374454846)); +#17334 = ORIENTED_EDGE('',*,*,#17335,.F.); +#17335 = EDGE_CURVE('',#17336,#17328,#17338,.T.); +#17336 = VERTEX_POINT('',#17337); +#17337 = CARTESIAN_POINT('',(34.349570655655,104.12294150186, + 119.65435596609)); +#17338 = LINE('',#17339,#17340); +#17339 = CARTESIAN_POINT('',(34.636200655655,103.9032094057, + 120.33062182102)); +#17340 = VECTOR('',#17341,1.); +#17341 = DIRECTION('',(0.373866273345,-0.286607891443,0.882088389118)); +#17342 = ORIENTED_EDGE('',*,*,#17343,.F.); +#17343 = EDGE_CURVE('',#17344,#17336,#17346,.T.); +#17344 = VERTEX_POINT('',#17345); +#17345 = CARTESIAN_POINT('',(33.732210655655,104.27624297867, + 119.1825425347)); +#17346 = LINE('',#17347,#17348); +#17347 = CARTESIAN_POINT('',(34.349570655655,104.12294150186, + 119.65435596609)); +#17348 = VECTOR('',#17349,1.); +#17349 = DIRECTION('',(0.779508230196,-0.193565768551,0.59573417923)); +#17350 = ORIENTED_EDGE('',*,*,#17351,.F.); +#17351 = EDGE_CURVE('',#17352,#17344,#17354,.T.); +#17352 = VERTEX_POINT('',#17353); +#17353 = CARTESIAN_POINT('',(32.877820655655,104.33245378798, + 119.00954345227)); +#17354 = LINE('',#17355,#17356); +#17355 = CARTESIAN_POINT('',(33.732210655655,104.27624297867, + 119.1825425347)); +#17356 = VECTOR('',#17357,1.); +#17357 = DIRECTION('',(0.978078682159,-6.434835882182E-02,0.19804388459) + ); +#17358 = ORIENTED_EDGE('',*,*,#17359,.F.); +#17359 = EDGE_CURVE('',#17360,#17352,#17362,.T.); +#17360 = VERTEX_POINT('',#17361); +#17361 = CARTESIAN_POINT('',(31.924220655655,104.26091295459, + 119.22972349741)); +#17362 = LINE('',#17363,#17364); +#17363 = CARTESIAN_POINT('',(32.877820655655,104.33245378798, + 119.00954345227)); +#17364 = VECTOR('',#17365,1.); +#17365 = DIRECTION('',(0.97177182963,7.29041176086E-02,-0.224375802556) + ); +#17366 = ORIENTED_EDGE('',*,*,#17367,.F.); +#17367 = EDGE_CURVE('',#17368,#17360,#17370,.T.); +#17368 = VERTEX_POINT('',#17369); +#17369 = CARTESIAN_POINT('',(31.279300655655,104.06332439822, + 119.8378385445)); +#17370 = LINE('',#17371,#17372); +#17371 = CARTESIAN_POINT('',(31.924220655655,104.26091295459, + 119.22972349741)); +#17372 = VECTOR('',#17373,1.); +#17373 = DIRECTION('',(0.71013385758,0.21756857246,-0.669607213668)); +#17374 = ORIENTED_EDGE('',*,*,#17375,.F.); +#17375 = EDGE_CURVE('',#17376,#17368,#17378,.T.); +#17376 = VERTEX_POINT('',#17377); +#17377 = CARTESIAN_POINT('',(31.046413547723,103.76860512412, + 120.74489120248)); +#17378 = LINE('',#17379,#17380); +#17379 = CARTESIAN_POINT('',(31.279300655655,104.06332439822, + 119.8378385445)); +#17380 = VECTOR('',#17381,1.); +#17381 = DIRECTION('',(0.237215405041,0.300196745965,-0.92391058297)); +#17382 = ORIENTED_EDGE('',*,*,#17383,.F.); +#17383 = EDGE_CURVE('',#17384,#17376,#17386,.T.); +#17384 = VERTEX_POINT('',#17385); +#17385 = CARTESIAN_POINT('',(31.284810655655,103.48077946619, + 121.63072749147)); +#17386 = LINE('',#17387,#17388); +#17387 = CARTESIAN_POINT('',(31.046413547723,103.76860512412, + 120.74489120248)); +#17388 = VECTOR('',#17389,1.); +#17389 = DIRECTION('',(-0.247956257664,0.299366773446,-0.921356190212)); +#17390 = ORIENTED_EDGE('',*,*,#17391,.F.); +#17391 = EDGE_CURVE('',#17392,#17384,#17394,.T.); +#17392 = VERTEX_POINT('',#17393); +#17393 = CARTESIAN_POINT('',(31.924220655655,103.28319090982, + 122.23884253856)); +#17394 = LINE('',#17395,#17396); +#17395 = CARTESIAN_POINT('',(31.284810655655,103.48077946619, + 121.63072749147)); +#17396 = VECTOR('',#17397,1.); +#17397 = DIRECTION('',(-0.707106781187,0.218508012224,-0.672498511964)); +#17398 = ORIENTED_EDGE('',*,*,#17399,.F.); +#17399 = EDGE_CURVE('',#17400,#17392,#17402,.T.); +#17400 = VERTEX_POINT('',#17401); +#17401 = CARTESIAN_POINT('',(32.861290655655,103.21165007643, + 122.4590225837)); +#17402 = LINE('',#17403,#17404); +#17403 = CARTESIAN_POINT('',(31.924220655655,103.28319090982, + 122.23884253856)); +#17404 = VECTOR('',#17405,1.); +#17405 = DIRECTION('',(-0.970810718629,7.411677662243E-02, + -0.228107983239)); +#17406 = ORIENTED_EDGE('',*,*,#17407,.F.); +#17407 = EDGE_CURVE('',#17408,#17400,#17410,.T.); +#17408 = VERTEX_POINT('',#17409); +#17409 = CARTESIAN_POINT('',(33.610940655655,103.24912394931, + 122.34368986208)); +#17410 = LINE('',#17411,#17412); +#17411 = CARTESIAN_POINT('',(32.861290655655,103.21165007643, + 122.4590225837)); +#17412 = VECTOR('',#17413,1.); +#17413 = DIRECTION('',(-0.987167172834,-4.934699811916E-02,0.15187444372 + )); +#17414 = ORIENTED_EDGE('',*,*,#17415,.F.); +#17415 = EDGE_CURVE('',#17416,#17408,#17418,.T.); +#17416 = VERTEX_POINT('',#17417); +#17417 = CARTESIAN_POINT('',(34.217280655655,103.35984164822, + 122.00293582286)); +#17418 = LINE('',#17419,#17420); +#17419 = CARTESIAN_POINT('',(33.610940655655,103.24912394931, + 122.34368986208)); +#17420 = VECTOR('',#17421,1.); +#17421 = DIRECTION('',(-0.860927658895,-0.157205411691,0.483828507516)); +#17422 = ORIENTED_EDGE('',*,*,#17423,.F.); +#17423 = EDGE_CURVE('',#17424,#17416,#17426,.T.); +#17424 = VERTEX_POINT('',#17425); +#17425 = CARTESIAN_POINT('',(34.421230655655,103.42627226757, + 121.79848339933)); +#17426 = LINE('',#17427,#17428); +#17427 = CARTESIAN_POINT('',(34.217280655655,103.35984164822, + 122.00293582286)); +#17428 = VECTOR('',#17429,1.); +#17429 = DIRECTION('',(-0.688260978403,-0.224180451429,0.689956484719)); +#17430 = ORIENTED_EDGE('',*,*,#17431,.F.); +#17431 = EDGE_CURVE('',#17432,#17424,#17434,.T.); +#17432 = VERTEX_POINT('',#17433); +#17433 = CARTESIAN_POINT('',(34.592110655655,103.50462661666, + 121.55733350906)); +#17434 = LINE('',#17435,#17436); +#17435 = CARTESIAN_POINT('',(34.421230655655,103.42627226757, + 121.79848339933)); +#17436 = VECTOR('',#17437,1.); +#17437 = DIRECTION('',(-0.55885932915,-0.256256197159,0.788675479294)); +#17438 = ORIENTED_EDGE('',*,*,#17439,.F.); +#17439 = EDGE_CURVE('',#17440,#17432,#17442,.T.); +#17440 = VERTEX_POINT('',#17441); +#17441 = CARTESIAN_POINT('',(35.468540655655,103.50462661666, + 121.55733350906)); +#17442 = LINE('',#17443,#17444); +#17443 = CARTESIAN_POINT('',(34.592110655655,103.50462661666, + 121.55733350906)); +#17444 = VECTOR('',#17445,1.); +#17445 = DIRECTION('',(-1.,0.,0.)); +#17446 = ORIENTED_EDGE('',*,*,#17447,.F.); +#17447 = EDGE_CURVE('',#17448,#17440,#17450,.T.); +#17448 = VERTEX_POINT('',#17449); +#17449 = CARTESIAN_POINT('',(35.060640655655,102.10276885856, + 125.87180805262)); +#17450 = LINE('',#17451,#17452); +#17451 = CARTESIAN_POINT('',(35.468540655655,103.50462661666, + 121.55733350906)); +#17452 = VECTOR('',#17453,1.); +#17453 = DIRECTION('',(8.955371507203E-02,0.307775362198,-0.947235165384 + )); +#17454 = ORIENTED_EDGE('',*,*,#17455,.F.); +#17455 = EDGE_CURVE('',#17456,#17448,#17458,.T.); +#17456 = VERTEX_POINT('',#17457); +#17457 = CARTESIAN_POINT('',(30.507600655655,102.10276885856, + 125.87180805262)); +#17458 = LINE('',#17459,#17460); +#17459 = CARTESIAN_POINT('',(35.060640655655,102.10276885856, + 125.87180805262)); +#17460 = VECTOR('',#17461,1.); +#17461 = DIRECTION('',(1.,0.,0.)); +#17462 = ORIENTED_EDGE('',*,*,#17463,.F.); +#17463 = EDGE_CURVE('',#17464,#17456,#17466,.T.); +#17464 = VERTEX_POINT('',#17465); +#17465 = CARTESIAN_POINT('',(30.507600655655,102.37530516068, + 125.0330275623)); +#17466 = LINE('',#17467,#17468); +#17467 = CARTESIAN_POINT('',(30.507600655655,102.10276885856, + 125.87180805262)); +#17468 = VECTOR('',#17469,1.); +#17469 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17470 = ORIENTED_EDGE('',*,*,#17471,.F.); +#17471 = EDGE_CURVE('',#17472,#17464,#17474,.T.); +#17472 = VERTEX_POINT('',#17473); +#17473 = CARTESIAN_POINT('',(34.244840655655,102.37530516068, + 125.0330275623)); +#17474 = LINE('',#17475,#17476); +#17475 = CARTESIAN_POINT('',(30.507600655655,102.37530516068, + 125.0330275623)); +#17476 = VECTOR('',#17477,1.); +#17477 = DIRECTION('',(-1.,0.,0.)); +#17478 = ORIENTED_EDGE('',*,*,#17479,.F.); +#17479 = EDGE_CURVE('',#17480,#17472,#17482,.T.); +#17480 = VERTEX_POINT('',#17481); +#17481 = CARTESIAN_POINT('',(34.497129729909,103.20142995738, + 122.49047687587)); +#17482 = LINE('',#17483,#17484); +#17483 = CARTESIAN_POINT('',(34.244840655655,102.37530516068, + 125.0330275623)); +#17484 = VECTOR('',#17485,1.); +#17485 = DIRECTION('',(-9.395282682255E-02,-0.3076501041,0.9468496606)); +#17486 = ORIENTED_EDGE('',*,*,#17487,.F.); +#17487 = EDGE_CURVE('',#17488,#17480,#17490,.T.); +#17488 = VERTEX_POINT('',#17489); +#17489 = CARTESIAN_POINT('',(34.029820655655,103.06175520297, + 122.92035156806)); +#17490 = LINE('',#17491,#17492); +#17491 = CARTESIAN_POINT('',(34.497129729909,103.20142995738, + 122.49047687587)); +#17492 = VECTOR('',#17493,1.); +#17493 = DIRECTION('',(0.718784740079,0.214838717185,-0.661205583028)); +#17494 = ORIENTED_EDGE('',*,*,#17495,.F.); +#17495 = EDGE_CURVE('',#17496,#17488,#17498,.T.); +#17496 = VERTEX_POINT('',#17497); +#17497 = CARTESIAN_POINT('',(33.412450655655,102.97658764718, + 123.18247035241)); +#17498 = LINE('',#17499,#17500); +#17499 = CARTESIAN_POINT('',(34.029820655655,103.06175520297, + 122.92035156806)); +#17500 = VECTOR('',#17501,1.); +#17501 = DIRECTION('',(0.913139868429,0.125969662738,-0.387694757192)); +#17502 = ORIENTED_EDGE('',*,*,#17503,.F.); +#17503 = EDGE_CURVE('',#17504,#17496,#17506,.T.); +#17504 = VERTEX_POINT('',#17505); +#17505 = CARTESIAN_POINT('',(32.684850655655,102.94762966464, + 123.27159385855)); +#17506 = LINE('',#17507,#17508); +#17507 = CARTESIAN_POINT('',(33.412450655655,102.97658764718, + 123.18247035241)); +#17508 = VECTOR('',#17509,1.); +#17509 = DIRECTION('',(0.991807920014,3.947327712155E-02,-0.121486255155 + )); +#17510 = ORIENTED_EDGE('',*,*,#17511,.F.); +#17511 = EDGE_CURVE('',#17512,#17504,#17514,.T.); +#17512 = VERTEX_POINT('',#17513); +#17513 = CARTESIAN_POINT('',(31.962758655655,102.97403145861, + 123.19033749191)); +#17514 = LINE('',#17515,#17516); +#17515 = CARTESIAN_POINT('',(32.684850655655,102.94762966464, + 123.27159385855)); +#17516 = VECTOR('',#17517,1.); +#17517 = DIRECTION('',(0.993072825812,-3.630964494793E-02,0.111749596497 + )); +#17518 = ORIENTED_EDGE('',*,*,#17519,.F.); +#17519 = EDGE_CURVE('',#17520,#17512,#17522,.T.); +#17520 = VERTEX_POINT('',#17521); +#17521 = CARTESIAN_POINT('',(31.328860655655,103.05323745854, + 122.94656648988)); +#17522 = LINE('',#17523,#17524); +#17523 = CARTESIAN_POINT('',(31.962758655655,102.97403145861, + 123.19033749191)); +#17524 = VECTOR('',#17525,1.); +#17525 = DIRECTION('',(0.927079896372,-0.115839283619,0.356516656152)); +#17526 = ORIENTED_EDGE('',*,*,#17527,.F.); +#17527 = EDGE_CURVE('',#17528,#17520,#17530,.T.); +#17528 = VERTEX_POINT('',#17529); +#17529 = CARTESIAN_POINT('',(30.798315655655,103.17843353069, + 122.5612525997)); +#17530 = LINE('',#17531,#17532); +#17531 = CARTESIAN_POINT('',(31.328860655655,103.05323745854, + 122.94656648988)); +#17532 = VECTOR('',#17533,1.); +#17533 = DIRECTION('',(0.794768142372,-0.187546484646,0.57720872825)); +#17534 = ORIENTED_EDGE('',*,*,#17535,.F.); +#17535 = EDGE_CURVE('',#17536,#17528,#17538,.T.); +#17536 = VERTEX_POINT('',#17537); +#17537 = CARTESIAN_POINT('',(30.397300655655,103.34280708641, + 122.05536281332)); +#17538 = LINE('',#17539,#17540); +#17539 = CARTESIAN_POINT('',(30.798315655655,103.17843353069, + 122.5612525997)); +#17540 = VECTOR('',#17541,1.); +#17541 = DIRECTION('',(0.601988804445,-0.246751468867,0.759422933506)); +#17542 = ORIENTED_EDGE('',*,*,#17543,.F.); +#17543 = EDGE_CURVE('',#17544,#17536,#17546,.T.); +#17544 = VERTEX_POINT('',#17545); +#17545 = CARTESIAN_POINT('',(30.140988655655,103.53869234111, + 121.45248998976)); +#17546 = LINE('',#17547,#17548); +#17547 = CARTESIAN_POINT('',(30.397300655655,103.34280708641, + 122.05536281332)); +#17548 = VECTOR('',#17549,1.); +#17549 = DIRECTION('',(0.374858768275,-0.286484071367,0.881707310109)); +#17550 = ORIENTED_EDGE('',*,*,#17551,.F.); +#17551 = EDGE_CURVE('',#17552,#17544,#17554,.T.); +#17552 = VERTEX_POINT('',#17553); +#17553 = CARTESIAN_POINT('',(30.054889344345,103.76355818948, + 120.76042407013)); +#17554 = LINE('',#17555,#17556); +#17555 = CARTESIAN_POINT('',(30.140988655655,103.53869234111, + 121.45248998976)); +#17556 = VECTOR('',#17557,1.); +#17557 = DIRECTION('',(0.11750047929,-0.306876379828,0.944468382144)); +#17558 = ORIENTED_EDGE('',*,*,#17559,.F.); +#17559 = EDGE_CURVE('',#17560,#17552,#17562,.T.); +#17560 = VERTEX_POINT('',#17561); +#17561 = CARTESIAN_POINT('',(30.146500655655,103.99646949854, + 120.04359676863)); +#17562 = LINE('',#17563,#17564); +#17563 = CARTESIAN_POINT('',(30.054889344345,103.76355818948, + 120.76042407013)); +#17564 = VECTOR('',#17565,1.); +#17565 = DIRECTION('',(-0.120658060623,-0.306759355868,0.944108219429)); +#17566 = ORIENTED_EDGE('',*,*,#17567,.F.); +#17567 = EDGE_CURVE('',#17568,#17560,#17570,.T.); +#17568 = VERTEX_POINT('',#17569); +#17569 = CARTESIAN_POINT('',(30.419350655655,104.19959378535, + 119.41844449511)); +#17570 = LINE('',#17571,#17572); +#17571 = CARTESIAN_POINT('',(30.146500655655,103.99646949854, + 120.04359676863)); +#17572 = VECTOR('',#17573,1.); +#17573 = DIRECTION('',(-0.383375907718,-0.285405746145,0.878388566324)); +#17574 = ORIENTED_EDGE('',*,*,#17575,.F.); +#17575 = EDGE_CURVE('',#17576,#17568,#17578,.T.); +#17576 = VERTEX_POINT('',#17577); +#17577 = CARTESIAN_POINT('',(30.852055655655,104.36822559525, + 118.89944914994)); +#17578 = LINE('',#17579,#17580); +#17579 = CARTESIAN_POINT('',(30.419350655655,104.19959378535, + 119.41844449511)); +#17580 = VECTOR('',#17581,1.); +#17581 = DIRECTION('',(-0.621311213839,-0.242134559341,0.745213547066)); +#17582 = ORIENTED_EDGE('',*,*,#17583,.F.); +#17583 = EDGE_CURVE('',#17584,#17576,#17586,.T.); +#17584 = VERTEX_POINT('',#17585); +#17585 = CARTESIAN_POINT('',(31.422570655655,104.49597692893, + 118.50627097343)); +#17586 = LINE('',#17587,#17588); +#17587 = CARTESIAN_POINT('',(30.852055655655,104.36822559525, + 118.89944914994)); +#17588 = VECTOR('',#17589,1.); +#17589 = DIRECTION('',(-0.809752989897,-0.181322181555,0.558052293095)); +#17590 = ORIENTED_EDGE('',*,*,#17591,.F.); +#17591 = EDGE_CURVE('',#17592,#17584,#17594,.T.); +#17592 = VERTEX_POINT('',#17593); +#17593 = CARTESIAN_POINT('',(32.108833655655,104.57518292886, + 118.2624999714)); +#17594 = LINE('',#17595,#17596); +#17595 = CARTESIAN_POINT('',(31.422570655655,104.49597692893, + 118.50627097343)); +#17596 = VECTOR('',#17597,1.); +#17597 = DIRECTION('',(-0.936791791349,-0.108121129305,0.332762619683)); +#17598 = ORIENTED_EDGE('',*,*,#17599,.F.); +#17599 = EDGE_CURVE('',#17600,#17592,#17602,.T.); +#17600 = VERTEX_POINT('',#17601); +#17601 = CARTESIAN_POINT('',(32.88876778211,104.60158361006, + 118.1812470295)); +#17602 = LINE('',#17603,#17604); +#17603 = CARTESIAN_POINT('',(32.108833655655,104.57518292886, + 118.2624999714)); +#17604 = VECTOR('',#17605,1.); +#17605 = DIRECTION('',(-0.994053893821,-3.364861089657E-02, + 0.103559775805)); +#17606 = ORIENTED_EDGE('',*,*,#17607,.F.); +#17607 = EDGE_CURVE('',#17608,#17600,#17610,.T.); +#17608 = VERTEX_POINT('',#17609); +#17609 = CARTESIAN_POINT('',(33.608178655655,104.57901195843, + 118.2507154301)); +#17610 = LINE('',#17611,#17612); +#17611 = CARTESIAN_POINT('',(32.88876778211,104.60158361006, + 118.1812470295)); +#17612 = VECTOR('',#17613,1.); +#17613 = DIRECTION('',(-0.994885114339,3.121470779901E-02, + -9.606899231074E-02)); +#17614 = ORIENTED_EDGE('',*,*,#17615,.F.); +#17615 = EDGE_CURVE('',#17616,#17608,#17618,.T.); +#17616 = VERTEX_POINT('',#17617); +#17617 = CARTESIAN_POINT('',(34.244830655655,104.51130355381, + 118.45910047233)); +#17618 = LINE('',#17619,#17620); +#17619 = CARTESIAN_POINT('',(33.608178655655,104.57901195843, + 118.2507154301)); +#17620 = VECTOR('',#17621,1.); +#17621 = DIRECTION('',(-0.945567879603,0.100561833762,-0.309497500238)); +#17622 = ORIENTED_EDGE('',*,*,#17623,.F.); +#17623 = EDGE_CURVE('',#17624,#17616,#17626,.T.); +#17624 = VERTEX_POINT('',#17625); +#17625 = CARTESIAN_POINT('',(34.776752655655,104.40441828366, + 118.78805950864)); +#17626 = LINE('',#17627,#17628); +#17627 = CARTESIAN_POINT('',(34.244830655655,104.51130355381, + 118.45910047233)); +#17628 = VECTOR('',#17629,1.); +#17629 = DIRECTION('',(-0.838343714589,0.168458146895,-0.518460865402)); +#17630 = ORIENTED_EDGE('',*,*,#17631,.F.); +#17631 = EDGE_CURVE('',#17632,#17624,#17634,.T.); +#17632 = VERTEX_POINT('',#17633); +#17633 = CARTESIAN_POINT('',(35.192920655655,104.26431770384, + 119.21924475672)); +#17634 = LINE('',#17635,#17636); +#17635 = CARTESIAN_POINT('',(34.776752655655,104.40441828366, + 118.78805950864)); +#17636 = VECTOR('',#17637,1.); +#17637 = DIRECTION('',(-0.676231511144,0.227649475229,-0.700633042158)); +#17638 = ORIENTED_EDGE('',*,*,#17639,.F.); +#17639 = EDGE_CURVE('',#17640,#17632,#17642,.T.); +#17640 = VERTEX_POINT('',#17641); +#17641 = CARTESIAN_POINT('',(35.476798655655,104.09696367921, + 119.73430748319)); +#17642 = LINE('',#17643,#17644); +#17643 = CARTESIAN_POINT('',(35.192920655655,104.26431770384, + 119.21924475672)); +#17644 = VECTOR('',#17645,1.); +#17645 = DIRECTION('',(-0.464262355506,0.27369564981,-0.842348595615)); +#17646 = ORIENTED_EDGE('',*,*,#17647,.F.); +#17647 = EDGE_CURVE('',#17312,#17640,#17648,.T.); +#17648 = LINE('',#17649,#17650); +#17649 = CARTESIAN_POINT('',(35.476798655655,104.09696367921, + 119.73430748319)); +#17650 = VECTOR('',#17651,1.); +#17651 = DIRECTION('',(-0.216003005405,0.301721937016,-0.928604638358)); +#17652 = FACE_BOUND('',#17653,.T.); +#17653 = EDGE_LOOP('',(#17654,#17664,#17672,#17680,#17688,#17696,#17704, + #17712,#17720,#17728,#17736,#17744,#17752,#17760,#17768,#17776, + #17784,#17792)); +#17654 = ORIENTED_EDGE('',*,*,#17655,.F.); +#17655 = EDGE_CURVE('',#17656,#17658,#17660,.T.); +#17656 = VERTEX_POINT('',#17657); +#17657 = CARTESIAN_POINT('',(62.373381655655,102.73470768501, + 123.92690032997)); +#17658 = VERTEX_POINT('',#17659); +#17659 = CARTESIAN_POINT('',(64.142784655655,102.73470768501, + 123.92690032997)); +#17660 = LINE('',#17661,#17662); +#17661 = CARTESIAN_POINT('',(64.142784655655,102.73470768501, + 123.92690032997)); +#17662 = VECTOR('',#17663,1.); +#17663 = DIRECTION('',(1.,0.,0.)); +#17664 = ORIENTED_EDGE('',*,*,#17665,.F.); +#17665 = EDGE_CURVE('',#17666,#17656,#17668,.T.); +#17666 = VERTEX_POINT('',#17667); +#17667 = CARTESIAN_POINT('',(61.125788527915,104.16211558624, + 119.53379053152)); +#17668 = LINE('',#17669,#17670); +#17669 = CARTESIAN_POINT('',(62.373381655655,102.73470768501, + 123.92690032997)); +#17670 = VECTOR('',#17671,1.); +#17671 = DIRECTION('',(0.260746127419,-0.298327294546,0.918157003113)); +#17672 = ORIENTED_EDGE('',*,*,#17673,.F.); +#17673 = EDGE_CURVE('',#17674,#17666,#17676,.T.); +#17674 = VERTEX_POINT('',#17675); +#17675 = CARTESIAN_POINT('',(61.079869783396,104.16211558624, + 119.53379053152)); +#17676 = LINE('',#17677,#17678); +#17677 = CARTESIAN_POINT('',(61.125788527915,104.16211558624, + 119.53379053152)); +#17678 = VECTOR('',#17679,1.); +#17679 = DIRECTION('',(1.,0.,0.)); +#17680 = ORIENTED_EDGE('',*,*,#17681,.F.); +#17681 = EDGE_CURVE('',#17682,#17674,#17684,.T.); +#17682 = VERTEX_POINT('',#17683); +#17683 = CARTESIAN_POINT('',(59.832276655655,102.73470768501, + 123.92690032997)); +#17684 = LINE('',#17685,#17686); +#17685 = CARTESIAN_POINT('',(61.079869783396,104.16211558624, + 119.53379053152)); +#17686 = VECTOR('',#17687,1.); +#17687 = DIRECTION('',(0.260746127419,0.298327294546,-0.918157003113)); +#17688 = ORIENTED_EDGE('',*,*,#17689,.F.); +#17689 = EDGE_CURVE('',#17690,#17682,#17692,.T.); +#17690 = VERTEX_POINT('',#17691); +#17691 = CARTESIAN_POINT('',(58.134531655655,102.73470768501, + 123.92690032997)); +#17692 = LINE('',#17693,#17694); +#17693 = CARTESIAN_POINT('',(59.832276655655,102.73470768501, + 123.92690032997)); +#17694 = VECTOR('',#17695,1.); +#17695 = DIRECTION('',(1.,0.,0.)); +#17696 = ORIENTED_EDGE('',*,*,#17697,.F.); +#17697 = EDGE_CURVE('',#17698,#17690,#17700,.T.); +#17698 = VERTEX_POINT('',#17699); +#17699 = CARTESIAN_POINT('',(60.163006655655,104.59306327018, + 118.20746993925)); +#17700 = LINE('',#17701,#17702); +#17701 = CARTESIAN_POINT('',(58.134531655655,102.73470768501, + 123.92690032997)); +#17702 = VECTOR('',#17703,1.); +#17703 = DIRECTION('',(-0.319613044291,-0.292808482211,0.901171845246)); +#17704 = ORIENTED_EDGE('',*,*,#17705,.F.); +#17705 = EDGE_CURVE('',#17706,#17698,#17708,.T.); +#17706 = VERTEX_POINT('',#17707); +#17707 = CARTESIAN_POINT('',(60.747294655655,104.93202988264, + 117.16423797645)); +#17708 = LINE('',#17709,#17710); +#17709 = CARTESIAN_POINT('',(60.163006655655,104.59306327018, + 118.20746993925)); +#17710 = VECTOR('',#17711,1.); +#17711 = DIRECTION('',(-0.470127451941,-0.272737947392,0.83940109065)); +#17712 = ORIENTED_EDGE('',*,*,#17713,.F.); +#17713 = EDGE_CURVE('',#17714,#17706,#17716,.T.); +#17714 = VERTEX_POINT('',#17715); +#17715 = CARTESIAN_POINT('',(61.585142655655,105.10917850992, + 116.61903056264)); +#17716 = LINE('',#17717,#17718); +#17717 = CARTESIAN_POINT('',(60.747294655655,104.93202988264, + 117.16423797645)); +#17718 = VECTOR('',#17719,1.); +#17719 = DIRECTION('',(-0.825306995477,-0.174497046402,0.537046686996)); +#17720 = ORIENTED_EDGE('',*,*,#17721,.F.); +#17721 = EDGE_CURVE('',#17722,#17714,#17724,.T.); +#17722 = VERTEX_POINT('',#17723); +#17723 = CARTESIAN_POINT('',(62.731673089206,105.16198329285, + 116.45651415153)); +#17724 = LINE('',#17725,#17726); +#17725 = CARTESIAN_POINT('',(61.585142655655,105.10917850992, + 116.61903056264)); +#17726 = VECTOR('',#17727,1.); +#17727 = DIRECTION('',(-0.989075087455,-4.555299516451E-02, + 0.140197703287)); +#17728 = ORIENTED_EDGE('',*,*,#17729,.F.); +#17729 = EDGE_CURVE('',#17730,#17722,#17732,.T.); +#17730 = VERTEX_POINT('',#17731); +#17731 = CARTESIAN_POINT('',(63.189182655655,105.15516981821, + 116.47748387026)); +#17732 = LINE('',#17733,#17734); +#17733 = CARTESIAN_POINT('',(62.731673089206,105.16198329285, + 116.45651415153)); +#17734 = VECTOR('',#17735,1.); +#17735 = DIRECTION('',(-0.998840724938,1.487526480095E-02, + -4.578135758901E-02)); +#17736 = ORIENTED_EDGE('',*,*,#17737,.F.); +#17737 = EDGE_CURVE('',#17738,#17730,#17740,.T.); +#17738 = VERTEX_POINT('',#17739); +#17739 = CARTESIAN_POINT('',(63.552985655655,105.13983948512, + 116.52466578404)); +#17740 = LINE('',#17741,#17742); +#17741 = CARTESIAN_POINT('',(63.189182655655,105.15516981821, + 116.47748387026)); +#17742 = VECTOR('',#17743,1.); +#17743 = DIRECTION('',(-0.990829985738,4.175268955411E-02, + -0.128501565273)); +#17744 = ORIENTED_EDGE('',*,*,#17745,.F.); +#17745 = EDGE_CURVE('',#17746,#17738,#17748,.T.); +#17746 = VERTEX_POINT('',#17747); +#17747 = CARTESIAN_POINT('',(63.552985655655,104.77021220648, + 117.66226157438)); +#17748 = LINE('',#17749,#17750); +#17749 = CARTESIAN_POINT('',(63.552985655655,105.13983948512, + 116.52466578404)); +#17750 = VECTOR('',#17751,1.); +#17751 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#17752 = ORIENTED_EDGE('',*,*,#17753,.F.); +#17753 = EDGE_CURVE('',#17754,#17746,#17756,.T.); +#17754 = VERTEX_POINT('',#17755); +#17755 = CARTESIAN_POINT('',(63.326986655655,104.78043139849, + 117.63081013539)); +#17756 = LINE('',#17757,#17758); +#17757 = CARTESIAN_POINT('',(63.552985655655,104.77021220648, + 117.66226157438)); +#17758 = VECTOR('',#17759,1.); +#17759 = DIRECTION('',(0.989462961173,-4.474140142678E-02,0.137699874601 + )); +#17760 = ORIENTED_EDGE('',*,*,#17761,.F.); +#17761 = EDGE_CURVE('',#17762,#17754,#17764,.T.); +#17762 = VERTEX_POINT('',#17763); +#17763 = CARTESIAN_POINT('',(63.012793655655,104.78724522321, + 117.6098393392)); +#17764 = LINE('',#17765,#17766); +#17765 = CARTESIAN_POINT('',(63.326986655655,104.78043139849, + 117.63081013539)); +#17766 = VECTOR('',#17767,1.); +#17767 = DIRECTION('',(0.997546457696,-2.163353963567E-02, + 6.658118878754E-02)); +#17768 = ORIENTED_EDGE('',*,*,#17769,.F.); +#17769 = EDGE_CURVE('',#17770,#17762,#17772,.T.); +#17770 = VERTEX_POINT('',#17771); +#17771 = CARTESIAN_POINT('',(62.439529655655,104.74977135034, + 117.72517206082)); +#17772 = LINE('',#17773,#17774); +#17773 = CARTESIAN_POINT('',(63.012793655655,104.78724522321, + 117.6098393392)); +#17774 = VECTOR('',#17775,1.); +#17775 = DIRECTION('',(0.978349490469,6.395403240402E-02,-0.196830272666 + )); +#17776 = ORIENTED_EDGE('',*,*,#17777,.F.); +#17777 = EDGE_CURVE('',#17778,#17770,#17780,.T.); +#17778 = VERTEX_POINT('',#17779); +#17779 = CARTESIAN_POINT('',(62.125336655655,104.62031671499, + 118.12359246085)); +#17780 = LINE('',#17781,#17782); +#17781 = CARTESIAN_POINT('',(62.439529655655,104.74977135034, + 117.72517206082)); +#17782 = VECTOR('',#17783,1.); +#17783 = DIRECTION('',(0.6,0.2472135955,-0.760845213036)); +#17784 = ORIENTED_EDGE('',*,*,#17785,.F.); +#17785 = EDGE_CURVE('',#17786,#17778,#17788,.T.); +#17786 = VERTEX_POINT('',#17787); +#17787 = CARTESIAN_POINT('',(62.053676655655,104.56069961135, + 118.30707503926)); +#17788 = LINE('',#17789,#17790); +#17789 = CARTESIAN_POINT('',(62.125336655655,104.62031671499, + 118.12359246085)); +#17790 = VECTOR('',#17791,1.); +#17791 = DIRECTION('',(0.348195679419,0.289679289797,-0.891541181268)); +#17792 = ORIENTED_EDGE('',*,*,#17793,.F.); +#17793 = EDGE_CURVE('',#17658,#17786,#17794,.T.); +#17794 = LINE('',#17795,#17796); +#17795 = CARTESIAN_POINT('',(62.053676655655,104.56069961135, + 118.30707503926)); +#17796 = VECTOR('',#17797,1.); +#17797 = DIRECTION('',(-0.33332609937,0.291344806629,-0.896667115004)); +#17798 = FACE_BOUND('',#17799,.T.); +#17799 = EDGE_LOOP('',(#17800,#17801,#17802,#17803,#17804,#17805,#17806, + #17807)); +#17800 = ORIENTED_EDGE('',*,*,#15164,.T.); +#17801 = ORIENTED_EDGE('',*,*,#15256,.T.); +#17802 = ORIENTED_EDGE('',*,*,#15133,.F.); +#17803 = ORIENTED_EDGE('',*,*,#15274,.T.); +#17804 = ORIENTED_EDGE('',*,*,#15102,.T.); +#17805 = ORIENTED_EDGE('',*,*,#15238,.T.); +#17806 = ORIENTED_EDGE('',*,*,#15195,.T.); +#17807 = ORIENTED_EDGE('',*,*,#15220,.T.); +#17808 = PLANE('',#17809); +#17809 = AXIS2_PLACEMENT_3D('',#17810,#17811,#17812); +#17810 = CARTESIAN_POINT('',(130.,126.71897379311,50.11091937783)); +#17811 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17812 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#17813 = ADVANCED_FACE('',(#17814),#17839,.T.); +#17814 = FACE_BOUND('',#17815,.T.); +#17815 = EDGE_LOOP('',(#17816,#17817,#17825,#17833)); +#17816 = ORIENTED_EDGE('',*,*,#17655,.T.); +#17817 = ORIENTED_EDGE('',*,*,#17818,.F.); +#17818 = EDGE_CURVE('',#17819,#17658,#17821,.T.); +#17819 = VERTEX_POINT('',#17820); +#17820 = CARTESIAN_POINT('',(64.142784655655,103.30534159478, + 124.11231052659)); +#17821 = LINE('',#17822,#17823); +#17822 = CARTESIAN_POINT('',(64.142784655655,103.30534159478, + 124.11231052659)); +#17823 = VECTOR('',#17824,1.); +#17824 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17825 = ORIENTED_EDGE('',*,*,#17826,.T.); +#17826 = EDGE_CURVE('',#17819,#17827,#17829,.T.); +#17827 = VERTEX_POINT('',#17828); +#17828 = CARTESIAN_POINT('',(62.373381655655,103.30534159478, + 124.11231052659)); +#17829 = LINE('',#17830,#17831); +#17830 = CARTESIAN_POINT('',(64.142784655655,103.30534159478, + 124.11231052659)); +#17831 = VECTOR('',#17832,1.); +#17832 = DIRECTION('',(-1.,0.,0.)); +#17833 = ORIENTED_EDGE('',*,*,#17834,.T.); +#17834 = EDGE_CURVE('',#17827,#17656,#17835,.T.); +#17835 = LINE('',#17836,#17837); +#17836 = CARTESIAN_POINT('',(62.373381655655,103.30534159478, + 124.11231052659)); +#17837 = VECTOR('',#17838,1.); +#17838 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17839 = PLANE('',#17840); +#17840 = AXIS2_PLACEMENT_3D('',#17841,#17842,#17843); +#17841 = CARTESIAN_POINT('',(64.142784655655,103.30534159478, + 124.11231052659)); +#17842 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17843 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#17844 = ADVANCED_FACE('',(#17845),#17863,.T.); +#17845 = FACE_BOUND('',#17846,.T.); +#17846 = EDGE_LOOP('',(#17847,#17848,#17849,#17857)); +#17847 = ORIENTED_EDGE('',*,*,#17665,.T.); +#17848 = ORIENTED_EDGE('',*,*,#17834,.F.); +#17849 = ORIENTED_EDGE('',*,*,#17850,.T.); +#17850 = EDGE_CURVE('',#17827,#17851,#17853,.T.); +#17851 = VERTEX_POINT('',#17852); +#17852 = CARTESIAN_POINT('',(61.125788527915,104.73274949601, + 119.71920072815)); +#17853 = LINE('',#17854,#17855); +#17854 = CARTESIAN_POINT('',(62.373381655655,103.30534159478, + 124.11231052659)); +#17855 = VECTOR('',#17856,1.); +#17856 = DIRECTION('',(-0.260746127419,0.298327294546,-0.918157003113)); +#17857 = ORIENTED_EDGE('',*,*,#17858,.T.); +#17858 = EDGE_CURVE('',#17851,#17666,#17859,.T.); +#17859 = LINE('',#17860,#17861); +#17860 = CARTESIAN_POINT('',(61.125788527915,104.73274949601, + 119.71920072815)); +#17861 = VECTOR('',#17862,1.); +#17862 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17863 = PLANE('',#17864); +#17864 = AXIS2_PLACEMENT_3D('',#17865,#17866,#17867); +#17865 = CARTESIAN_POINT('',(62.373381655655,103.30534159478, + 124.11231052659)); +#17866 = DIRECTION('',(-0.965407404693,-8.057498458981E-02,0.24798430358 + )); +#17867 = DIRECTION('',(0.260746127419,-0.298327294546,0.918157003113)); +#17868 = ADVANCED_FACE('',(#17869),#17887,.T.); +#17869 = FACE_BOUND('',#17870,.T.); +#17870 = EDGE_LOOP('',(#17871,#17872,#17873,#17881)); +#17871 = ORIENTED_EDGE('',*,*,#17673,.T.); +#17872 = ORIENTED_EDGE('',*,*,#17858,.F.); +#17873 = ORIENTED_EDGE('',*,*,#17874,.T.); +#17874 = EDGE_CURVE('',#17851,#17875,#17877,.T.); +#17875 = VERTEX_POINT('',#17876); +#17876 = CARTESIAN_POINT('',(61.079869783396,104.73274949601, + 119.71920072815)); +#17877 = LINE('',#17878,#17879); +#17878 = CARTESIAN_POINT('',(61.125788527915,104.73274949601, + 119.71920072815)); +#17879 = VECTOR('',#17880,1.); +#17880 = DIRECTION('',(-1.,0.,0.)); +#17881 = ORIENTED_EDGE('',*,*,#17882,.T.); +#17882 = EDGE_CURVE('',#17875,#17674,#17883,.T.); +#17883 = LINE('',#17884,#17885); +#17884 = CARTESIAN_POINT('',(61.079869783396,104.73274949601, + 119.71920072815)); +#17885 = VECTOR('',#17886,1.); +#17886 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17887 = PLANE('',#17888); +#17888 = AXIS2_PLACEMENT_3D('',#17889,#17890,#17891); +#17889 = CARTESIAN_POINT('',(61.125788527915,104.73274949601, + 119.71920072815)); +#17890 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17891 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#17892 = ADVANCED_FACE('',(#17893),#17911,.T.); +#17893 = FACE_BOUND('',#17894,.T.); +#17894 = EDGE_LOOP('',(#17895,#17896,#17897,#17905)); +#17895 = ORIENTED_EDGE('',*,*,#17681,.T.); +#17896 = ORIENTED_EDGE('',*,*,#17882,.F.); +#17897 = ORIENTED_EDGE('',*,*,#17898,.T.); +#17898 = EDGE_CURVE('',#17875,#17899,#17901,.T.); +#17899 = VERTEX_POINT('',#17900); +#17900 = CARTESIAN_POINT('',(59.832276655655,103.30534159478, + 124.11231052659)); +#17901 = LINE('',#17902,#17903); +#17902 = CARTESIAN_POINT('',(61.079869783396,104.73274949601, + 119.71920072815)); +#17903 = VECTOR('',#17904,1.); +#17904 = DIRECTION('',(-0.260746127419,-0.298327294546,0.918157003113)); +#17905 = ORIENTED_EDGE('',*,*,#17906,.T.); +#17906 = EDGE_CURVE('',#17899,#17682,#17907,.T.); +#17907 = LINE('',#17908,#17909); +#17908 = CARTESIAN_POINT('',(59.832276655655,103.30534159478, + 124.11231052659)); +#17909 = VECTOR('',#17910,1.); +#17910 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17911 = PLANE('',#17912); +#17912 = AXIS2_PLACEMENT_3D('',#17913,#17914,#17915); +#17913 = CARTESIAN_POINT('',(61.079869783396,104.73274949601, + 119.71920072815)); +#17914 = DIRECTION('',(0.965407404693,-8.057498458981E-02,0.24798430358) + ); +#17915 = DIRECTION('',(0.260746127419,0.298327294546,-0.918157003113)); +#17916 = ADVANCED_FACE('',(#17917),#17935,.T.); +#17917 = FACE_BOUND('',#17918,.T.); +#17918 = EDGE_LOOP('',(#17919,#17920,#17921,#17929)); +#17919 = ORIENTED_EDGE('',*,*,#17689,.T.); +#17920 = ORIENTED_EDGE('',*,*,#17906,.F.); +#17921 = ORIENTED_EDGE('',*,*,#17922,.T.); +#17922 = EDGE_CURVE('',#17899,#17923,#17925,.T.); +#17923 = VERTEX_POINT('',#17924); +#17924 = CARTESIAN_POINT('',(58.134531655655,103.30534159478, + 124.11231052659)); +#17925 = LINE('',#17926,#17927); +#17926 = CARTESIAN_POINT('',(59.832276655655,103.30534159478, + 124.11231052659)); +#17927 = VECTOR('',#17928,1.); +#17928 = DIRECTION('',(-1.,0.,0.)); +#17929 = ORIENTED_EDGE('',*,*,#17930,.T.); +#17930 = EDGE_CURVE('',#17923,#17690,#17931,.T.); +#17931 = LINE('',#17932,#17933); +#17932 = CARTESIAN_POINT('',(58.134531655655,103.30534159478, + 124.11231052659)); +#17933 = VECTOR('',#17934,1.); +#17934 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17935 = PLANE('',#17936); +#17936 = AXIS2_PLACEMENT_3D('',#17937,#17938,#17939); +#17937 = CARTESIAN_POINT('',(59.832276655655,103.30534159478, + 124.11231052659)); +#17938 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#17939 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#17940 = ADVANCED_FACE('',(#17941),#17959,.T.); +#17941 = FACE_BOUND('',#17942,.T.); +#17942 = EDGE_LOOP('',(#17943,#17944,#17945,#17953)); +#17943 = ORIENTED_EDGE('',*,*,#17697,.T.); +#17944 = ORIENTED_EDGE('',*,*,#17930,.F.); +#17945 = ORIENTED_EDGE('',*,*,#17946,.T.); +#17946 = EDGE_CURVE('',#17923,#17947,#17949,.T.); +#17947 = VERTEX_POINT('',#17948); +#17948 = CARTESIAN_POINT('',(60.163006655655,105.16369717996, + 118.39288013588)); +#17949 = LINE('',#17950,#17951); +#17950 = CARTESIAN_POINT('',(58.134531655655,103.30534159478, + 124.11231052659)); +#17951 = VECTOR('',#17952,1.); +#17952 = DIRECTION('',(0.319613044291,0.292808482211,-0.901171845246)); +#17953 = ORIENTED_EDGE('',*,*,#17954,.T.); +#17954 = EDGE_CURVE('',#17947,#17698,#17955,.T.); +#17955 = LINE('',#17956,#17957); +#17956 = CARTESIAN_POINT('',(60.163006655655,105.16369717996, + 118.39288013588)); +#17957 = VECTOR('',#17958,1.); +#17958 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17959 = PLANE('',#17960); +#17960 = AXIS2_PLACEMENT_3D('',#17961,#17962,#17963); +#17961 = CARTESIAN_POINT('',(58.134531655655,103.30534159478, + 124.11231052659)); +#17962 = DIRECTION('',(-0.947548152824,9.876586230973E-02, + -0.303970068466)); +#17963 = DIRECTION('',(-0.319613044291,-0.292808482211,0.901171845246)); +#17964 = ADVANCED_FACE('',(#17965),#17983,.T.); +#17965 = FACE_BOUND('',#17966,.T.); +#17966 = EDGE_LOOP('',(#17967,#17968,#17969,#17977)); +#17967 = ORIENTED_EDGE('',*,*,#17705,.T.); +#17968 = ORIENTED_EDGE('',*,*,#17954,.F.); +#17969 = ORIENTED_EDGE('',*,*,#17970,.T.); +#17970 = EDGE_CURVE('',#17947,#17971,#17973,.T.); +#17971 = VERTEX_POINT('',#17972); +#17972 = CARTESIAN_POINT('',(60.747294655655,105.50266379241, + 117.34964817308)); +#17973 = LINE('',#17974,#17975); +#17974 = CARTESIAN_POINT('',(60.163006655655,105.16369717996, + 118.39288013588)); +#17975 = VECTOR('',#17976,1.); +#17976 = DIRECTION('',(0.470127451941,0.272737947392,-0.83940109065)); +#17977 = ORIENTED_EDGE('',*,*,#17978,.T.); +#17978 = EDGE_CURVE('',#17971,#17706,#17979,.T.); +#17979 = LINE('',#17980,#17981); +#17980 = CARTESIAN_POINT('',(60.747294655655,105.50266379241, + 117.34964817308)); +#17981 = VECTOR('',#17982,1.); +#17982 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#17983 = PLANE('',#17984); +#17984 = AXIS2_PLACEMENT_3D('',#17985,#17986,#17987); +#17985 = CARTESIAN_POINT('',(60.163006655655,105.16369717996, + 118.39288013588)); +#17986 = DIRECTION('',(-0.882598537803,0.145277372172,-0.447117776658)); +#17987 = DIRECTION('',(-0.470127451941,-0.272737947392,0.83940109065)); +#17988 = ADVANCED_FACE('',(#17989),#18007,.T.); +#17989 = FACE_BOUND('',#17990,.T.); +#17990 = EDGE_LOOP('',(#17991,#17992,#17993,#18001)); +#17991 = ORIENTED_EDGE('',*,*,#17713,.T.); +#17992 = ORIENTED_EDGE('',*,*,#17978,.F.); +#17993 = ORIENTED_EDGE('',*,*,#17994,.T.); +#17994 = EDGE_CURVE('',#17971,#17995,#17997,.T.); +#17995 = VERTEX_POINT('',#17996); +#17996 = CARTESIAN_POINT('',(61.585142655655,105.6798124197, + 116.80444075927)); +#17997 = LINE('',#17998,#17999); +#17998 = CARTESIAN_POINT('',(60.747294655655,105.50266379241, + 117.34964817308)); +#17999 = VECTOR('',#18000,1.); +#18000 = DIRECTION('',(0.825306995477,0.174497046402,-0.537046686996)); +#18001 = ORIENTED_EDGE('',*,*,#18002,.T.); +#18002 = EDGE_CURVE('',#17995,#17714,#18003,.T.); +#18003 = LINE('',#18004,#18005); +#18004 = CARTESIAN_POINT('',(61.585142655655,105.6798124197, + 116.80444075927)); +#18005 = VECTOR('',#18006,1.); +#18006 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18007 = PLANE('',#18008); +#18008 = AXIS2_PLACEMENT_3D('',#18009,#18010,#18011); +#18009 = CARTESIAN_POINT('',(60.747294655655,105.50266379241, + 117.34964817308)); +#18010 = DIRECTION('',(-0.564684304029,0.255033887179,-0.784913595992)); +#18011 = DIRECTION('',(-0.825306995477,-0.174497046402,0.537046686996)); +#18012 = ADVANCED_FACE('',(#18013),#18031,.T.); +#18013 = FACE_BOUND('',#18014,.T.); +#18014 = EDGE_LOOP('',(#18015,#18016,#18017,#18025)); +#18015 = ORIENTED_EDGE('',*,*,#17721,.T.); +#18016 = ORIENTED_EDGE('',*,*,#18002,.F.); +#18017 = ORIENTED_EDGE('',*,*,#18018,.T.); +#18018 = EDGE_CURVE('',#17995,#18019,#18021,.T.); +#18019 = VERTEX_POINT('',#18020); +#18020 = CARTESIAN_POINT('',(62.731673089206,105.73261720263, + 116.64192434815)); +#18021 = LINE('',#18022,#18023); +#18022 = CARTESIAN_POINT('',(61.585142655655,105.6798124197, + 116.80444075927)); +#18023 = VECTOR('',#18024,1.); +#18024 = DIRECTION('',(0.989075087455,4.555299516451E-02,-0.140197703287 + )); +#18025 = ORIENTED_EDGE('',*,*,#18026,.T.); +#18026 = EDGE_CURVE('',#18019,#17722,#18027,.T.); +#18027 = LINE('',#18028,#18029); +#18028 = CARTESIAN_POINT('',(62.731673089206,105.73261720263, + 116.64192434815)); +#18029 = VECTOR('',#18030,1.); +#18030 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18031 = PLANE('',#18032); +#18032 = AXIS2_PLACEMENT_3D('',#18033,#18034,#18035); +#18033 = CARTESIAN_POINT('',(61.585142655655,105.6798124197, + 116.80444075927)); +#18034 = DIRECTION('',(-0.147412588931,0.305641010737,-0.94066630703)); +#18035 = DIRECTION('',(-0.989075087455,-4.555299516451E-02, + 0.140197703287)); +#18036 = ADVANCED_FACE('',(#18037),#18055,.T.); +#18037 = FACE_BOUND('',#18038,.T.); +#18038 = EDGE_LOOP('',(#18039,#18040,#18041,#18049)); +#18039 = ORIENTED_EDGE('',*,*,#17729,.T.); +#18040 = ORIENTED_EDGE('',*,*,#18026,.F.); +#18041 = ORIENTED_EDGE('',*,*,#18042,.T.); +#18042 = EDGE_CURVE('',#18019,#18043,#18045,.T.); +#18043 = VERTEX_POINT('',#18044); +#18044 = CARTESIAN_POINT('',(63.189182655655,105.72580372798, + 116.66289406689)); +#18045 = LINE('',#18046,#18047); +#18046 = CARTESIAN_POINT('',(62.731673089206,105.73261720263, + 116.64192434815)); +#18047 = VECTOR('',#18048,1.); +#18048 = DIRECTION('',(0.998840724938,-1.487526480095E-02, + 4.578135758901E-02)); +#18049 = ORIENTED_EDGE('',*,*,#18050,.T.); +#18050 = EDGE_CURVE('',#18043,#17730,#18051,.T.); +#18051 = LINE('',#18052,#18053); +#18052 = CARTESIAN_POINT('',(63.189182655655,105.72580372798, + 116.66289406689)); +#18053 = VECTOR('',#18054,1.); +#18054 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18055 = PLANE('',#18056); +#18056 = AXIS2_PLACEMENT_3D('',#18057,#18058,#18059); +#18057 = CARTESIAN_POINT('',(62.731673089206,105.73261720263, + 116.64192434815)); +#18058 = DIRECTION('',(4.813736807919E-02,0.30865875868,-0.949953980193) + ); +#18059 = DIRECTION('',(-0.998840724938,1.487526480095E-02, + -4.578135758901E-02)); +#18060 = ADVANCED_FACE('',(#18061),#18079,.T.); +#18061 = FACE_BOUND('',#18062,.T.); +#18062 = EDGE_LOOP('',(#18063,#18064,#18065,#18073)); +#18063 = ORIENTED_EDGE('',*,*,#17737,.T.); +#18064 = ORIENTED_EDGE('',*,*,#18050,.F.); +#18065 = ORIENTED_EDGE('',*,*,#18066,.T.); +#18066 = EDGE_CURVE('',#18043,#18067,#18069,.T.); +#18067 = VERTEX_POINT('',#18068); +#18068 = CARTESIAN_POINT('',(63.552985655655,105.71047339489, + 116.71007598066)); +#18069 = LINE('',#18070,#18071); +#18070 = CARTESIAN_POINT('',(63.189182655655,105.72580372798, + 116.66289406689)); +#18071 = VECTOR('',#18072,1.); +#18072 = DIRECTION('',(0.990829985738,-4.175268955411E-02,0.128501565273 + )); +#18073 = ORIENTED_EDGE('',*,*,#18074,.T.); +#18074 = EDGE_CURVE('',#18067,#17738,#18075,.T.); +#18075 = LINE('',#18076,#18077); +#18076 = CARTESIAN_POINT('',(63.552985655655,105.71047339489, + 116.71007598066)); +#18077 = VECTOR('',#18078,1.); +#18078 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18079 = PLANE('',#18080); +#18080 = AXIS2_PLACEMENT_3D('',#18081,#18082,#18083); +#18081 = CARTESIAN_POINT('',(63.189182655655,105.72580372798, + 116.66289406689)); +#18082 = DIRECTION('',(0.135114541641,0.306183304129,-0.942335314477)); +#18083 = DIRECTION('',(-0.990829985738,4.175268955411E-02, + -0.128501565273)); +#18084 = ADVANCED_FACE('',(#18085),#18103,.T.); +#18085 = FACE_BOUND('',#18086,.T.); +#18086 = EDGE_LOOP('',(#18087,#18088,#18089,#18097)); +#18087 = ORIENTED_EDGE('',*,*,#17745,.T.); +#18088 = ORIENTED_EDGE('',*,*,#18074,.F.); +#18089 = ORIENTED_EDGE('',*,*,#18090,.T.); +#18090 = EDGE_CURVE('',#18067,#18091,#18093,.T.); +#18091 = VERTEX_POINT('',#18092); +#18092 = CARTESIAN_POINT('',(63.552985655655,105.34084611626, + 117.84767177101)); +#18093 = LINE('',#18094,#18095); +#18094 = CARTESIAN_POINT('',(63.552985655655,105.71047339489, + 116.71007598066)); +#18095 = VECTOR('',#18096,1.); +#18096 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#18097 = ORIENTED_EDGE('',*,*,#18098,.T.); +#18098 = EDGE_CURVE('',#18091,#17746,#18099,.T.); +#18099 = LINE('',#18100,#18101); +#18100 = CARTESIAN_POINT('',(63.552985655655,105.34084611626, + 117.84767177101)); +#18101 = VECTOR('',#18102,1.); +#18102 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18103 = PLANE('',#18104); +#18104 = AXIS2_PLACEMENT_3D('',#18105,#18106,#18107); +#18105 = CARTESIAN_POINT('',(63.552985655655,105.71047339489, + 116.71007598066)); +#18106 = DIRECTION('',(1.,0.,0.)); +#18107 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#18108 = ADVANCED_FACE('',(#18109),#18127,.T.); +#18109 = FACE_BOUND('',#18110,.T.); +#18110 = EDGE_LOOP('',(#18111,#18112,#18113,#18121)); +#18111 = ORIENTED_EDGE('',*,*,#17753,.T.); +#18112 = ORIENTED_EDGE('',*,*,#18098,.F.); +#18113 = ORIENTED_EDGE('',*,*,#18114,.T.); +#18114 = EDGE_CURVE('',#18091,#18115,#18117,.T.); +#18115 = VERTEX_POINT('',#18116); +#18116 = CARTESIAN_POINT('',(63.326986655655,105.35106530826, + 117.81622033201)); +#18117 = LINE('',#18118,#18119); +#18118 = CARTESIAN_POINT('',(63.552985655655,105.34084611626, + 117.84767177101)); +#18119 = VECTOR('',#18120,1.); +#18120 = DIRECTION('',(-0.989462961173,4.474140142678E-02, + -0.137699874601)); +#18121 = ORIENTED_EDGE('',*,*,#18122,.T.); +#18122 = EDGE_CURVE('',#18115,#17754,#18123,.T.); +#18123 = LINE('',#18124,#18125); +#18124 = CARTESIAN_POINT('',(63.326986655655,105.35106530826, + 117.81622033201)); +#18125 = VECTOR('',#18126,1.); +#18126 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18127 = PLANE('',#18128); +#18128 = AXIS2_PLACEMENT_3D('',#18129,#18130,#18131); +#18129 = CARTESIAN_POINT('',(63.552985655655,105.34084611626, + 117.84767177101)); +#18130 = DIRECTION('',(-0.144786216426,-0.305760870307,0.941035196856)); +#18131 = DIRECTION('',(0.989462961173,-4.474140142678E-02,0.137699874601 + )); +#18132 = ADVANCED_FACE('',(#18133),#18151,.T.); +#18133 = FACE_BOUND('',#18134,.T.); +#18134 = EDGE_LOOP('',(#18135,#18136,#18137,#18145)); +#18135 = ORIENTED_EDGE('',*,*,#17761,.T.); +#18136 = ORIENTED_EDGE('',*,*,#18122,.F.); +#18137 = ORIENTED_EDGE('',*,*,#18138,.T.); +#18138 = EDGE_CURVE('',#18115,#18139,#18141,.T.); +#18139 = VERTEX_POINT('',#18140); +#18140 = CARTESIAN_POINT('',(63.012793655655,105.35787913299, + 117.79524953583)); +#18141 = LINE('',#18142,#18143); +#18142 = CARTESIAN_POINT('',(63.326986655655,105.35106530826, + 117.81622033201)); +#18143 = VECTOR('',#18144,1.); +#18144 = DIRECTION('',(-0.997546457696,2.163353963567E-02, + -6.658118878754E-02)); +#18145 = ORIENTED_EDGE('',*,*,#18146,.T.); +#18146 = EDGE_CURVE('',#18139,#17762,#18147,.T.); +#18147 = LINE('',#18148,#18149); +#18148 = CARTESIAN_POINT('',(63.012793655655,105.35787913299, + 117.79524953583)); +#18149 = VECTOR('',#18150,1.); +#18150 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18151 = PLANE('',#18152); +#18152 = AXIS2_PLACEMENT_3D('',#18153,#18154,#18155); +#18153 = CARTESIAN_POINT('',(63.326986655655,105.35106530826, + 117.81622033201)); +#18154 = DIRECTION('',(-7.000760485498E-02,-0.308258808107, + 0.948723058899)); +#18155 = DIRECTION('',(0.997546457696,-2.163353963567E-02, + 6.658118878754E-02)); +#18156 = ADVANCED_FACE('',(#18157),#18175,.T.); +#18157 = FACE_BOUND('',#18158,.T.); +#18158 = EDGE_LOOP('',(#18159,#18160,#18161,#18169)); +#18159 = ORIENTED_EDGE('',*,*,#17769,.T.); +#18160 = ORIENTED_EDGE('',*,*,#18146,.F.); +#18161 = ORIENTED_EDGE('',*,*,#18162,.T.); +#18162 = EDGE_CURVE('',#18139,#18163,#18165,.T.); +#18163 = VERTEX_POINT('',#18164); +#18164 = CARTESIAN_POINT('',(62.439529655655,105.32040526012, + 117.91058225745)); +#18165 = LINE('',#18166,#18167); +#18166 = CARTESIAN_POINT('',(63.012793655655,105.35787913299, + 117.79524953583)); +#18167 = VECTOR('',#18168,1.); +#18168 = DIRECTION('',(-0.978349490469,-6.395403240402E-02, + 0.196830272666)); +#18169 = ORIENTED_EDGE('',*,*,#18170,.T.); +#18170 = EDGE_CURVE('',#18163,#17770,#18171,.T.); +#18171 = LINE('',#18172,#18173); +#18172 = CARTESIAN_POINT('',(62.439529655655,105.32040526012, + 117.91058225745)); +#18173 = VECTOR('',#18174,1.); +#18174 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18175 = PLANE('',#18176); +#18176 = AXIS2_PLACEMENT_3D('',#18177,#18178,#18179); +#18177 = CARTESIAN_POINT('',(63.012793655655,105.35787913299, + 117.79524953583)); +#18178 = DIRECTION('',(0.206959596295,-0.302326618993,0.930465658125)); +#18179 = DIRECTION('',(0.978349490469,6.395403240402E-02,-0.196830272666 + )); +#18180 = ADVANCED_FACE('',(#18181),#18199,.T.); +#18181 = FACE_BOUND('',#18182,.T.); +#18182 = EDGE_LOOP('',(#18183,#18184,#18185,#18193)); +#18183 = ORIENTED_EDGE('',*,*,#17777,.T.); +#18184 = ORIENTED_EDGE('',*,*,#18170,.F.); +#18185 = ORIENTED_EDGE('',*,*,#18186,.T.); +#18186 = EDGE_CURVE('',#18163,#18187,#18189,.T.); +#18187 = VERTEX_POINT('',#18188); +#18188 = CARTESIAN_POINT('',(62.125336655655,105.19095062476, + 118.30900265748)); +#18189 = LINE('',#18190,#18191); +#18190 = CARTESIAN_POINT('',(62.439529655655,105.32040526012, + 117.91058225745)); +#18191 = VECTOR('',#18192,1.); +#18192 = DIRECTION('',(-0.6,-0.2472135955,0.760845213036)); +#18193 = ORIENTED_EDGE('',*,*,#18194,.T.); +#18194 = EDGE_CURVE('',#18187,#17778,#18195,.T.); +#18195 = LINE('',#18196,#18197); +#18196 = CARTESIAN_POINT('',(62.125336655655,105.19095062476, + 118.30900265748)); +#18197 = VECTOR('',#18198,1.); +#18198 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18199 = PLANE('',#18200); +#18200 = AXIS2_PLACEMENT_3D('',#18201,#18202,#18203); +#18201 = CARTESIAN_POINT('',(62.439529655655,105.32040526012, + 117.91058225745)); +#18202 = DIRECTION('',(0.8,-0.185410196625,0.570633909777)); +#18203 = DIRECTION('',(0.6,0.2472135955,-0.760845213036)); +#18204 = ADVANCED_FACE('',(#18205),#18223,.T.); +#18205 = FACE_BOUND('',#18206,.T.); +#18206 = EDGE_LOOP('',(#18207,#18208,#18209,#18217)); +#18207 = ORIENTED_EDGE('',*,*,#17785,.T.); +#18208 = ORIENTED_EDGE('',*,*,#18194,.F.); +#18209 = ORIENTED_EDGE('',*,*,#18210,.T.); +#18210 = EDGE_CURVE('',#18187,#18211,#18213,.T.); +#18211 = VERTEX_POINT('',#18212); +#18212 = CARTESIAN_POINT('',(62.053676655655,105.13133352112, + 118.49248523589)); +#18213 = LINE('',#18214,#18215); +#18214 = CARTESIAN_POINT('',(62.125336655655,105.19095062476, + 118.30900265748)); +#18215 = VECTOR('',#18216,1.); +#18216 = DIRECTION('',(-0.348195679419,-0.289679289797,0.891541181268)); +#18217 = ORIENTED_EDGE('',*,*,#18218,.T.); +#18218 = EDGE_CURVE('',#18211,#17786,#18219,.T.); +#18219 = LINE('',#18220,#18221); +#18220 = CARTESIAN_POINT('',(62.053676655655,105.13133352112, + 118.49248523589)); +#18221 = VECTOR('',#18222,1.); +#18222 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18223 = PLANE('',#18224); +#18224 = AXIS2_PLACEMENT_3D('',#18225,#18226,#18227); +#18225 = CARTESIAN_POINT('',(62.125336655655,105.19095062476, + 118.30900265748)); +#18226 = DIRECTION('',(0.937421873456,-0.107598382308,0.331153769857)); +#18227 = DIRECTION('',(0.348195679419,0.289679289797,-0.891541181268)); +#18228 = ADVANCED_FACE('',(#18229),#18240,.T.); +#18229 = FACE_BOUND('',#18230,.T.); +#18230 = EDGE_LOOP('',(#18231,#18232,#18233,#18239)); +#18231 = ORIENTED_EDGE('',*,*,#17793,.T.); +#18232 = ORIENTED_EDGE('',*,*,#18218,.F.); +#18233 = ORIENTED_EDGE('',*,*,#18234,.T.); +#18234 = EDGE_CURVE('',#18211,#17819,#18235,.T.); +#18235 = LINE('',#18236,#18237); +#18236 = CARTESIAN_POINT('',(62.053676655655,105.13133352112, + 118.49248523589)); +#18237 = VECTOR('',#18238,1.); +#18238 = DIRECTION('',(0.33332609937,-0.291344806629,0.896667115004)); +#18239 = ORIENTED_EDGE('',*,*,#17818,.T.); +#18240 = PLANE('',#18241); +#18241 = AXIS2_PLACEMENT_3D('',#18242,#18243,#18244); +#18242 = CARTESIAN_POINT('',(62.053676655655,105.13133352112, + 118.49248523589)); +#18243 = DIRECTION('',(0.942811599143,0.103003429374,-0.317011958857)); +#18244 = DIRECTION('',(-0.33332609937,0.291344806629,-0.896667115004)); +#18245 = ADVANCED_FACE('',(#18246),#18266,.T.); +#18246 = FACE_BOUND('',#18247,.T.); +#18247 = EDGE_LOOP('',(#18248,#18249,#18250,#18251,#18252,#18253,#18254, + #18255,#18256,#18257,#18258,#18259,#18260,#18261,#18262,#18263, + #18264,#18265)); +#18248 = ORIENTED_EDGE('',*,*,#17826,.F.); +#18249 = ORIENTED_EDGE('',*,*,#18234,.F.); +#18250 = ORIENTED_EDGE('',*,*,#18210,.F.); +#18251 = ORIENTED_EDGE('',*,*,#18186,.F.); +#18252 = ORIENTED_EDGE('',*,*,#18162,.F.); +#18253 = ORIENTED_EDGE('',*,*,#18138,.F.); +#18254 = ORIENTED_EDGE('',*,*,#18114,.F.); +#18255 = ORIENTED_EDGE('',*,*,#18090,.F.); +#18256 = ORIENTED_EDGE('',*,*,#18066,.F.); +#18257 = ORIENTED_EDGE('',*,*,#18042,.F.); +#18258 = ORIENTED_EDGE('',*,*,#18018,.F.); +#18259 = ORIENTED_EDGE('',*,*,#17994,.F.); +#18260 = ORIENTED_EDGE('',*,*,#17970,.F.); +#18261 = ORIENTED_EDGE('',*,*,#17946,.F.); +#18262 = ORIENTED_EDGE('',*,*,#17922,.F.); +#18263 = ORIENTED_EDGE('',*,*,#17898,.F.); +#18264 = ORIENTED_EDGE('',*,*,#17874,.F.); +#18265 = ORIENTED_EDGE('',*,*,#17850,.F.); +#18266 = PLANE('',#18267); +#18267 = AXIS2_PLACEMENT_3D('',#18268,#18269,#18270); +#18268 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#18269 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#18270 = DIRECTION('',(-1.,0.,0.)); +#18271 = ADVANCED_FACE('',(#18272),#18297,.T.); +#18272 = FACE_BOUND('',#18273,.T.); +#18273 = EDGE_LOOP('',(#18274,#18275,#18283,#18291)); +#18274 = ORIENTED_EDGE('',*,*,#17309,.T.); +#18275 = ORIENTED_EDGE('',*,*,#18276,.F.); +#18276 = EDGE_CURVE('',#18277,#17312,#18279,.T.); +#18277 = VERTEX_POINT('',#18278); +#18278 = CARTESIAN_POINT('',(35.611850655655,104.4789513664, + 120.50031105343)); +#18279 = LINE('',#18280,#18281); +#18280 = CARTESIAN_POINT('',(35.611850655655,104.4789513664, + 120.50031105343)); +#18281 = VECTOR('',#18282,1.); +#18282 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18283 = ORIENTED_EDGE('',*,*,#18284,.T.); +#18284 = EDGE_CURVE('',#18277,#18285,#18287,.T.); +#18285 = VERTEX_POINT('',#18286); +#18286 = CARTESIAN_POINT('',(35.617850655655,104.46021566603, + 120.55797361001)); +#18287 = LINE('',#18288,#18289); +#18288 = CARTESIAN_POINT('',(35.611850655655,104.4789513664, + 120.50031105343)); +#18289 = VECTOR('',#18290,1.); +#18290 = DIRECTION('',(9.847986576642E-02,-0.307514876229,0.946433472008 + )); +#18291 = ORIENTED_EDGE('',*,*,#18292,.T.); +#18292 = EDGE_CURVE('',#18285,#17310,#18293,.T.); +#18293 = LINE('',#18294,#18295); +#18294 = CARTESIAN_POINT('',(35.617850655655,104.46021566603, + 120.55797361001)); +#18295 = VECTOR('',#18296,1.); +#18296 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18297 = PLANE('',#18298); +#18298 = AXIS2_PLACEMENT_3D('',#18299,#18300,#18301); +#18299 = CARTESIAN_POINT('',(35.611850655655,104.4789513664, + 120.50031105343)); +#18300 = DIRECTION('',(0.995139043571,3.043195212559E-02, + -9.365991806102E-02)); +#18301 = DIRECTION('',(-9.847986576642E-02,0.307514876229, + -0.946433472008)); +#18302 = ADVANCED_FACE('',(#18303),#18321,.T.); +#18303 = FACE_BOUND('',#18304,.T.); +#18304 = EDGE_LOOP('',(#18305,#18306,#18307,#18315)); +#18305 = ORIENTED_EDGE('',*,*,#17319,.T.); +#18306 = ORIENTED_EDGE('',*,*,#18292,.F.); +#18307 = ORIENTED_EDGE('',*,*,#18308,.T.); +#18308 = EDGE_CURVE('',#18285,#18309,#18311,.T.); +#18309 = VERTEX_POINT('',#18310); +#18310 = CARTESIAN_POINT('',(34.642200655655,104.46021566603, + 120.55797361001)); +#18311 = LINE('',#18312,#18313); +#18312 = CARTESIAN_POINT('',(35.617850655655,104.46021566603, + 120.55797361001)); +#18313 = VECTOR('',#18314,1.); +#18314 = DIRECTION('',(-1.,0.,0.)); +#18315 = ORIENTED_EDGE('',*,*,#18316,.T.); +#18316 = EDGE_CURVE('',#18309,#17320,#18317,.T.); +#18317 = LINE('',#18318,#18319); +#18318 = CARTESIAN_POINT('',(34.642200655655,104.46021566603, + 120.55797361001)); +#18319 = VECTOR('',#18320,1.); +#18320 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18321 = PLANE('',#18322); +#18322 = AXIS2_PLACEMENT_3D('',#18323,#18324,#18325); +#18323 = CARTESIAN_POINT('',(35.617850655655,104.46021566603, + 120.55797361001)); +#18324 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#18325 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#18326 = ADVANCED_FACE('',(#18327),#18345,.T.); +#18327 = FACE_BOUND('',#18328,.T.); +#18328 = EDGE_LOOP('',(#18329,#18330,#18331,#18339)); +#18329 = ORIENTED_EDGE('',*,*,#17327,.T.); +#18330 = ORIENTED_EDGE('',*,*,#18316,.F.); +#18331 = ORIENTED_EDGE('',*,*,#18332,.T.); +#18332 = EDGE_CURVE('',#18309,#18333,#18335,.T.); +#18333 = VERTEX_POINT('',#18334); +#18334 = CARTESIAN_POINT('',(34.636200655655,104.47384331548, + 120.51603201765)); +#18335 = LINE('',#18336,#18337); +#18336 = CARTESIAN_POINT('',(34.642200655655,104.46021566603, + 120.55797361001)); +#18337 = VECTOR('',#18338,1.); +#18338 = DIRECTION('',(-0.134812400049,0.306196021606,-0.942374454846)); +#18339 = ORIENTED_EDGE('',*,*,#18340,.T.); +#18340 = EDGE_CURVE('',#18333,#17328,#18341,.T.); +#18341 = LINE('',#18342,#18343); +#18342 = CARTESIAN_POINT('',(34.636200655655,104.47384331548, + 120.51603201765)); +#18343 = VECTOR('',#18344,1.); +#18344 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18345 = PLANE('',#18346); +#18346 = AXIS2_PLACEMENT_3D('',#18347,#18348,#18349); +#18347 = CARTESIAN_POINT('',(34.642200655655,104.46021566603, + 120.55797361001)); +#18348 = DIRECTION('',(-0.990871140357,-4.165932266755E-02, + 0.128214211544)); +#18349 = DIRECTION('',(0.134812400049,-0.306196021606,0.942374454846)); +#18350 = ADVANCED_FACE('',(#18351),#18369,.T.); +#18351 = FACE_BOUND('',#18352,.T.); +#18352 = EDGE_LOOP('',(#18353,#18354,#18355,#18363)); +#18353 = ORIENTED_EDGE('',*,*,#17335,.T.); +#18354 = ORIENTED_EDGE('',*,*,#18340,.F.); +#18355 = ORIENTED_EDGE('',*,*,#18356,.T.); +#18356 = EDGE_CURVE('',#18333,#18357,#18359,.T.); +#18357 = VERTEX_POINT('',#18358); +#18358 = CARTESIAN_POINT('',(34.349570655655,104.69357541164, + 119.83976616272)); +#18359 = LINE('',#18360,#18361); +#18360 = CARTESIAN_POINT('',(34.636200655655,104.47384331548, + 120.51603201765)); +#18361 = VECTOR('',#18362,1.); +#18362 = DIRECTION('',(-0.373866273345,0.286607891443,-0.882088389118)); +#18363 = ORIENTED_EDGE('',*,*,#18364,.T.); +#18364 = EDGE_CURVE('',#18357,#17336,#18365,.T.); +#18365 = LINE('',#18366,#18367); +#18366 = CARTESIAN_POINT('',(34.349570655655,104.69357541164, + 119.83976616272)); +#18367 = VECTOR('',#18368,1.); +#18368 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18369 = PLANE('',#18370); +#18370 = AXIS2_PLACEMENT_3D('',#18371,#18372,#18373); +#18371 = CARTESIAN_POINT('',(34.636200655655,104.47384331548, + 120.51603201765)); +#18372 = DIRECTION('',(-0.927482619597,-0.115531032087,0.355567955488)); +#18373 = DIRECTION('',(0.373866273345,-0.286607891443,0.882088389118)); +#18374 = ADVANCED_FACE('',(#18375),#18393,.T.); +#18375 = FACE_BOUND('',#18376,.T.); +#18376 = EDGE_LOOP('',(#18377,#18378,#18379,#18387)); +#18377 = ORIENTED_EDGE('',*,*,#17343,.T.); +#18378 = ORIENTED_EDGE('',*,*,#18364,.F.); +#18379 = ORIENTED_EDGE('',*,*,#18380,.T.); +#18380 = EDGE_CURVE('',#18357,#18381,#18383,.T.); +#18381 = VERTEX_POINT('',#18382); +#18382 = CARTESIAN_POINT('',(33.732210655655,104.84687688844, + 119.36795273132)); +#18383 = LINE('',#18384,#18385); +#18384 = CARTESIAN_POINT('',(34.349570655655,104.69357541164, + 119.83976616272)); +#18385 = VECTOR('',#18386,1.); +#18386 = DIRECTION('',(-0.779508230196,0.193565768551,-0.59573417923)); +#18387 = ORIENTED_EDGE('',*,*,#18388,.T.); +#18388 = EDGE_CURVE('',#18381,#17344,#18389,.T.); +#18389 = LINE('',#18390,#18391); +#18390 = CARTESIAN_POINT('',(33.732210655655,104.84687688844, + 119.36795273132)); +#18391 = VECTOR('',#18392,1.); +#18392 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18393 = PLANE('',#18394); +#18394 = AXIS2_PLACEMENT_3D('',#18395,#18396,#18397); +#18395 = CARTESIAN_POINT('',(34.349570655655,104.69357541164, + 119.83976616272)); +#18396 = DIRECTION('',(-0.626391985148,-0.240881290386,0.741356381833)); +#18397 = DIRECTION('',(0.779508230196,-0.193565768551,0.59573417923)); +#18398 = ADVANCED_FACE('',(#18399),#18417,.T.); +#18399 = FACE_BOUND('',#18400,.T.); +#18400 = EDGE_LOOP('',(#18401,#18402,#18403,#18411)); +#18401 = ORIENTED_EDGE('',*,*,#17351,.T.); +#18402 = ORIENTED_EDGE('',*,*,#18388,.F.); +#18403 = ORIENTED_EDGE('',*,*,#18404,.T.); +#18404 = EDGE_CURVE('',#18381,#18405,#18407,.T.); +#18405 = VERTEX_POINT('',#18406); +#18406 = CARTESIAN_POINT('',(32.877820655655,104.90308769776, + 119.19495364889)); +#18407 = LINE('',#18408,#18409); +#18408 = CARTESIAN_POINT('',(33.732210655655,104.84687688844, + 119.36795273132)); +#18409 = VECTOR('',#18410,1.); +#18410 = DIRECTION('',(-0.978078682159,6.434835882182E-02,-0.19804388459 + )); +#18411 = ORIENTED_EDGE('',*,*,#18412,.T.); +#18412 = EDGE_CURVE('',#18405,#17352,#18413,.T.); +#18413 = LINE('',#18414,#18415); +#18414 = CARTESIAN_POINT('',(32.877820655655,104.90308769776, + 119.19495364889)); +#18415 = VECTOR('',#18416,1.); +#18416 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18417 = PLANE('',#18418); +#18418 = AXIS2_PLACEMENT_3D('',#18419,#18420,#18421); +#18419 = CARTESIAN_POINT('',(33.732210655655,104.84687688844, + 119.36795273132)); +#18420 = DIRECTION('',(-0.208235663388,-0.302242934623,0.930208104116)); +#18421 = DIRECTION('',(0.978078682159,-6.434835882182E-02,0.19804388459) + ); +#18422 = ADVANCED_FACE('',(#18423),#18441,.T.); +#18423 = FACE_BOUND('',#18424,.T.); +#18424 = EDGE_LOOP('',(#18425,#18426,#18427,#18435)); +#18425 = ORIENTED_EDGE('',*,*,#17359,.T.); +#18426 = ORIENTED_EDGE('',*,*,#18412,.F.); +#18427 = ORIENTED_EDGE('',*,*,#18428,.T.); +#18428 = EDGE_CURVE('',#18405,#18429,#18431,.T.); +#18429 = VERTEX_POINT('',#18430); +#18430 = CARTESIAN_POINT('',(31.924220655655,104.83154686437, + 119.41513369404)); +#18431 = LINE('',#18432,#18433); +#18432 = CARTESIAN_POINT('',(32.877820655655,104.90308769776, + 119.19495364889)); +#18433 = VECTOR('',#18434,1.); +#18434 = DIRECTION('',(-0.97177182963,-7.29041176086E-02,0.224375802556) + ); +#18435 = ORIENTED_EDGE('',*,*,#18436,.T.); +#18436 = EDGE_CURVE('',#18429,#17360,#18437,.T.); +#18437 = LINE('',#18438,#18439); +#18438 = CARTESIAN_POINT('',(31.924220655655,104.83154686437, + 119.41513369404)); +#18439 = VECTOR('',#18440,1.); +#18440 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18441 = PLANE('',#18442); +#18442 = AXIS2_PLACEMENT_3D('',#18443,#18444,#18445); +#18443 = CARTESIAN_POINT('',(32.877820655655,104.90308769776, + 119.19495364889)); +#18444 = DIRECTION('',(0.235922680421,-0.300294010011,0.924209930922)); +#18445 = DIRECTION('',(0.97177182963,7.29041176086E-02,-0.224375802556) + ); +#18446 = ADVANCED_FACE('',(#18447),#18465,.T.); +#18447 = FACE_BOUND('',#18448,.T.); +#18448 = EDGE_LOOP('',(#18449,#18450,#18451,#18459)); +#18449 = ORIENTED_EDGE('',*,*,#17367,.T.); +#18450 = ORIENTED_EDGE('',*,*,#18436,.F.); +#18451 = ORIENTED_EDGE('',*,*,#18452,.T.); +#18452 = EDGE_CURVE('',#18429,#18453,#18455,.T.); +#18453 = VERTEX_POINT('',#18454); +#18454 = CARTESIAN_POINT('',(31.279300655655,104.633958308, + 120.02324874112)); +#18455 = LINE('',#18456,#18457); +#18456 = CARTESIAN_POINT('',(31.924220655655,104.83154686437, + 119.41513369404)); +#18457 = VECTOR('',#18458,1.); +#18458 = DIRECTION('',(-0.71013385758,-0.21756857246,0.669607213668)); +#18459 = ORIENTED_EDGE('',*,*,#18460,.T.); +#18460 = EDGE_CURVE('',#18453,#17368,#18461,.T.); +#18461 = LINE('',#18462,#18463); +#18462 = CARTESIAN_POINT('',(31.279300655655,104.633958308, + 120.02324874112)); +#18463 = VECTOR('',#18464,1.); +#18464 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18465 = PLANE('',#18466); +#18466 = AXIS2_PLACEMENT_3D('',#18467,#18468,#18469); +#18467 = CARTESIAN_POINT('',(31.924220655655,104.83154686437, + 119.41513369404)); +#18468 = DIRECTION('',(0.704066690249,-0.219443430273,0.675377432694)); +#18469 = DIRECTION('',(0.71013385758,0.21756857246,-0.669607213668)); +#18470 = ADVANCED_FACE('',(#18471),#18489,.T.); +#18471 = FACE_BOUND('',#18472,.T.); +#18472 = EDGE_LOOP('',(#18473,#18474,#18475,#18483)); +#18473 = ORIENTED_EDGE('',*,*,#17375,.T.); +#18474 = ORIENTED_EDGE('',*,*,#18460,.F.); +#18475 = ORIENTED_EDGE('',*,*,#18476,.T.); +#18476 = EDGE_CURVE('',#18453,#18477,#18479,.T.); +#18477 = VERTEX_POINT('',#18478); +#18478 = CARTESIAN_POINT('',(31.046413547723,104.3392390339, + 120.9303013991)); +#18479 = LINE('',#18480,#18481); +#18480 = CARTESIAN_POINT('',(31.279300655655,104.633958308, + 120.02324874112)); +#18481 = VECTOR('',#18482,1.); +#18482 = DIRECTION('',(-0.237215405041,-0.300196745965,0.92391058297)); +#18483 = ORIENTED_EDGE('',*,*,#18484,.T.); +#18484 = EDGE_CURVE('',#18477,#17376,#18485,.T.); +#18485 = LINE('',#18486,#18487); +#18486 = CARTESIAN_POINT('',(31.046413547723,104.3392390339, + 120.9303013991)); +#18487 = VECTOR('',#18488,1.); +#18488 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18489 = PLANE('',#18490); +#18490 = AXIS2_PLACEMENT_3D('',#18491,#18492,#18493); +#18491 = CARTESIAN_POINT('',(31.279300655655,104.633958308, + 120.02324874112)); +#18492 = DIRECTION('',(0.971457076567,-7.330359148514E-02,0.22560525673) + ); +#18493 = DIRECTION('',(0.237215405041,0.300196745965,-0.92391058297)); +#18494 = ADVANCED_FACE('',(#18495),#18513,.T.); +#18495 = FACE_BOUND('',#18496,.T.); +#18496 = EDGE_LOOP('',(#18497,#18498,#18499,#18507)); +#18497 = ORIENTED_EDGE('',*,*,#17383,.T.); +#18498 = ORIENTED_EDGE('',*,*,#18484,.F.); +#18499 = ORIENTED_EDGE('',*,*,#18500,.T.); +#18500 = EDGE_CURVE('',#18477,#18501,#18503,.T.); +#18501 = VERTEX_POINT('',#18502); +#18502 = CARTESIAN_POINT('',(31.284810655655,104.05141337597, + 121.8161376881)); +#18503 = LINE('',#18504,#18505); +#18504 = CARTESIAN_POINT('',(31.046413547723,104.3392390339, + 120.9303013991)); +#18505 = VECTOR('',#18506,1.); +#18506 = DIRECTION('',(0.247956257664,-0.299366773446,0.921356190212)); +#18507 = ORIENTED_EDGE('',*,*,#18508,.T.); +#18508 = EDGE_CURVE('',#18501,#17384,#18509,.T.); +#18509 = LINE('',#18510,#18511); +#18510 = CARTESIAN_POINT('',(31.284810655655,104.05141337597, + 121.8161376881)); +#18511 = VECTOR('',#18512,1.); +#18512 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18513 = PLANE('',#18514); +#18514 = AXIS2_PLACEMENT_3D('',#18515,#18516,#18517); +#18515 = CARTESIAN_POINT('',(31.046413547723,104.3392390339, + 120.9303013991)); +#18516 = DIRECTION('',(0.968771229076,7.662269747968E-02,-0.235820414607 + )); +#18517 = DIRECTION('',(-0.247956257664,0.299366773446,-0.921356190212)); +#18518 = ADVANCED_FACE('',(#18519),#18537,.T.); +#18519 = FACE_BOUND('',#18520,.T.); +#18520 = EDGE_LOOP('',(#18521,#18522,#18523,#18531)); +#18521 = ORIENTED_EDGE('',*,*,#17391,.T.); +#18522 = ORIENTED_EDGE('',*,*,#18508,.F.); +#18523 = ORIENTED_EDGE('',*,*,#18524,.T.); +#18524 = EDGE_CURVE('',#18501,#18525,#18527,.T.); +#18525 = VERTEX_POINT('',#18526); +#18526 = CARTESIAN_POINT('',(31.924220655655,103.85382481959, + 122.42425273518)); +#18527 = LINE('',#18528,#18529); +#18528 = CARTESIAN_POINT('',(31.284810655655,104.05141337597, + 121.8161376881)); +#18529 = VECTOR('',#18530,1.); +#18530 = DIRECTION('',(0.707106781187,-0.218508012224,0.672498511964)); +#18531 = ORIENTED_EDGE('',*,*,#18532,.T.); +#18532 = EDGE_CURVE('',#18525,#17392,#18533,.T.); +#18533 = LINE('',#18534,#18535); +#18534 = CARTESIAN_POINT('',(31.924220655655,103.85382481959, + 122.42425273518)); +#18535 = VECTOR('',#18536,1.); +#18536 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18537 = PLANE('',#18538); +#18538 = AXIS2_PLACEMENT_3D('',#18539,#18540,#18541); +#18539 = CARTESIAN_POINT('',(31.284810655655,104.05141337597, + 121.8161376881)); +#18540 = DIRECTION('',(0.707106781187,0.218508012224,-0.672498511964)); +#18541 = DIRECTION('',(-0.707106781187,0.218508012224,-0.672498511964)); +#18542 = ADVANCED_FACE('',(#18543),#18561,.T.); +#18543 = FACE_BOUND('',#18544,.T.); +#18544 = EDGE_LOOP('',(#18545,#18546,#18547,#18555)); +#18545 = ORIENTED_EDGE('',*,*,#17399,.T.); +#18546 = ORIENTED_EDGE('',*,*,#18532,.F.); +#18547 = ORIENTED_EDGE('',*,*,#18548,.T.); +#18548 = EDGE_CURVE('',#18525,#18549,#18551,.T.); +#18549 = VERTEX_POINT('',#18550); +#18550 = CARTESIAN_POINT('',(32.861290655655,103.78228398621, + 122.64443278033)); +#18551 = LINE('',#18552,#18553); +#18552 = CARTESIAN_POINT('',(31.924220655655,103.85382481959, + 122.42425273518)); +#18553 = VECTOR('',#18554,1.); +#18554 = DIRECTION('',(0.970810718629,-7.411677662243E-02,0.228107983239 + )); +#18555 = ORIENTED_EDGE('',*,*,#18556,.T.); +#18556 = EDGE_CURVE('',#18549,#17400,#18557,.T.); +#18557 = LINE('',#18558,#18559); +#18558 = CARTESIAN_POINT('',(32.861290655655,103.78228398621, + 122.64443278033)); +#18559 = VECTOR('',#18560,1.); +#18560 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18561 = PLANE('',#18562); +#18562 = AXIS2_PLACEMENT_3D('',#18563,#18564,#18565); +#18563 = CARTESIAN_POINT('',(31.924220655655,103.85382481959, + 122.42425273518)); +#18564 = DIRECTION('',(0.239846927423,0.299997010378,-0.923295860042)); +#18565 = DIRECTION('',(-0.970810718629,7.411677662243E-02, + -0.228107983239)); +#18566 = ADVANCED_FACE('',(#18567),#18585,.T.); +#18567 = FACE_BOUND('',#18568,.T.); +#18568 = EDGE_LOOP('',(#18569,#18570,#18571,#18579)); +#18569 = ORIENTED_EDGE('',*,*,#17407,.T.); +#18570 = ORIENTED_EDGE('',*,*,#18556,.F.); +#18571 = ORIENTED_EDGE('',*,*,#18572,.T.); +#18572 = EDGE_CURVE('',#18549,#18573,#18575,.T.); +#18573 = VERTEX_POINT('',#18574); +#18574 = CARTESIAN_POINT('',(33.610940655655,103.81975785908, + 122.52910005871)); +#18575 = LINE('',#18576,#18577); +#18576 = CARTESIAN_POINT('',(32.861290655655,103.78228398621, + 122.64443278033)); +#18577 = VECTOR('',#18578,1.); +#18578 = DIRECTION('',(0.987167172834,4.934699811916E-02,-0.15187444372) + ); +#18579 = ORIENTED_EDGE('',*,*,#18580,.T.); +#18580 = EDGE_CURVE('',#18573,#17408,#18581,.T.); +#18581 = LINE('',#18582,#18583); +#18582 = CARTESIAN_POINT('',(33.610940655655,103.81975785908, + 122.52910005871)); +#18583 = VECTOR('',#18584,1.); +#18584 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18585 = PLANE('',#18586); +#18586 = AXIS2_PLACEMENT_3D('',#18587,#18588,#18589); +#18587 = CARTESIAN_POINT('',(32.861290655655,103.78228398621, + 122.64443278033)); +#18588 = DIRECTION('',(-0.159690240399,0.305051432695,-0.938851772397)); +#18589 = DIRECTION('',(-0.987167172834,-4.934699811916E-02,0.15187444372 + )); +#18590 = ADVANCED_FACE('',(#18591),#18609,.T.); +#18591 = FACE_BOUND('',#18592,.T.); +#18592 = EDGE_LOOP('',(#18593,#18594,#18595,#18603)); +#18593 = ORIENTED_EDGE('',*,*,#17415,.T.); +#18594 = ORIENTED_EDGE('',*,*,#18580,.F.); +#18595 = ORIENTED_EDGE('',*,*,#18596,.T.); +#18596 = EDGE_CURVE('',#18573,#18597,#18599,.T.); +#18597 = VERTEX_POINT('',#18598); +#18598 = CARTESIAN_POINT('',(34.217280655655,103.930475558, + 122.18834601949)); +#18599 = LINE('',#18600,#18601); +#18600 = CARTESIAN_POINT('',(33.610940655655,103.81975785908, + 122.52910005871)); +#18601 = VECTOR('',#18602,1.); +#18602 = DIRECTION('',(0.860927658895,0.157205411691,-0.483828507516)); +#18603 = ORIENTED_EDGE('',*,*,#18604,.T.); +#18604 = EDGE_CURVE('',#18597,#17416,#18605,.T.); +#18605 = LINE('',#18606,#18607); +#18606 = CARTESIAN_POINT('',(34.217280655655,103.930475558, + 122.18834601949)); +#18607 = VECTOR('',#18608,1.); +#18608 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18609 = PLANE('',#18610); +#18610 = AXIS2_PLACEMENT_3D('',#18611,#18612,#18613); +#18611 = CARTESIAN_POINT('',(33.610940655655,103.81975785908, + 122.52910005871)); +#18612 = DIRECTION('',(-0.508727398663,0.266041277526,-0.81879086005)); +#18613 = DIRECTION('',(-0.860927658895,-0.157205411691,0.483828507516)); +#18614 = ADVANCED_FACE('',(#18615),#18633,.T.); +#18615 = FACE_BOUND('',#18616,.T.); +#18616 = EDGE_LOOP('',(#18617,#18618,#18619,#18627)); +#18617 = ORIENTED_EDGE('',*,*,#17423,.T.); +#18618 = ORIENTED_EDGE('',*,*,#18604,.F.); +#18619 = ORIENTED_EDGE('',*,*,#18620,.T.); +#18620 = EDGE_CURVE('',#18597,#18621,#18623,.T.); +#18621 = VERTEX_POINT('',#18622); +#18622 = CARTESIAN_POINT('',(34.421230655655,103.99690617735, + 121.98389359595)); +#18623 = LINE('',#18624,#18625); +#18624 = CARTESIAN_POINT('',(34.217280655655,103.930475558, + 122.18834601949)); +#18625 = VECTOR('',#18626,1.); +#18626 = DIRECTION('',(0.688260978403,0.224180451429,-0.689956484719)); +#18627 = ORIENTED_EDGE('',*,*,#18628,.T.); +#18628 = EDGE_CURVE('',#18621,#17424,#18629,.T.); +#18629 = LINE('',#18630,#18631); +#18630 = CARTESIAN_POINT('',(34.421230655655,103.99690617735, + 121.98389359595)); +#18631 = VECTOR('',#18632,1.); +#18632 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18633 = PLANE('',#18634); +#18634 = AXIS2_PLACEMENT_3D('',#18635,#18636,#18637); +#18635 = CARTESIAN_POINT('',(34.217280655655,103.930475558, + 122.18834601949)); +#18636 = DIRECTION('',(-0.72546318005,0.212684338892,-0.654575088422)); +#18637 = DIRECTION('',(-0.688260978403,-0.224180451429,0.689956484719)); +#18638 = ADVANCED_FACE('',(#18639),#18657,.T.); +#18639 = FACE_BOUND('',#18640,.T.); +#18640 = EDGE_LOOP('',(#18641,#18642,#18643,#18651)); +#18641 = ORIENTED_EDGE('',*,*,#17431,.T.); +#18642 = ORIENTED_EDGE('',*,*,#18628,.F.); +#18643 = ORIENTED_EDGE('',*,*,#18644,.T.); +#18644 = EDGE_CURVE('',#18621,#18645,#18647,.T.); +#18645 = VERTEX_POINT('',#18646); +#18646 = CARTESIAN_POINT('',(34.592110655655,104.07526052644, + 121.74274370568)); +#18647 = LINE('',#18648,#18649); +#18648 = CARTESIAN_POINT('',(34.421230655655,103.99690617735, + 121.98389359595)); +#18649 = VECTOR('',#18650,1.); +#18650 = DIRECTION('',(0.55885932915,0.256256197159,-0.788675479294)); +#18651 = ORIENTED_EDGE('',*,*,#18652,.T.); +#18652 = EDGE_CURVE('',#18645,#17432,#18653,.T.); +#18653 = LINE('',#18654,#18655); +#18654 = CARTESIAN_POINT('',(34.592110655655,104.07526052644, + 121.74274370568)); +#18655 = VECTOR('',#18656,1.); +#18656 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18657 = PLANE('',#18658); +#18658 = AXIS2_PLACEMENT_3D('',#18659,#18660,#18661); +#18659 = CARTESIAN_POINT('',(34.421230655655,103.99690617735, + 121.98389359595)); +#18660 = DIRECTION('',(-0.829262473661,0.172697030172,-0.53150680668)); +#18661 = DIRECTION('',(-0.55885932915,-0.256256197159,0.788675479294)); +#18662 = ADVANCED_FACE('',(#18663),#18681,.T.); +#18663 = FACE_BOUND('',#18664,.T.); +#18664 = EDGE_LOOP('',(#18665,#18666,#18667,#18675)); +#18665 = ORIENTED_EDGE('',*,*,#17439,.T.); +#18666 = ORIENTED_EDGE('',*,*,#18652,.F.); +#18667 = ORIENTED_EDGE('',*,*,#18668,.T.); +#18668 = EDGE_CURVE('',#18645,#18669,#18671,.T.); +#18669 = VERTEX_POINT('',#18670); +#18670 = CARTESIAN_POINT('',(35.468540655655,104.07526052644, + 121.74274370568)); +#18671 = LINE('',#18672,#18673); +#18672 = CARTESIAN_POINT('',(34.592110655655,104.07526052644, + 121.74274370568)); +#18673 = VECTOR('',#18674,1.); +#18674 = DIRECTION('',(1.,0.,0.)); +#18675 = ORIENTED_EDGE('',*,*,#18676,.T.); +#18676 = EDGE_CURVE('',#18669,#17440,#18677,.T.); +#18677 = LINE('',#18678,#18679); +#18678 = CARTESIAN_POINT('',(35.468540655655,104.07526052644, + 121.74274370568)); +#18679 = VECTOR('',#18680,1.); +#18680 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18681 = PLANE('',#18682); +#18682 = AXIS2_PLACEMENT_3D('',#18683,#18684,#18685); +#18683 = CARTESIAN_POINT('',(34.592110655655,104.07526052644, + 121.74274370568)); +#18684 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#18685 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18686 = ADVANCED_FACE('',(#18687),#18705,.T.); +#18687 = FACE_BOUND('',#18688,.T.); +#18688 = EDGE_LOOP('',(#18689,#18690,#18691,#18699)); +#18689 = ORIENTED_EDGE('',*,*,#17447,.T.); +#18690 = ORIENTED_EDGE('',*,*,#18676,.F.); +#18691 = ORIENTED_EDGE('',*,*,#18692,.T.); +#18692 = EDGE_CURVE('',#18669,#18693,#18695,.T.); +#18693 = VERTEX_POINT('',#18694); +#18694 = CARTESIAN_POINT('',(35.060640655655,102.67340276834, + 126.05721824925)); +#18695 = LINE('',#18696,#18697); +#18696 = CARTESIAN_POINT('',(35.468540655655,104.07526052644, + 121.74274370568)); +#18697 = VECTOR('',#18698,1.); +#18698 = DIRECTION('',(-8.955371507203E-02,-0.307775362198, + 0.947235165384)); +#18699 = ORIENTED_EDGE('',*,*,#18700,.T.); +#18700 = EDGE_CURVE('',#18693,#17448,#18701,.T.); +#18701 = LINE('',#18702,#18703); +#18702 = CARTESIAN_POINT('',(35.060640655655,102.67340276834, + 126.05721824925)); +#18703 = VECTOR('',#18704,1.); +#18704 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18705 = PLANE('',#18706); +#18706 = AXIS2_PLACEMENT_3D('',#18707,#18708,#18709); +#18707 = CARTESIAN_POINT('',(35.468540655655,104.07526052644, + 121.74274370568)); +#18708 = DIRECTION('',(0.995981993872,-2.767361986667E-02, + 8.51706442777E-02)); +#18709 = DIRECTION('',(8.955371507203E-02,0.307775362198,-0.947235165384 + )); +#18710 = ADVANCED_FACE('',(#18711),#18729,.T.); +#18711 = FACE_BOUND('',#18712,.T.); +#18712 = EDGE_LOOP('',(#18713,#18714,#18715,#18723)); +#18713 = ORIENTED_EDGE('',*,*,#17455,.T.); +#18714 = ORIENTED_EDGE('',*,*,#18700,.F.); +#18715 = ORIENTED_EDGE('',*,*,#18716,.T.); +#18716 = EDGE_CURVE('',#18693,#18717,#18719,.T.); +#18717 = VERTEX_POINT('',#18718); +#18718 = CARTESIAN_POINT('',(30.507600655655,102.67340276834, + 126.05721824925)); +#18719 = LINE('',#18720,#18721); +#18720 = CARTESIAN_POINT('',(35.060640655655,102.67340276834, + 126.05721824925)); +#18721 = VECTOR('',#18722,1.); +#18722 = DIRECTION('',(-1.,0.,0.)); +#18723 = ORIENTED_EDGE('',*,*,#18724,.T.); +#18724 = EDGE_CURVE('',#18717,#17456,#18725,.T.); +#18725 = LINE('',#18726,#18727); +#18726 = CARTESIAN_POINT('',(30.507600655655,102.67340276834, + 126.05721824925)); +#18727 = VECTOR('',#18728,1.); +#18728 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18729 = PLANE('',#18730); +#18730 = AXIS2_PLACEMENT_3D('',#18731,#18732,#18733); +#18731 = CARTESIAN_POINT('',(35.060640655655,102.67340276834, + 126.05721824925)); +#18732 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#18733 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#18734 = ADVANCED_FACE('',(#18735),#18753,.T.); +#18735 = FACE_BOUND('',#18736,.T.); +#18736 = EDGE_LOOP('',(#18737,#18738,#18739,#18747)); +#18737 = ORIENTED_EDGE('',*,*,#17463,.T.); +#18738 = ORIENTED_EDGE('',*,*,#18724,.F.); +#18739 = ORIENTED_EDGE('',*,*,#18740,.T.); +#18740 = EDGE_CURVE('',#18717,#18741,#18743,.T.); +#18741 = VERTEX_POINT('',#18742); +#18742 = CARTESIAN_POINT('',(30.507600655655,102.94593907046, + 125.21843775893)); +#18743 = LINE('',#18744,#18745); +#18744 = CARTESIAN_POINT('',(30.507600655655,102.67340276834, + 126.05721824925)); +#18745 = VECTOR('',#18746,1.); +#18746 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#18747 = ORIENTED_EDGE('',*,*,#18748,.T.); +#18748 = EDGE_CURVE('',#18741,#17464,#18749,.T.); +#18749 = LINE('',#18750,#18751); +#18750 = CARTESIAN_POINT('',(30.507600655655,102.94593907046, + 125.21843775893)); +#18751 = VECTOR('',#18752,1.); +#18752 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18753 = PLANE('',#18754); +#18754 = AXIS2_PLACEMENT_3D('',#18755,#18756,#18757); +#18755 = CARTESIAN_POINT('',(30.507600655655,102.67340276834, + 126.05721824925)); +#18756 = DIRECTION('',(-1.,0.,0.)); +#18757 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#18758 = ADVANCED_FACE('',(#18759),#18777,.T.); +#18759 = FACE_BOUND('',#18760,.T.); +#18760 = EDGE_LOOP('',(#18761,#18762,#18763,#18771)); +#18761 = ORIENTED_EDGE('',*,*,#17471,.T.); +#18762 = ORIENTED_EDGE('',*,*,#18748,.F.); +#18763 = ORIENTED_EDGE('',*,*,#18764,.T.); +#18764 = EDGE_CURVE('',#18741,#18765,#18767,.T.); +#18765 = VERTEX_POINT('',#18766); +#18766 = CARTESIAN_POINT('',(34.244840655655,102.94593907046, + 125.21843775893)); +#18767 = LINE('',#18768,#18769); +#18768 = CARTESIAN_POINT('',(30.507600655655,102.94593907046, + 125.21843775893)); +#18769 = VECTOR('',#18770,1.); +#18770 = DIRECTION('',(1.,0.,0.)); +#18771 = ORIENTED_EDGE('',*,*,#18772,.T.); +#18772 = EDGE_CURVE('',#18765,#17472,#18773,.T.); +#18773 = LINE('',#18774,#18775); +#18774 = CARTESIAN_POINT('',(34.244840655655,102.94593907046, + 125.21843775893)); +#18775 = VECTOR('',#18776,1.); +#18776 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18777 = PLANE('',#18778); +#18778 = AXIS2_PLACEMENT_3D('',#18779,#18780,#18781); +#18779 = CARTESIAN_POINT('',(30.507600655655,102.94593907046, + 125.21843775893)); +#18780 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#18781 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18782 = ADVANCED_FACE('',(#18783),#18801,.T.); +#18783 = FACE_BOUND('',#18784,.T.); +#18784 = EDGE_LOOP('',(#18785,#18786,#18787,#18795)); +#18785 = ORIENTED_EDGE('',*,*,#17479,.T.); +#18786 = ORIENTED_EDGE('',*,*,#18772,.F.); +#18787 = ORIENTED_EDGE('',*,*,#18788,.T.); +#18788 = EDGE_CURVE('',#18765,#18789,#18791,.T.); +#18789 = VERTEX_POINT('',#18790); +#18790 = CARTESIAN_POINT('',(34.497129729909,103.77206386715, + 122.67588707249)); +#18791 = LINE('',#18792,#18793); +#18792 = CARTESIAN_POINT('',(34.244840655655,102.94593907046, + 125.21843775893)); +#18793 = VECTOR('',#18794,1.); +#18794 = DIRECTION('',(9.395282682255E-02,0.3076501041,-0.9468496606)); +#18795 = ORIENTED_EDGE('',*,*,#18796,.T.); +#18796 = EDGE_CURVE('',#18789,#17480,#18797,.T.); +#18797 = LINE('',#18798,#18799); +#18798 = CARTESIAN_POINT('',(34.497129729909,103.77206386715, + 122.67588707249)); +#18799 = VECTOR('',#18800,1.); +#18800 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18801 = PLANE('',#18802); +#18802 = AXIS2_PLACEMENT_3D('',#18803,#18804,#18805); +#18803 = CARTESIAN_POINT('',(34.244840655655,102.94593907046, + 125.21843775893)); +#18804 = DIRECTION('',(-0.995576650154,2.903302015773E-02, + -8.935444817393E-02)); +#18805 = DIRECTION('',(-9.395282682255E-02,-0.3076501041,0.9468496606)); +#18806 = ADVANCED_FACE('',(#18807),#18825,.T.); +#18807 = FACE_BOUND('',#18808,.T.); +#18808 = EDGE_LOOP('',(#18809,#18810,#18811,#18819)); +#18809 = ORIENTED_EDGE('',*,*,#17487,.T.); +#18810 = ORIENTED_EDGE('',*,*,#18796,.F.); +#18811 = ORIENTED_EDGE('',*,*,#18812,.T.); +#18812 = EDGE_CURVE('',#18789,#18813,#18815,.T.); +#18813 = VERTEX_POINT('',#18814); +#18814 = CARTESIAN_POINT('',(34.029820655655,103.63238911275, + 123.10576176469)); +#18815 = LINE('',#18816,#18817); +#18816 = CARTESIAN_POINT('',(34.497129729909,103.77206386715, + 122.67588707249)); +#18817 = VECTOR('',#18818,1.); +#18818 = DIRECTION('',(-0.718784740079,-0.214838717185,0.661205583028)); +#18819 = ORIENTED_EDGE('',*,*,#18820,.T.); +#18820 = EDGE_CURVE('',#18813,#17488,#18821,.T.); +#18821 = LINE('',#18822,#18823); +#18822 = CARTESIAN_POINT('',(34.029820655655,103.63238911275, + 123.10576176469)); +#18823 = VECTOR('',#18824,1.); +#18824 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18825 = PLANE('',#18826); +#18826 = AXIS2_PLACEMENT_3D('',#18827,#18828,#18829); +#18827 = CARTESIAN_POINT('',(34.497129729909,103.77206386715, + 122.67588707249)); +#18828 = DIRECTION('',(0.69523269301,-0.222116699982,0.683604910865)); +#18829 = DIRECTION('',(0.718784740079,0.214838717185,-0.661205583028)); +#18830 = ADVANCED_FACE('',(#18831),#18849,.T.); +#18831 = FACE_BOUND('',#18832,.T.); +#18832 = EDGE_LOOP('',(#18833,#18834,#18835,#18843)); +#18833 = ORIENTED_EDGE('',*,*,#17495,.T.); +#18834 = ORIENTED_EDGE('',*,*,#18820,.F.); +#18835 = ORIENTED_EDGE('',*,*,#18836,.T.); +#18836 = EDGE_CURVE('',#18813,#18837,#18839,.T.); +#18837 = VERTEX_POINT('',#18838); +#18838 = CARTESIAN_POINT('',(33.412450655655,103.54722155696, + 123.36788054903)); +#18839 = LINE('',#18840,#18841); +#18840 = CARTESIAN_POINT('',(34.029820655655,103.63238911275, + 123.10576176469)); +#18841 = VECTOR('',#18842,1.); +#18842 = DIRECTION('',(-0.913139868429,-0.125969662738,0.387694757192)); +#18843 = ORIENTED_EDGE('',*,*,#18844,.T.); +#18844 = EDGE_CURVE('',#18837,#17496,#18845,.T.); +#18845 = LINE('',#18846,#18847); +#18846 = CARTESIAN_POINT('',(33.412450655655,103.54722155696, + 123.36788054903)); +#18847 = VECTOR('',#18848,1.); +#18848 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18849 = PLANE('',#18850); +#18850 = AXIS2_PLACEMENT_3D('',#18851,#18852,#18853); +#18851 = CARTESIAN_POINT('',(34.029820655655,103.63238911275, + 123.10576176469)); +#18852 = DIRECTION('',(0.407646391723,-0.282175737586,0.868447622159)); +#18853 = DIRECTION('',(0.913139868429,0.125969662738,-0.387694757192)); +#18854 = ADVANCED_FACE('',(#18855),#18873,.T.); +#18855 = FACE_BOUND('',#18856,.T.); +#18856 = EDGE_LOOP('',(#18857,#18858,#18859,#18867)); +#18857 = ORIENTED_EDGE('',*,*,#17503,.T.); +#18858 = ORIENTED_EDGE('',*,*,#18844,.F.); +#18859 = ORIENTED_EDGE('',*,*,#18860,.T.); +#18860 = EDGE_CURVE('',#18837,#18861,#18863,.T.); +#18861 = VERTEX_POINT('',#18862); +#18862 = CARTESIAN_POINT('',(32.684850655655,103.51826357442, + 123.45700405517)); +#18863 = LINE('',#18864,#18865); +#18864 = CARTESIAN_POINT('',(33.412450655655,103.54722155696, + 123.36788054903)); +#18865 = VECTOR('',#18866,1.); +#18866 = DIRECTION('',(-0.991807920014,-3.947327712155E-02, + 0.121486255155)); +#18867 = ORIENTED_EDGE('',*,*,#18868,.T.); +#18868 = EDGE_CURVE('',#18861,#17504,#18869,.T.); +#18869 = LINE('',#18870,#18871); +#18870 = CARTESIAN_POINT('',(32.684850655655,103.51826357442, + 123.45700405517)); +#18871 = VECTOR('',#18872,1.); +#18872 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18873 = PLANE('',#18874); +#18874 = AXIS2_PLACEMENT_3D('',#18875,#18876,#18877); +#18875 = CARTESIAN_POINT('',(33.412450655655,103.54722155696, + 123.36788054903)); +#18876 = DIRECTION('',(0.12773820806,-0.30648550244,0.943265385242)); +#18877 = DIRECTION('',(0.991807920014,3.947327712155E-02,-0.121486255155 + )); +#18878 = ADVANCED_FACE('',(#18879),#18897,.T.); +#18879 = FACE_BOUND('',#18880,.T.); +#18880 = EDGE_LOOP('',(#18881,#18882,#18883,#18891)); +#18881 = ORIENTED_EDGE('',*,*,#17511,.T.); +#18882 = ORIENTED_EDGE('',*,*,#18868,.F.); +#18883 = ORIENTED_EDGE('',*,*,#18884,.T.); +#18884 = EDGE_CURVE('',#18861,#18885,#18887,.T.); +#18885 = VERTEX_POINT('',#18886); +#18886 = CARTESIAN_POINT('',(31.962758655655,103.54466536838, + 123.37574768853)); +#18887 = LINE('',#18888,#18889); +#18888 = CARTESIAN_POINT('',(32.684850655655,103.51826357442, + 123.45700405517)); +#18889 = VECTOR('',#18890,1.); +#18890 = DIRECTION('',(-0.993072825812,3.630964494793E-02, + -0.111749596497)); +#18891 = ORIENTED_EDGE('',*,*,#18892,.T.); +#18892 = EDGE_CURVE('',#18885,#17512,#18893,.T.); +#18893 = LINE('',#18894,#18895); +#18894 = CARTESIAN_POINT('',(31.962758655655,103.54466536838, + 123.37574768853)); +#18895 = VECTOR('',#18896,1.); +#18896 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18897 = PLANE('',#18898); +#18898 = AXIS2_PLACEMENT_3D('',#18899,#18900,#18901); +#18899 = CARTESIAN_POINT('',(32.684850655655,103.51826357442, + 123.45700405517)); +#18900 = DIRECTION('',(-0.11750047929,-0.306876379828,0.944468382144)); +#18901 = DIRECTION('',(0.993072825812,-3.630964494793E-02,0.111749596497 + )); +#18902 = ADVANCED_FACE('',(#18903),#18921,.T.); +#18903 = FACE_BOUND('',#18904,.T.); +#18904 = EDGE_LOOP('',(#18905,#18906,#18907,#18915)); +#18905 = ORIENTED_EDGE('',*,*,#17519,.T.); +#18906 = ORIENTED_EDGE('',*,*,#18892,.F.); +#18907 = ORIENTED_EDGE('',*,*,#18908,.T.); +#18908 = EDGE_CURVE('',#18885,#18909,#18911,.T.); +#18909 = VERTEX_POINT('',#18910); +#18910 = CARTESIAN_POINT('',(31.328860655655,103.62387136831, + 123.1319766865)); +#18911 = LINE('',#18912,#18913); +#18912 = CARTESIAN_POINT('',(31.962758655655,103.54466536838, + 123.37574768853)); +#18913 = VECTOR('',#18914,1.); +#18914 = DIRECTION('',(-0.927079896372,0.115839283619,-0.356516656152)); +#18915 = ORIENTED_EDGE('',*,*,#18916,.T.); +#18916 = EDGE_CURVE('',#18909,#17520,#18917,.T.); +#18917 = LINE('',#18918,#18919); +#18918 = CARTESIAN_POINT('',(31.328860655655,103.62387136831, + 123.1319766865)); +#18919 = VECTOR('',#18920,1.); +#18920 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18921 = PLANE('',#18922); +#18922 = AXIS2_PLACEMENT_3D('',#18923,#18924,#18925); +#18923 = CARTESIAN_POINT('',(31.962758655655,103.54466536838, + 123.37574768853)); +#18924 = DIRECTION('',(-0.374863796255,-0.286483443122,0.881705376571)); +#18925 = DIRECTION('',(0.927079896372,-0.115839283619,0.356516656152)); +#18926 = ADVANCED_FACE('',(#18927),#18945,.T.); +#18927 = FACE_BOUND('',#18928,.T.); +#18928 = EDGE_LOOP('',(#18929,#18930,#18931,#18939)); +#18929 = ORIENTED_EDGE('',*,*,#17527,.T.); +#18930 = ORIENTED_EDGE('',*,*,#18916,.F.); +#18931 = ORIENTED_EDGE('',*,*,#18932,.T.); +#18932 = EDGE_CURVE('',#18909,#18933,#18935,.T.); +#18933 = VERTEX_POINT('',#18934); +#18934 = CARTESIAN_POINT('',(30.798315655655,103.74906744047, + 122.74666279632)); +#18935 = LINE('',#18936,#18937); +#18936 = CARTESIAN_POINT('',(31.328860655655,103.62387136831, + 123.1319766865)); +#18937 = VECTOR('',#18938,1.); +#18938 = DIRECTION('',(-0.794768142372,0.187546484646,-0.57720872825)); +#18939 = ORIENTED_EDGE('',*,*,#18940,.T.); +#18940 = EDGE_CURVE('',#18933,#17528,#18941,.T.); +#18941 = LINE('',#18942,#18943); +#18942 = CARTESIAN_POINT('',(30.798315655655,103.74906744047, + 122.74666279632)); +#18943 = VECTOR('',#18944,1.); +#18944 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18945 = PLANE('',#18946); +#18946 = AXIS2_PLACEMENT_3D('',#18947,#18948,#18949); +#18947 = CARTESIAN_POINT('',(31.328860655655,103.62387136831, + 123.1319766865)); +#18948 = DIRECTION('',(-0.606913173256,-0.245596862581,0.755869420746)); +#18949 = DIRECTION('',(0.794768142372,-0.187546484646,0.57720872825)); +#18950 = ADVANCED_FACE('',(#18951),#18969,.T.); +#18951 = FACE_BOUND('',#18952,.T.); +#18952 = EDGE_LOOP('',(#18953,#18954,#18955,#18963)); +#18953 = ORIENTED_EDGE('',*,*,#17535,.T.); +#18954 = ORIENTED_EDGE('',*,*,#18940,.F.); +#18955 = ORIENTED_EDGE('',*,*,#18956,.T.); +#18956 = EDGE_CURVE('',#18933,#18957,#18959,.T.); +#18957 = VERTEX_POINT('',#18958); +#18958 = CARTESIAN_POINT('',(30.397300655655,103.91344099618, + 122.24077300995)); +#18959 = LINE('',#18960,#18961); +#18960 = CARTESIAN_POINT('',(30.798315655655,103.74906744047, + 122.74666279632)); +#18961 = VECTOR('',#18962,1.); +#18962 = DIRECTION('',(-0.601988804445,0.246751468867,-0.759422933506)); +#18963 = ORIENTED_EDGE('',*,*,#18964,.T.); +#18964 = EDGE_CURVE('',#18957,#17536,#18965,.T.); +#18965 = LINE('',#18966,#18967); +#18966 = CARTESIAN_POINT('',(30.397300655655,103.91344099618, + 122.24077300995)); +#18967 = VECTOR('',#18968,1.); +#18968 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18969 = PLANE('',#18970); +#18970 = AXIS2_PLACEMENT_3D('',#18971,#18972,#18973); +#18971 = CARTESIAN_POINT('',(30.798315655655,103.74906744047, + 122.74666279632)); +#18972 = DIRECTION('',(-0.798504526802,-0.186024770997,0.572525375204)); +#18973 = DIRECTION('',(0.601988804445,-0.246751468867,0.759422933506)); +#18974 = ADVANCED_FACE('',(#18975),#18993,.T.); +#18975 = FACE_BOUND('',#18976,.T.); +#18976 = EDGE_LOOP('',(#18977,#18978,#18979,#18987)); +#18977 = ORIENTED_EDGE('',*,*,#17543,.T.); +#18978 = ORIENTED_EDGE('',*,*,#18964,.F.); +#18979 = ORIENTED_EDGE('',*,*,#18980,.T.); +#18980 = EDGE_CURVE('',#18957,#18981,#18983,.T.); +#18981 = VERTEX_POINT('',#18982); +#18982 = CARTESIAN_POINT('',(30.140988655655,104.10932625088, + 121.63790018638)); +#18983 = LINE('',#18984,#18985); +#18984 = CARTESIAN_POINT('',(30.397300655655,103.91344099618, + 122.24077300995)); +#18985 = VECTOR('',#18986,1.); +#18986 = DIRECTION('',(-0.374858768275,0.286484071367,-0.881707310109)); +#18987 = ORIENTED_EDGE('',*,*,#18988,.T.); +#18988 = EDGE_CURVE('',#18981,#17544,#18989,.T.); +#18989 = LINE('',#18990,#18991); +#18990 = CARTESIAN_POINT('',(30.140988655655,104.10932625088, + 121.63790018638)); +#18991 = VECTOR('',#18992,1.); +#18992 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#18993 = PLANE('',#18994); +#18994 = AXIS2_PLACEMENT_3D('',#18995,#18996,#18997); +#18995 = CARTESIAN_POINT('',(30.397300655655,103.91344099618, + 122.24077300995)); +#18996 = DIRECTION('',(-0.927081929415,-0.115837729888,0.356511874259)); +#18997 = DIRECTION('',(0.374858768275,-0.286484071367,0.881707310109)); +#18998 = ADVANCED_FACE('',(#18999),#19017,.T.); +#18999 = FACE_BOUND('',#19000,.T.); +#19000 = EDGE_LOOP('',(#19001,#19002,#19003,#19011)); +#19001 = ORIENTED_EDGE('',*,*,#17551,.T.); +#19002 = ORIENTED_EDGE('',*,*,#18988,.F.); +#19003 = ORIENTED_EDGE('',*,*,#19004,.T.); +#19004 = EDGE_CURVE('',#18981,#19005,#19007,.T.); +#19005 = VERTEX_POINT('',#19006); +#19006 = CARTESIAN_POINT('',(30.054889344345,104.33419209926, + 120.94583426675)); +#19007 = LINE('',#19008,#19009); +#19008 = CARTESIAN_POINT('',(30.140988655655,104.10932625088, + 121.63790018638)); +#19009 = VECTOR('',#19010,1.); +#19010 = DIRECTION('',(-0.11750047929,0.306876379828,-0.944468382144)); +#19011 = ORIENTED_EDGE('',*,*,#19012,.T.); +#19012 = EDGE_CURVE('',#19005,#17552,#19013,.T.); +#19013 = LINE('',#19014,#19015); +#19014 = CARTESIAN_POINT('',(30.054889344345,104.33419209926, + 120.94583426675)); +#19015 = VECTOR('',#19016,1.); +#19016 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19017 = PLANE('',#19018); +#19018 = AXIS2_PLACEMENT_3D('',#19019,#19020,#19021); +#19019 = CARTESIAN_POINT('',(30.140988655655,104.10932625088, + 121.63790018638)); +#19020 = DIRECTION('',(-0.993072825812,-3.630964494793E-02, + 0.111749596497)); +#19021 = DIRECTION('',(0.11750047929,-0.306876379828,0.944468382144)); +#19022 = ADVANCED_FACE('',(#19023),#19041,.T.); +#19023 = FACE_BOUND('',#19024,.T.); +#19024 = EDGE_LOOP('',(#19025,#19026,#19027,#19035)); +#19025 = ORIENTED_EDGE('',*,*,#17559,.T.); +#19026 = ORIENTED_EDGE('',*,*,#19012,.F.); +#19027 = ORIENTED_EDGE('',*,*,#19028,.T.); +#19028 = EDGE_CURVE('',#19005,#19029,#19031,.T.); +#19029 = VERTEX_POINT('',#19030); +#19030 = CARTESIAN_POINT('',(30.146500655655,104.56710340832, + 120.22900696525)); +#19031 = LINE('',#19032,#19033); +#19032 = CARTESIAN_POINT('',(30.054889344345,104.33419209926, + 120.94583426675)); +#19033 = VECTOR('',#19034,1.); +#19034 = DIRECTION('',(0.120658060623,0.306759355868,-0.944108219429)); +#19035 = ORIENTED_EDGE('',*,*,#19036,.T.); +#19036 = EDGE_CURVE('',#19029,#17560,#19037,.T.); +#19037 = LINE('',#19038,#19039); +#19038 = CARTESIAN_POINT('',(30.146500655655,104.56710340832, + 120.22900696525)); +#19039 = VECTOR('',#19040,1.); +#19040 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19041 = PLANE('',#19042); +#19042 = AXIS2_PLACEMENT_3D('',#19043,#19044,#19045); +#19043 = CARTESIAN_POINT('',(30.054889344345,104.33419209926, + 120.94583426675)); +#19044 = DIRECTION('',(-0.992694128323,3.728539124093E-02, + -0.114752634799)); +#19045 = DIRECTION('',(-0.120658060623,-0.306759355868,0.944108219429)); +#19046 = ADVANCED_FACE('',(#19047),#19065,.T.); +#19047 = FACE_BOUND('',#19048,.T.); +#19048 = EDGE_LOOP('',(#19049,#19050,#19051,#19059)); +#19049 = ORIENTED_EDGE('',*,*,#17567,.T.); +#19050 = ORIENTED_EDGE('',*,*,#19036,.F.); +#19051 = ORIENTED_EDGE('',*,*,#19052,.T.); +#19052 = EDGE_CURVE('',#19029,#19053,#19055,.T.); +#19053 = VERTEX_POINT('',#19054); +#19054 = CARTESIAN_POINT('',(30.419350655655,104.77022769513, + 119.60385469174)); +#19055 = LINE('',#19056,#19057); +#19056 = CARTESIAN_POINT('',(30.146500655655,104.56710340832, + 120.22900696525)); +#19057 = VECTOR('',#19058,1.); +#19058 = DIRECTION('',(0.383375907718,0.285405746145,-0.878388566324)); +#19059 = ORIENTED_EDGE('',*,*,#19060,.T.); +#19060 = EDGE_CURVE('',#19053,#17568,#19061,.T.); +#19061 = LINE('',#19062,#19063); +#19062 = CARTESIAN_POINT('',(30.419350655655,104.77022769513, + 119.60385469174)); +#19063 = VECTOR('',#19064,1.); +#19064 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19065 = PLANE('',#19066); +#19066 = AXIS2_PLACEMENT_3D('',#19067,#19068,#19069); +#19067 = CARTESIAN_POINT('',(30.146500655655,104.56710340832, + 120.22900696525)); +#19068 = DIRECTION('',(-0.923592395693,0.118469670719,-0.364612155226)); +#19069 = DIRECTION('',(-0.383375907718,-0.285405746145,0.878388566324)); +#19070 = ADVANCED_FACE('',(#19071),#19089,.T.); +#19071 = FACE_BOUND('',#19072,.T.); +#19072 = EDGE_LOOP('',(#19073,#19074,#19075,#19083)); +#19073 = ORIENTED_EDGE('',*,*,#17575,.T.); +#19074 = ORIENTED_EDGE('',*,*,#19060,.F.); +#19075 = ORIENTED_EDGE('',*,*,#19076,.T.); +#19076 = EDGE_CURVE('',#19053,#19077,#19079,.T.); +#19077 = VERTEX_POINT('',#19078); +#19078 = CARTESIAN_POINT('',(30.852055655655,104.93885950502, + 119.08485934657)); +#19079 = LINE('',#19080,#19081); +#19080 = CARTESIAN_POINT('',(30.419350655655,104.77022769513, + 119.60385469174)); +#19081 = VECTOR('',#19082,1.); +#19082 = DIRECTION('',(0.621311213839,0.242134559341,-0.745213547066)); +#19083 = ORIENTED_EDGE('',*,*,#19084,.T.); +#19084 = EDGE_CURVE('',#19077,#17576,#19085,.T.); +#19085 = LINE('',#19086,#19087); +#19086 = CARTESIAN_POINT('',(30.852055655655,104.93885950502, + 119.08485934657)); +#19087 = VECTOR('',#19088,1.); +#19088 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19089 = PLANE('',#19090); +#19090 = AXIS2_PLACEMENT_3D('',#19091,#19092,#19093); +#19091 = CARTESIAN_POINT('',(30.419350655655,104.77022769513, + 119.60385469174)); +#19092 = DIRECTION('',(-0.783563893731,0.191995723872,-0.590902078569)); +#19093 = DIRECTION('',(-0.621311213839,-0.242134559341,0.745213547066)); +#19094 = ADVANCED_FACE('',(#19095),#19113,.T.); +#19095 = FACE_BOUND('',#19096,.T.); +#19096 = EDGE_LOOP('',(#19097,#19098,#19099,#19107)); +#19097 = ORIENTED_EDGE('',*,*,#17583,.T.); +#19098 = ORIENTED_EDGE('',*,*,#19084,.F.); +#19099 = ORIENTED_EDGE('',*,*,#19100,.T.); +#19100 = EDGE_CURVE('',#19077,#19101,#19103,.T.); +#19101 = VERTEX_POINT('',#19102); +#19102 = CARTESIAN_POINT('',(31.422570655655,105.0666108387, + 118.69168117005)); +#19103 = LINE('',#19104,#19105); +#19104 = CARTESIAN_POINT('',(30.852055655655,104.93885950502, + 119.08485934657)); +#19105 = VECTOR('',#19106,1.); +#19106 = DIRECTION('',(0.809752989897,0.181322181555,-0.558052293095)); +#19107 = ORIENTED_EDGE('',*,*,#19108,.T.); +#19108 = EDGE_CURVE('',#19101,#17584,#19109,.T.); +#19109 = LINE('',#19110,#19111); +#19110 = CARTESIAN_POINT('',(31.422570655655,105.0666108387, + 118.69168117005)); +#19111 = VECTOR('',#19112,1.); +#19112 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19113 = PLANE('',#19114); +#19114 = AXIS2_PLACEMENT_3D('',#19115,#19116,#19117); +#19115 = CARTESIAN_POINT('',(30.852055655655,104.93885950502, + 119.08485934657)); +#19116 = DIRECTION('',(-0.586770905339,0.250227435124,-0.770120857631)); +#19117 = DIRECTION('',(-0.809752989897,-0.181322181555,0.558052293095)); +#19118 = ADVANCED_FACE('',(#19119),#19137,.T.); +#19119 = FACE_BOUND('',#19120,.T.); +#19120 = EDGE_LOOP('',(#19121,#19122,#19123,#19131)); +#19121 = ORIENTED_EDGE('',*,*,#17591,.T.); +#19122 = ORIENTED_EDGE('',*,*,#19108,.F.); +#19123 = ORIENTED_EDGE('',*,*,#19124,.T.); +#19124 = EDGE_CURVE('',#19101,#19125,#19127,.T.); +#19125 = VERTEX_POINT('',#19126); +#19126 = CARTESIAN_POINT('',(32.108833655655,105.14581683863, + 118.44791016802)); +#19127 = LINE('',#19128,#19129); +#19128 = CARTESIAN_POINT('',(31.422570655655,105.0666108387, + 118.69168117005)); +#19129 = VECTOR('',#19130,1.); +#19130 = DIRECTION('',(0.936791791349,0.108121129305,-0.332762619683)); +#19131 = ORIENTED_EDGE('',*,*,#19132,.T.); +#19132 = EDGE_CURVE('',#19125,#17592,#19133,.T.); +#19133 = LINE('',#19134,#19135); +#19134 = CARTESIAN_POINT('',(32.108833655655,105.14581683863, + 118.44791016802)); +#19135 = VECTOR('',#19136,1.); +#19136 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19137 = PLANE('',#19138); +#19138 = AXIS2_PLACEMENT_3D('',#19139,#19140,#19141); +#19139 = CARTESIAN_POINT('',(31.422570655655,105.0666108387, + 118.69168117005)); +#19140 = DIRECTION('',(-0.349887324235,0.289484583718,-0.890941937575)); +#19141 = DIRECTION('',(-0.936791791349,-0.108121129305,0.332762619683)); +#19142 = ADVANCED_FACE('',(#19143),#19161,.T.); +#19143 = FACE_BOUND('',#19144,.T.); +#19144 = EDGE_LOOP('',(#19145,#19146,#19147,#19155)); +#19145 = ORIENTED_EDGE('',*,*,#17599,.T.); +#19146 = ORIENTED_EDGE('',*,*,#19132,.F.); +#19147 = ORIENTED_EDGE('',*,*,#19148,.T.); +#19148 = EDGE_CURVE('',#19125,#19149,#19151,.T.); +#19149 = VERTEX_POINT('',#19150); +#19150 = CARTESIAN_POINT('',(32.88876778211,105.17221751983, + 118.36665722612)); +#19151 = LINE('',#19152,#19153); +#19152 = CARTESIAN_POINT('',(32.108833655655,105.14581683863, + 118.44791016802)); +#19153 = VECTOR('',#19154,1.); +#19154 = DIRECTION('',(0.994053893821,3.364861089657E-02,-0.103559775805 + )); +#19155 = ORIENTED_EDGE('',*,*,#19156,.T.); +#19156 = EDGE_CURVE('',#19149,#17600,#19157,.T.); +#19157 = LINE('',#19158,#19159); +#19158 = CARTESIAN_POINT('',(32.88876778211,105.17221751983, + 118.36665722612)); +#19159 = VECTOR('',#19160,1.); +#19160 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19161 = PLANE('',#19162); +#19162 = AXIS2_PLACEMENT_3D('',#19163,#19164,#19165); +#19163 = CARTESIAN_POINT('',(32.108833655655,105.14581683863, + 118.44791016802)); +#19164 = DIRECTION('',(-0.10888919221,0.307179546515,-0.945401433267)); +#19165 = DIRECTION('',(-0.994053893821,-3.364861089657E-02, + 0.103559775805)); +#19166 = ADVANCED_FACE('',(#19167),#19185,.T.); +#19167 = FACE_BOUND('',#19168,.T.); +#19168 = EDGE_LOOP('',(#19169,#19170,#19171,#19179)); +#19169 = ORIENTED_EDGE('',*,*,#17607,.T.); +#19170 = ORIENTED_EDGE('',*,*,#19156,.F.); +#19171 = ORIENTED_EDGE('',*,*,#19172,.T.); +#19172 = EDGE_CURVE('',#19149,#19173,#19175,.T.); +#19173 = VERTEX_POINT('',#19174); +#19174 = CARTESIAN_POINT('',(33.608178655655,105.14964586821, + 118.43612562673)); +#19175 = LINE('',#19176,#19177); +#19176 = CARTESIAN_POINT('',(32.88876778211,105.17221751983, + 118.36665722612)); +#19177 = VECTOR('',#19178,1.); +#19178 = DIRECTION('',(0.994885114339,-3.121470779901E-02, + 9.606899231074E-02)); +#19179 = ORIENTED_EDGE('',*,*,#19180,.T.); +#19180 = EDGE_CURVE('',#19173,#17608,#19181,.T.); +#19181 = LINE('',#19182,#19183); +#19182 = CARTESIAN_POINT('',(33.608178655655,105.14964586821, + 118.43612562673)); +#19183 = VECTOR('',#19184,1.); +#19184 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19185 = PLANE('',#19186); +#19186 = AXIS2_PLACEMENT_3D('',#19187,#19188,#19189); +#19187 = CARTESIAN_POINT('',(32.88876778211,105.17221751983, + 118.36665722612)); +#19188 = DIRECTION('',(0.101012916335,0.307436407781,-0.946191970957)); +#19189 = DIRECTION('',(-0.994885114339,3.121470779901E-02, + -9.606899231074E-02)); +#19190 = ADVANCED_FACE('',(#19191),#19209,.T.); +#19191 = FACE_BOUND('',#19192,.T.); +#19192 = EDGE_LOOP('',(#19193,#19194,#19195,#19203)); +#19193 = ORIENTED_EDGE('',*,*,#17615,.T.); +#19194 = ORIENTED_EDGE('',*,*,#19180,.F.); +#19195 = ORIENTED_EDGE('',*,*,#19196,.T.); +#19196 = EDGE_CURVE('',#19173,#19197,#19199,.T.); +#19197 = VERTEX_POINT('',#19198); +#19198 = CARTESIAN_POINT('',(34.244830655655,105.08193746359, + 118.64451066896)); +#19199 = LINE('',#19200,#19201); +#19200 = CARTESIAN_POINT('',(33.608178655655,105.14964586821, + 118.43612562673)); +#19201 = VECTOR('',#19202,1.); +#19202 = DIRECTION('',(0.945567879603,-0.100561833762,0.309497500238)); +#19203 = ORIENTED_EDGE('',*,*,#19204,.T.); +#19204 = EDGE_CURVE('',#19197,#17616,#19205,.T.); +#19205 = LINE('',#19206,#19207); +#19206 = CARTESIAN_POINT('',(34.244830655655,105.08193746359, + 118.64451066896)); +#19207 = VECTOR('',#19208,1.); +#19208 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19209 = PLANE('',#19210); +#19210 = AXIS2_PLACEMENT_3D('',#19211,#19212,#19213); +#19211 = CARTESIAN_POINT('',(33.608178655655,105.14964586821, + 118.43612562673)); +#19212 = DIRECTION('',(0.325424929996,0.292196544132,-0.899288493496)); +#19213 = DIRECTION('',(-0.945567879603,0.100561833762,-0.309497500238)); +#19214 = ADVANCED_FACE('',(#19215),#19233,.T.); +#19215 = FACE_BOUND('',#19216,.T.); +#19216 = EDGE_LOOP('',(#19217,#19218,#19219,#19227)); +#19217 = ORIENTED_EDGE('',*,*,#17623,.T.); +#19218 = ORIENTED_EDGE('',*,*,#19204,.F.); +#19219 = ORIENTED_EDGE('',*,*,#19220,.T.); +#19220 = EDGE_CURVE('',#19197,#19221,#19223,.T.); +#19221 = VERTEX_POINT('',#19222); +#19222 = CARTESIAN_POINT('',(34.776752655655,104.97505219344, + 118.97346970527)); +#19223 = LINE('',#19224,#19225); +#19224 = CARTESIAN_POINT('',(34.244830655655,105.08193746359, + 118.64451066896)); +#19225 = VECTOR('',#19226,1.); +#19226 = DIRECTION('',(0.838343714589,-0.168458146895,0.518460865402)); +#19227 = ORIENTED_EDGE('',*,*,#19228,.T.); +#19228 = EDGE_CURVE('',#19221,#17624,#19229,.T.); +#19229 = LINE('',#19230,#19231); +#19230 = CARTESIAN_POINT('',(34.776752655655,104.97505219344, + 118.97346970527)); +#19231 = VECTOR('',#19232,1.); +#19232 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19233 = PLANE('',#19234); +#19234 = AXIS2_PLACEMENT_3D('',#19235,#19236,#19237); +#19235 = CARTESIAN_POINT('',(34.244830655655,105.08193746359, + 118.64451066896)); +#19236 = DIRECTION('',(0.545142014716,0.259062454935,-0.797312252655)); +#19237 = DIRECTION('',(-0.838343714589,0.168458146895,-0.518460865402)); +#19238 = ADVANCED_FACE('',(#19239),#19257,.T.); +#19239 = FACE_BOUND('',#19240,.T.); +#19240 = EDGE_LOOP('',(#19241,#19242,#19243,#19251)); +#19241 = ORIENTED_EDGE('',*,*,#17631,.T.); +#19242 = ORIENTED_EDGE('',*,*,#19228,.F.); +#19243 = ORIENTED_EDGE('',*,*,#19244,.T.); +#19244 = EDGE_CURVE('',#19221,#19245,#19247,.T.); +#19245 = VERTEX_POINT('',#19246); +#19246 = CARTESIAN_POINT('',(35.192920655655,104.83495161362, + 119.40465495334)); +#19247 = LINE('',#19248,#19249); +#19248 = CARTESIAN_POINT('',(34.776752655655,104.97505219344, + 118.97346970527)); +#19249 = VECTOR('',#19250,1.); +#19250 = DIRECTION('',(0.676231511144,-0.227649475229,0.700633042158)); +#19251 = ORIENTED_EDGE('',*,*,#19252,.T.); +#19252 = EDGE_CURVE('',#19245,#17632,#19253,.T.); +#19253 = LINE('',#19254,#19255); +#19254 = CARTESIAN_POINT('',(35.192920655655,104.83495161362, + 119.40465495334)); +#19255 = VECTOR('',#19256,1.); +#19256 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19257 = PLANE('',#19258); +#19258 = AXIS2_PLACEMENT_3D('',#19259,#19260,#19261); +#19259 = CARTESIAN_POINT('',(34.776752655655,104.97505219344, + 118.97346970527)); +#19260 = DIRECTION('',(0.736689176883,0.208967029075,-0.643134385198)); +#19261 = DIRECTION('',(-0.676231511144,0.227649475229,-0.700633042158)); +#19262 = ADVANCED_FACE('',(#19263),#19281,.T.); +#19263 = FACE_BOUND('',#19264,.T.); +#19264 = EDGE_LOOP('',(#19265,#19266,#19267,#19275)); +#19265 = ORIENTED_EDGE('',*,*,#17639,.T.); +#19266 = ORIENTED_EDGE('',*,*,#19252,.F.); +#19267 = ORIENTED_EDGE('',*,*,#19268,.T.); +#19268 = EDGE_CURVE('',#19245,#19269,#19271,.T.); +#19269 = VERTEX_POINT('',#19270); +#19270 = CARTESIAN_POINT('',(35.476798655655,104.66759758899, + 119.91971767982)); +#19271 = LINE('',#19272,#19273); +#19272 = CARTESIAN_POINT('',(35.192920655655,104.83495161362, + 119.40465495334)); +#19273 = VECTOR('',#19274,1.); +#19274 = DIRECTION('',(0.464262355506,-0.27369564981,0.842348595615)); +#19275 = ORIENTED_EDGE('',*,*,#19276,.T.); +#19276 = EDGE_CURVE('',#19269,#17640,#19277,.T.); +#19277 = LINE('',#19278,#19279); +#19278 = CARTESIAN_POINT('',(35.476798655655,104.66759758899, + 119.91971767982)); +#19279 = VECTOR('',#19280,1.); +#19280 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19281 = PLANE('',#19282); +#19282 = AXIS2_PLACEMENT_3D('',#19283,#19284,#19285); +#19283 = CARTESIAN_POINT('',(35.192920655655,104.83495161362, + 119.40465495334)); +#19284 = DIRECTION('',(0.88569772793,0.1434649577,-0.441539738475)); +#19285 = DIRECTION('',(-0.464262355506,0.27369564981,-0.842348595615)); +#19286 = ADVANCED_FACE('',(#19287),#19298,.T.); +#19287 = FACE_BOUND('',#19288,.T.); +#19288 = EDGE_LOOP('',(#19289,#19290,#19291,#19297)); +#19289 = ORIENTED_EDGE('',*,*,#17647,.T.); +#19290 = ORIENTED_EDGE('',*,*,#19276,.F.); +#19291 = ORIENTED_EDGE('',*,*,#19292,.T.); +#19292 = EDGE_CURVE('',#19269,#18277,#19293,.T.); +#19293 = LINE('',#19294,#19295); +#19294 = CARTESIAN_POINT('',(35.476798655655,104.66759758899, + 119.91971767982)); +#19295 = VECTOR('',#19296,1.); +#19296 = DIRECTION('',(0.216003005405,-0.301721937016,0.928604638358)); +#19297 = ORIENTED_EDGE('',*,*,#18276,.T.); +#19298 = PLANE('',#19299); +#19299 = AXIS2_PLACEMENT_3D('',#19300,#19301,#19302); +#19300 = CARTESIAN_POINT('',(35.476798655655,104.66759758899, + 119.91971767982)); +#19301 = DIRECTION('',(0.976392698486,6.674859950634E-02,-0.20543106583) + ); +#19302 = DIRECTION('',(-0.216003005405,0.301721937016,-0.928604638358)); +#19303 = ADVANCED_FACE('',(#19304),#19349,.T.); +#19304 = FACE_BOUND('',#19305,.T.); +#19305 = EDGE_LOOP('',(#19306,#19307,#19308,#19309,#19310,#19311,#19312, + #19313,#19314,#19315,#19316,#19317,#19318,#19319,#19320,#19321, + #19322,#19323,#19324,#19325,#19326,#19327,#19328,#19329,#19330, + #19331,#19332,#19333,#19334,#19335,#19336,#19337,#19338,#19339, + #19340,#19341,#19342,#19343,#19344,#19345,#19346,#19347,#19348)); +#19306 = ORIENTED_EDGE('',*,*,#18284,.F.); +#19307 = ORIENTED_EDGE('',*,*,#19292,.F.); +#19308 = ORIENTED_EDGE('',*,*,#19268,.F.); +#19309 = ORIENTED_EDGE('',*,*,#19244,.F.); +#19310 = ORIENTED_EDGE('',*,*,#19220,.F.); +#19311 = ORIENTED_EDGE('',*,*,#19196,.F.); +#19312 = ORIENTED_EDGE('',*,*,#19172,.F.); +#19313 = ORIENTED_EDGE('',*,*,#19148,.F.); +#19314 = ORIENTED_EDGE('',*,*,#19124,.F.); +#19315 = ORIENTED_EDGE('',*,*,#19100,.F.); +#19316 = ORIENTED_EDGE('',*,*,#19076,.F.); +#19317 = ORIENTED_EDGE('',*,*,#19052,.F.); +#19318 = ORIENTED_EDGE('',*,*,#19028,.F.); +#19319 = ORIENTED_EDGE('',*,*,#19004,.F.); +#19320 = ORIENTED_EDGE('',*,*,#18980,.F.); +#19321 = ORIENTED_EDGE('',*,*,#18956,.F.); +#19322 = ORIENTED_EDGE('',*,*,#18932,.F.); +#19323 = ORIENTED_EDGE('',*,*,#18908,.F.); +#19324 = ORIENTED_EDGE('',*,*,#18884,.F.); +#19325 = ORIENTED_EDGE('',*,*,#18860,.F.); +#19326 = ORIENTED_EDGE('',*,*,#18836,.F.); +#19327 = ORIENTED_EDGE('',*,*,#18812,.F.); +#19328 = ORIENTED_EDGE('',*,*,#18788,.F.); +#19329 = ORIENTED_EDGE('',*,*,#18764,.F.); +#19330 = ORIENTED_EDGE('',*,*,#18740,.F.); +#19331 = ORIENTED_EDGE('',*,*,#18716,.F.); +#19332 = ORIENTED_EDGE('',*,*,#18692,.F.); +#19333 = ORIENTED_EDGE('',*,*,#18668,.F.); +#19334 = ORIENTED_EDGE('',*,*,#18644,.F.); +#19335 = ORIENTED_EDGE('',*,*,#18620,.F.); +#19336 = ORIENTED_EDGE('',*,*,#18596,.F.); +#19337 = ORIENTED_EDGE('',*,*,#18572,.F.); +#19338 = ORIENTED_EDGE('',*,*,#18548,.F.); +#19339 = ORIENTED_EDGE('',*,*,#18524,.F.); +#19340 = ORIENTED_EDGE('',*,*,#18500,.F.); +#19341 = ORIENTED_EDGE('',*,*,#18476,.F.); +#19342 = ORIENTED_EDGE('',*,*,#18452,.F.); +#19343 = ORIENTED_EDGE('',*,*,#18428,.F.); +#19344 = ORIENTED_EDGE('',*,*,#18404,.F.); +#19345 = ORIENTED_EDGE('',*,*,#18380,.F.); +#19346 = ORIENTED_EDGE('',*,*,#18356,.F.); +#19347 = ORIENTED_EDGE('',*,*,#18332,.F.); +#19348 = ORIENTED_EDGE('',*,*,#18308,.F.); +#19349 = PLANE('',#19350); +#19350 = AXIS2_PLACEMENT_3D('',#19351,#19352,#19353); +#19351 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#19352 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#19353 = DIRECTION('',(-1.,0.,0.)); +#19354 = ADVANCED_FACE('',(#19355),#19380,.T.); +#19355 = FACE_BOUND('',#19356,.T.); +#19356 = EDGE_LOOP('',(#19357,#19358,#19366,#19374)); +#19357 = ORIENTED_EDGE('',*,*,#17029,.T.); +#19358 = ORIENTED_EDGE('',*,*,#19359,.F.); +#19359 = EDGE_CURVE('',#19360,#17032,#19362,.T.); +#19360 = VERTEX_POINT('',#19361); +#19361 = CARTESIAN_POINT('',(42.061070655655,103.383698107, + 123.87115397893)); +#19362 = LINE('',#19363,#19364); +#19363 = CARTESIAN_POINT('',(42.061070655655,103.383698107, + 123.87115397893)); +#19364 = VECTOR('',#19365,1.); +#19365 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19366 = ORIENTED_EDGE('',*,*,#19367,.T.); +#19367 = EDGE_CURVE('',#19360,#19368,#19370,.T.); +#19368 = VERTEX_POINT('',#19369); +#19369 = CARTESIAN_POINT('',(42.061070655655,103.37347891499, + 123.90260541792)); +#19370 = LINE('',#19371,#19372); +#19371 = CARTESIAN_POINT('',(42.061070655655,103.383698107, + 123.87115397893)); +#19372 = VECTOR('',#19373,1.); +#19373 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#19374 = ORIENTED_EDGE('',*,*,#19375,.T.); +#19375 = EDGE_CURVE('',#19368,#17030,#19376,.T.); +#19376 = LINE('',#19377,#19378); +#19377 = CARTESIAN_POINT('',(42.061070655655,103.37347891499, + 123.90260541792)); +#19378 = VECTOR('',#19379,1.); +#19379 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19380 = PLANE('',#19381); +#19381 = AXIS2_PLACEMENT_3D('',#19382,#19383,#19384); +#19382 = CARTESIAN_POINT('',(42.061070655655,103.383698107, + 123.87115397893)); +#19383 = DIRECTION('',(1.,0.,0.)); +#19384 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#19385 = ADVANCED_FACE('',(#19386),#19404,.T.); +#19386 = FACE_BOUND('',#19387,.T.); +#19387 = EDGE_LOOP('',(#19388,#19389,#19390,#19398)); +#19388 = ORIENTED_EDGE('',*,*,#17039,.T.); +#19389 = ORIENTED_EDGE('',*,*,#19375,.F.); +#19390 = ORIENTED_EDGE('',*,*,#19391,.T.); +#19391 = EDGE_CURVE('',#19368,#19392,#19394,.T.); +#19392 = VERTEX_POINT('',#19393); +#19393 = CARTESIAN_POINT('',(41.971498655655,103.17205762084, + 124.52251641898)); +#19394 = LINE('',#19395,#19396); +#19395 = CARTESIAN_POINT('',(42.061070655655,103.37347891499, + 123.90260541792)); +#19396 = VECTOR('',#19397,1.); +#19397 = DIRECTION('',(-0.136140342999,-0.306139910613,0.942201762967)); +#19398 = ORIENTED_EDGE('',*,*,#19399,.T.); +#19399 = EDGE_CURVE('',#19392,#17040,#19400,.T.); +#19400 = LINE('',#19401,#19402); +#19401 = CARTESIAN_POINT('',(41.971498655655,103.17205762084, + 124.52251641898)); +#19402 = VECTOR('',#19403,1.); +#19403 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19404 = PLANE('',#19405); +#19405 = AXIS2_PLACEMENT_3D('',#19406,#19407,#19408); +#19406 = CARTESIAN_POINT('',(42.061070655655,103.37347891499, + 123.90260541792)); +#19407 = DIRECTION('',(0.99068956137,-4.206967960666E-02,0.12947716034) + ); +#19408 = DIRECTION('',(0.136140342999,0.306139910613,-0.942201762967)); +#19409 = ADVANCED_FACE('',(#19410),#19428,.T.); +#19410 = FACE_BOUND('',#19411,.T.); +#19411 = EDGE_LOOP('',(#19412,#19413,#19414,#19422)); +#19412 = ORIENTED_EDGE('',*,*,#17047,.T.); +#19413 = ORIENTED_EDGE('',*,*,#19399,.F.); +#19414 = ORIENTED_EDGE('',*,*,#19415,.T.); +#19415 = EDGE_CURVE('',#19392,#19416,#19418,.T.); +#19416 = VERTEX_POINT('',#19417); +#19417 = CARTESIAN_POINT('',(41.702780655655,102.99363182632, + 125.07165454937)); +#19418 = LINE('',#19419,#19420); +#19419 = CARTESIAN_POINT('',(41.971498655655,103.17205762084, + 124.52251641898)); +#19420 = VECTOR('',#19421,1.); +#19421 = DIRECTION('',(-0.421938306747,-0.280162391872,0.862251181199)); +#19422 = ORIENTED_EDGE('',*,*,#19423,.T.); +#19423 = EDGE_CURVE('',#19416,#17048,#19424,.T.); +#19424 = LINE('',#19425,#19426); +#19425 = CARTESIAN_POINT('',(41.702780655655,102.99363182632, + 125.07165454937)); +#19426 = VECTOR('',#19427,1.); +#19427 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19428 = PLANE('',#19429); +#19429 = AXIS2_PLACEMENT_3D('',#19430,#19431,#19432); +#19430 = CARTESIAN_POINT('',(41.971498655655,103.17205762084, + 124.52251641898)); +#19431 = DIRECTION('',(0.906624544836,-0.130386107363,0.401287176107)); +#19432 = DIRECTION('',(0.421938306747,0.280162391872,-0.862251181199)); +#19433 = ADVANCED_FACE('',(#19434),#19452,.T.); +#19434 = FACE_BOUND('',#19435,.T.); +#19435 = EDGE_LOOP('',(#19436,#19437,#19438,#19446)); +#19436 = ORIENTED_EDGE('',*,*,#17055,.T.); +#19437 = ORIENTED_EDGE('',*,*,#19423,.F.); +#19438 = ORIENTED_EDGE('',*,*,#19439,.T.); +#19439 = EDGE_CURVE('',#19416,#19440,#19442,.T.); +#19440 = VERTEX_POINT('',#19441); +#19441 = CARTESIAN_POINT('',(41.282478655655,102.84331112744, + 125.53429408961)); +#19442 = LINE('',#19443,#19444); +#19443 = CARTESIAN_POINT('',(41.702780655655,102.99363182632, + 125.07165454937)); +#19444 = VECTOR('',#19445,1.); +#19445 = DIRECTION('',(-0.653787194936,-0.233826505849,0.719643987607)); +#19446 = ORIENTED_EDGE('',*,*,#19447,.T.); +#19447 = EDGE_CURVE('',#19440,#17056,#19448,.T.); +#19448 = LINE('',#19449,#19450); +#19449 = CARTESIAN_POINT('',(41.282478655655,102.84331112744, + 125.53429408961)); +#19450 = VECTOR('',#19451,1.); +#19451 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19452 = PLANE('',#19453); +#19453 = AXIS2_PLACEMENT_3D('',#19454,#19455,#19456); +#19454 = CARTESIAN_POINT('',(41.702780655655,102.99363182632, + 125.07165454937)); +#19455 = DIRECTION('',(0.756678467869,-0.20203135394,0.621788572015)); +#19456 = DIRECTION('',(0.653787194936,0.233826505849,-0.719643987607)); +#19457 = ADVANCED_FACE('',(#19458),#19476,.T.); +#19458 = FACE_BOUND('',#19459,.T.); +#19459 = EDGE_LOOP('',(#19460,#19461,#19462,#19470)); +#19460 = ORIENTED_EDGE('',*,*,#17063,.T.); +#19461 = ORIENTED_EDGE('',*,*,#19447,.F.); +#19462 = ORIENTED_EDGE('',*,*,#19463,.T.); +#19463 = EDGE_CURVE('',#19440,#19464,#19466,.T.); +#19464 = VERTEX_POINT('',#19465); +#19465 = CARTESIAN_POINT('',(40.738150655655,102.72961234158, + 125.88422297105)); +#19466 = LINE('',#19467,#19468); +#19467 = CARTESIAN_POINT('',(41.282478655655,102.84331112744, + 125.53429408961)); +#19468 = VECTOR('',#19469,1.); +#19469 = DIRECTION('',(-0.828484591299,-0.173053181416,0.5326029275)); +#19470 = ORIENTED_EDGE('',*,*,#19471,.T.); +#19471 = EDGE_CURVE('',#19464,#17064,#19472,.T.); +#19472 = LINE('',#19473,#19474); +#19473 = CARTESIAN_POINT('',(40.738150655655,102.72961234158, + 125.88422297105)); +#19474 = VECTOR('',#19475,1.); +#19475 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19476 = PLANE('',#19477); +#19477 = AXIS2_PLACEMENT_3D('',#19478,#19479,#19480); +#19478 = CARTESIAN_POINT('',(41.282478655655,102.84331112744, + 125.53429408961)); +#19479 = DIRECTION('',(0.560011858785,-0.256015818289,0.787935669205)); +#19480 = DIRECTION('',(0.828484591299,0.173053181416,-0.5326029275)); +#19481 = ADVANCED_FACE('',(#19482),#19500,.T.); +#19482 = FACE_BOUND('',#19483,.T.); +#19483 = EDGE_LOOP('',(#19484,#19485,#19486,#19494)); +#19484 = ORIENTED_EDGE('',*,*,#17071,.T.); +#19485 = ORIENTED_EDGE('',*,*,#19471,.F.); +#19486 = ORIENTED_EDGE('',*,*,#19487,.T.); +#19487 = EDGE_CURVE('',#19464,#19488,#19490,.T.); +#19488 = VERTEX_POINT('',#19489); +#19489 = CARTESIAN_POINT('',(40.094605655655,102.65679403194, + 126.10833468383)); +#19490 = LINE('',#19491,#19492); +#19491 = CARTESIAN_POINT('',(40.738150655655,102.72961234158, + 125.88422297105)); +#19492 = VECTOR('',#19493,1.); +#19493 = DIRECTION('',(-0.939027849092,-0.106252741728,0.327012313996)); +#19494 = ORIENTED_EDGE('',*,*,#19495,.T.); +#19495 = EDGE_CURVE('',#19488,#17072,#19496,.T.); +#19496 = LINE('',#19497,#19498); +#19497 = CARTESIAN_POINT('',(40.094605655655,102.65679403194, + 126.10833468383)); +#19498 = VECTOR('',#19499,1.); +#19499 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19500 = PLANE('',#19501); +#19501 = AXIS2_PLACEMENT_3D('',#19502,#19503,#19504); +#19502 = CARTESIAN_POINT('',(40.738150655655,102.72961234158, + 125.88422297105)); +#19503 = DIRECTION('',(0.343841095027,-0.290175563561,0.893068554862)); +#19504 = DIRECTION('',(0.939027849092,0.106252741728,-0.327012313996)); +#19505 = ADVANCED_FACE('',(#19506),#19524,.T.); +#19506 = FACE_BOUND('',#19507,.T.); +#19507 = EDGE_LOOP('',(#19508,#19509,#19510,#19518)); +#19508 = ORIENTED_EDGE('',*,*,#17079,.T.); +#19509 = ORIENTED_EDGE('',*,*,#19495,.F.); +#19510 = ORIENTED_EDGE('',*,*,#19511,.T.); +#19511 = EDGE_CURVE('',#19488,#19512,#19514,.T.); +#19512 = VERTEX_POINT('',#19513); +#19513 = CARTESIAN_POINT('',(39.387670655655,102.63252136507, + 126.18303827107)); +#19514 = LINE('',#19515,#19516); +#19515 = CARTESIAN_POINT('',(40.094605655655,102.65679403194, + 126.10833468383)); +#19516 = VECTOR('',#19517,1.); +#19517 = DIRECTION('',(-0.993883786109,-3.41250752217E-02,0.105026182215 + )); +#19518 = ORIENTED_EDGE('',*,*,#19519,.T.); +#19519 = EDGE_CURVE('',#19512,#17080,#19520,.T.); +#19520 = LINE('',#19521,#19522); +#19521 = CARTESIAN_POINT('',(39.387670655655,102.63252136507, + 126.18303827107)); +#19522 = VECTOR('',#19523,1.); +#19523 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19524 = PLANE('',#19525); +#19525 = AXIS2_PLACEMENT_3D('',#19526,#19527,#19528); +#19526 = CARTESIAN_POINT('',(40.094605655655,102.65679403194, + 126.10833468383)); +#19527 = DIRECTION('',(0.110431063155,-0.307126980341,0.945239651219)); +#19528 = DIRECTION('',(0.993883786109,3.41250752217E-02,-0.105026182215) + ); +#19529 = ADVANCED_FACE('',(#19530),#19548,.T.); +#19530 = FACE_BOUND('',#19531,.T.); +#19531 = EDGE_LOOP('',(#19532,#19533,#19534,#19542)); +#19532 = ORIENTED_EDGE('',*,*,#17087,.T.); +#19533 = ORIENTED_EDGE('',*,*,#19519,.F.); +#19534 = ORIENTED_EDGE('',*,*,#19535,.T.); +#19535 = EDGE_CURVE('',#19512,#19536,#19538,.T.); +#19536 = VERTEX_POINT('',#19537); +#19537 = CARTESIAN_POINT('',(38.705543655655,102.65509073027, + 126.11357690735)); +#19538 = LINE('',#19539,#19540); +#19539 = CARTESIAN_POINT('',(39.387670655655,102.63252136507, + 126.18303827107)); +#19540 = VECTOR('',#19541,1.); +#19541 = DIRECTION('',(-0.994316722842,3.289870836875E-02, + -0.101251813141)); +#19542 = ORIENTED_EDGE('',*,*,#19543,.T.); +#19543 = EDGE_CURVE('',#19536,#17088,#19544,.T.); +#19544 = LINE('',#19545,#19546); +#19545 = CARTESIAN_POINT('',(38.705543655655,102.65509073027, + 126.11357690735)); +#19546 = VECTOR('',#19547,1.); +#19547 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19548 = PLANE('',#19549); +#19549 = AXIS2_PLACEMENT_3D('',#19550,#19551,#19552); +#19550 = CARTESIAN_POINT('',(39.387670655655,102.63252136507, + 126.18303827107)); +#19551 = DIRECTION('',(-0.106462456653,-0.307260765149,0.94565139852)); +#19552 = DIRECTION('',(0.994316722842,-3.289870836875E-02,0.101251813141 + )); +#19553 = ADVANCED_FACE('',(#19554),#19572,.T.); +#19554 = FACE_BOUND('',#19555,.T.); +#19555 = EDGE_LOOP('',(#19556,#19557,#19558,#19566)); +#19556 = ORIENTED_EDGE('',*,*,#17095,.T.); +#19557 = ORIENTED_EDGE('',*,*,#19543,.F.); +#19558 = ORIENTED_EDGE('',*,*,#19559,.T.); +#19559 = EDGE_CURVE('',#19536,#19560,#19562,.T.); +#19560 = VERTEX_POINT('',#19561); +#19561 = CARTESIAN_POINT('',(38.103340655655,102.72279913489, + 125.90519186512)); +#19562 = LINE('',#19563,#19564); +#19563 = CARTESIAN_POINT('',(38.705543655655,102.65509073027, + 126.11357690735)); +#19564 = VECTOR('',#19565,1.); +#19565 = DIRECTION('',(-0.939730213375,0.105658114492,-0.32518223954)); +#19566 = ORIENTED_EDGE('',*,*,#19567,.T.); +#19567 = EDGE_CURVE('',#19560,#17096,#19568,.T.); +#19568 = LINE('',#19569,#19570); +#19569 = CARTESIAN_POINT('',(38.103340655655,102.72279913489, + 125.90519186512)); +#19570 = VECTOR('',#19571,1.); +#19571 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19572 = PLANE('',#19573); +#19573 = AXIS2_PLACEMENT_3D('',#19574,#19575,#19576); +#19574 = CARTESIAN_POINT('',(38.705543655655,102.65509073027, + 126.11357690735)); +#19575 = DIRECTION('',(-0.34191684087,-0.29039260606,0.89373654299)); +#19576 = DIRECTION('',(0.939730213375,-0.105658114492,0.32518223954)); +#19577 = ADVANCED_FACE('',(#19578),#19596,.T.); +#19578 = FACE_BOUND('',#19579,.T.); +#19579 = EDGE_LOOP('',(#19580,#19581,#19582,#19590)); +#19580 = ORIENTED_EDGE('',*,*,#17103,.T.); +#19581 = ORIENTED_EDGE('',*,*,#19567,.F.); +#19582 = ORIENTED_EDGE('',*,*,#19583,.T.); +#19583 = EDGE_CURVE('',#19560,#19584,#19586,.T.); +#19584 = VERTEX_POINT('',#19585); +#19585 = CARTESIAN_POINT('',(37.601733655655,102.82925857962, + 125.57754338469)); +#19586 = LINE('',#19587,#19588); +#19587 = CARTESIAN_POINT('',(38.103340655655,102.72279913489, + 125.90519186512)); +#19588 = VECTOR('',#19589,1.); +#19589 = DIRECTION('',(-0.824306367079,0.174948113021,-0.538434927306)); +#19590 = ORIENTED_EDGE('',*,*,#19591,.T.); +#19591 = EDGE_CURVE('',#19584,#17104,#19592,.T.); +#19592 = LINE('',#19593,#19594); +#19593 = CARTESIAN_POINT('',(37.601733655655,102.82925857962, + 125.57754338469)); +#19594 = VECTOR('',#19595,1.); +#19595 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19596 = PLANE('',#19597); +#19597 = AXIS2_PLACEMENT_3D('',#19598,#19599,#19600); +#19598 = CARTESIAN_POINT('',(38.103340655655,102.72279913489, + 125.90519186512)); +#19599 = DIRECTION('',(-0.566143986273,-0.254724675999,0.783961941834)); +#19600 = DIRECTION('',(0.824306367079,-0.174948113021,0.538434927306)); +#19601 = ADVANCED_FACE('',(#19602),#19620,.T.); +#19602 = FACE_BOUND('',#19603,.T.); +#19603 = EDGE_LOOP('',(#19604,#19605,#19606,#19614)); +#19604 = ORIENTED_EDGE('',*,*,#17111,.T.); +#19605 = ORIENTED_EDGE('',*,*,#19591,.F.); +#19606 = ORIENTED_EDGE('',*,*,#19607,.T.); +#19607 = EDGE_CURVE('',#19584,#19608,#19610,.T.); +#19608 = VERTEX_POINT('',#19609); +#19609 = CARTESIAN_POINT('',(37.221390655655,102.96808168319, + 125.15028980425)); +#19610 = LINE('',#19611,#19612); +#19611 = CARTESIAN_POINT('',(37.601733655655,102.82925857962, + 125.57754338469)); +#19612 = VECTOR('',#19613,1.); +#19613 = DIRECTION('',(-0.646156063758,0.235843410189,-0.72585138089)); +#19614 = ORIENTED_EDGE('',*,*,#19615,.T.); +#19615 = EDGE_CURVE('',#19608,#17112,#19616,.T.); +#19616 = LINE('',#19617,#19618); +#19617 = CARTESIAN_POINT('',(37.221390655655,102.96808168319, + 125.15028980425)); +#19618 = VECTOR('',#19619,1.); +#19619 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19620 = PLANE('',#19621); +#19621 = AXIS2_PLACEMENT_3D('',#19622,#19623,#19624); +#19622 = CARTESIAN_POINT('',(37.601733655655,102.82925857962, + 125.57754338469)); +#19623 = DIRECTION('',(-0.763205307417,-0.19967320472,0.614530934981)); +#19624 = DIRECTION('',(0.646156063758,-0.235843410189,0.72585138089)); +#19625 = ADVANCED_FACE('',(#19626),#19644,.T.); +#19626 = FACE_BOUND('',#19627,.T.); +#19627 = EDGE_LOOP('',(#19628,#19629,#19630,#19638)); +#19628 = ORIENTED_EDGE('',*,*,#17119,.T.); +#19629 = ORIENTED_EDGE('',*,*,#19615,.F.); +#19630 = ORIENTED_EDGE('',*,*,#19631,.T.); +#19631 = EDGE_CURVE('',#19608,#19632,#19634,.T.); +#19632 = VERTEX_POINT('',#19633); +#19633 = CARTESIAN_POINT('',(36.977475655655,103.13245492989, + 124.64440096894)); +#19634 = LINE('',#19635,#19636); +#19635 = CARTESIAN_POINT('',(37.221390655655,102.96808168319, + 125.15028980425)); +#19636 = VECTOR('',#19637,1.); +#19637 = DIRECTION('',(-0.41681987347,0.280893081159,-0.864500011589)); +#19638 = ORIENTED_EDGE('',*,*,#19639,.T.); +#19639 = EDGE_CURVE('',#19632,#17120,#19640,.T.); +#19640 = LINE('',#19641,#19642); +#19641 = CARTESIAN_POINT('',(36.977475655655,103.13245492989, + 124.64440096894)); +#19642 = VECTOR('',#19643,1.); +#19643 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19644 = PLANE('',#19645); +#19645 = AXIS2_PLACEMENT_3D('',#19646,#19647,#19648); +#19646 = CARTESIAN_POINT('',(37.221390655655,102.96808168319, + 125.15028980425)); +#19647 = DIRECTION('',(-0.90898910504,-0.128804424495,0.396419256785)); +#19648 = DIRECTION('',(0.41681987347,-0.280893081159,0.864500011589)); +#19649 = ADVANCED_FACE('',(#19650),#19668,.T.); +#19650 = FACE_BOUND('',#19651,.T.); +#19651 = EDGE_LOOP('',(#19652,#19653,#19654,#19662)); +#19652 = ORIENTED_EDGE('',*,*,#17127,.T.); +#19653 = ORIENTED_EDGE('',*,*,#19639,.F.); +#19654 = ORIENTED_EDGE('',*,*,#19655,.T.); +#19655 = EDGE_CURVE('',#19632,#19656,#19658,.T.); +#19656 = VERTEX_POINT('',#19657); +#19657 = CARTESIAN_POINT('',(36.895281078819,103.31756856395, + 124.07467978488)); +#19658 = LINE('',#19659,#19660); +#19659 = CARTESIAN_POINT('',(36.977475655655,103.13245492989, + 124.64440096894)); +#19660 = VECTOR('',#19661,1.); +#19661 = DIRECTION('',(-0.135936774866,0.306148548559,-0.94222834783)); +#19662 = ORIENTED_EDGE('',*,*,#19663,.T.); +#19663 = EDGE_CURVE('',#19656,#17128,#19664,.T.); +#19664 = LINE('',#19665,#19666); +#19665 = CARTESIAN_POINT('',(36.895281078819,103.31756856395, + 124.07467978488)); +#19666 = VECTOR('',#19667,1.); +#19667 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19668 = PLANE('',#19669); +#19669 = AXIS2_PLACEMENT_3D('',#19670,#19671,#19672); +#19670 = CARTESIAN_POINT('',(36.977475655655,103.13245492989, + 124.64440096894)); +#19671 = DIRECTION('',(-0.99071751435,-4.200677359407E-02,0.12928355554) + ); +#19672 = DIRECTION('',(0.135936774866,-0.306148548559,0.94222834783)); +#19673 = ADVANCED_FACE('',(#19674),#19692,.T.); +#19674 = FACE_BOUND('',#19675,.T.); +#19675 = EDGE_LOOP('',(#19676,#19677,#19678,#19686)); +#19676 = ORIENTED_EDGE('',*,*,#17135,.T.); +#19677 = ORIENTED_EDGE('',*,*,#19663,.F.); +#19678 = ORIENTED_EDGE('',*,*,#19679,.T.); +#19679 = EDGE_CURVE('',#19656,#19680,#19682,.T.); +#19680 = VERTEX_POINT('',#19681); +#19681 = CARTESIAN_POINT('',(37.061540655655,103.57958305268, + 123.26828210642)); +#19682 = LINE('',#19683,#19684); +#19683 = CARTESIAN_POINT('',(36.895281078819,103.31756856395, + 124.07467978488)); +#19684 = VECTOR('',#19685,1.); +#19685 = DIRECTION('',(0.192420392753,0.303242266027,-0.933283729928)); +#19686 = ORIENTED_EDGE('',*,*,#19687,.T.); +#19687 = EDGE_CURVE('',#19680,#17136,#19688,.T.); +#19688 = LINE('',#19689,#19690); +#19689 = CARTESIAN_POINT('',(37.061540655655,103.57958305268, + 123.26828210642)); +#19690 = VECTOR('',#19691,1.); +#19691 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19692 = PLANE('',#19693); +#19693 = AXIS2_PLACEMENT_3D('',#19694,#19695,#19696); +#19694 = CARTESIAN_POINT('',(36.895281078819,103.31756856395, + 124.07467978488)); +#19695 = DIRECTION('',(-0.981312586515,5.946117142492E-02, + -0.183002668396)); +#19696 = DIRECTION('',(-0.192420392753,-0.303242266027,0.933283729928)); +#19697 = ADVANCED_FACE('',(#19698),#19716,.T.); +#19698 = FACE_BOUND('',#19699,.T.); +#19699 = EDGE_LOOP('',(#19700,#19701,#19702,#19710)); +#19700 = ORIENTED_EDGE('',*,*,#17143,.T.); +#19701 = ORIENTED_EDGE('',*,*,#19687,.F.); +#19702 = ORIENTED_EDGE('',*,*,#19703,.T.); +#19703 = EDGE_CURVE('',#19680,#19704,#19706,.T.); +#19704 = VERTEX_POINT('',#19705); +#19705 = CARTESIAN_POINT('',(37.623780655655,103.86404277553, + 122.39280510042)); +#19706 = LINE('',#19707,#19708); +#19707 = CARTESIAN_POINT('',(37.061540655655,103.57958305268, + 123.26828210642)); +#19708 = VECTOR('',#19709,1.); +#19709 = DIRECTION('',(0.521242956754,0.263717677531,-0.8116395546)); +#19710 = ORIENTED_EDGE('',*,*,#19711,.T.); +#19711 = EDGE_CURVE('',#19704,#17144,#19712,.T.); +#19712 = LINE('',#19713,#19714); +#19713 = CARTESIAN_POINT('',(37.623780655655,103.86404277553, + 122.39280510042)); +#19714 = VECTOR('',#19715,1.); +#19715 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19716 = PLANE('',#19717); +#19717 = AXIS2_PLACEMENT_3D('',#19718,#19719,#19720); +#19718 = CARTESIAN_POINT('',(37.061540655655,103.57958305268, + 123.26828210642)); +#19719 = DIRECTION('',(-0.85340833136,0.161072931835,-0.495731510594)); +#19720 = DIRECTION('',(-0.521242956754,-0.263717677531,0.8116395546)); +#19721 = ADVANCED_FACE('',(#19722),#19742,.T.); +#19722 = FACE_BOUND('',#19723,.T.); +#19723 = EDGE_LOOP('',(#19724,#19725,#19726,#19736)); +#19724 = ORIENTED_EDGE('',*,*,#17151,.T.); +#19725 = ORIENTED_EDGE('',*,*,#19711,.F.); +#19726 = ORIENTED_EDGE('',*,*,#19727,.T.); +#19727 = EDGE_CURVE('',#19704,#19728,#19730,.T.); +#19728 = VERTEX_POINT('',#19729); +#19729 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19730 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19731,#19732,#19733,#19734, + #19735),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.75,1.),.UNSPECIFIED.); +#19731 = CARTESIAN_POINT('',(37.623780655655,103.86404277553, + 122.39280510042)); +#19732 = CARTESIAN_POINT('',(37.907655655655,103.96113375204, + 122.09398980039)); +#19733 = CARTESIAN_POINT('',(38.286155655655,104.09058838739, + 121.69556940036)); +#19734 = CARTESIAN_POINT('',(38.664655655655,104.22004302275, + 121.29714900033)); +#19735 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19736 = ORIENTED_EDGE('',*,*,#19737,.T.); +#19737 = EDGE_CURVE('',#19728,#17152,#19738,.T.); +#19738 = LINE('',#19739,#19740); +#19739 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19740 = VECTOR('',#19741,1.); +#19741 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19742 = SURFACE_OF_LINEAR_EXTRUSION('',#19743,#19749); +#19743 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19744,#19745,#19746,#19747, + #19748),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.75,1.),.UNSPECIFIED.); +#19744 = CARTESIAN_POINT('',(37.623780655655,103.86404277553, + 122.39280510042)); +#19745 = CARTESIAN_POINT('',(37.907655655655,103.96113375204, + 122.09398980039)); +#19746 = CARTESIAN_POINT('',(38.286155655655,104.09058838739, + 121.69556940036)); +#19747 = CARTESIAN_POINT('',(38.664655655655,104.22004302275, + 121.29714900033)); +#19748 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19749 = VECTOR('',#19750,1.); +#19750 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19751 = ADVANCED_FACE('',(#19752),#19772,.T.); +#19752 = FACE_BOUND('',#19753,.T.); +#19753 = EDGE_LOOP('',(#19754,#19755,#19756,#19766)); +#19754 = ORIENTED_EDGE('',*,*,#17163,.T.); +#19755 = ORIENTED_EDGE('',*,*,#19737,.F.); +#19756 = ORIENTED_EDGE('',*,*,#19757,.T.); +#19757 = EDGE_CURVE('',#19728,#19758,#19760,.T.); +#19758 = VERTEX_POINT('',#19759); +#19759 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19760 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19761,#19762,#19763,#19764, + #19765),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.25,1.),.UNSPECIFIED.); +#19761 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19762 = CARTESIAN_POINT('',(38.918780629625,104.30293940663, + 121.04202016436)); +#19763 = CARTESIAN_POINT('',(39.556780525505,104.50507030681, + 120.41992522052)); +#19764 = CARTESIAN_POINT('',(40.194780421386,104.70720120699, + 119.79783027669)); +#19765 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19766 = ORIENTED_EDGE('',*,*,#19767,.T.); +#19767 = EDGE_CURVE('',#19758,#17164,#19768,.T.); +#19768 = LINE('',#19769,#19770); +#19769 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19770 = VECTOR('',#19771,1.); +#19771 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19772 = SURFACE_OF_LINEAR_EXTRUSION('',#19773,#19779); +#19773 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19774,#19775,#19776,#19777, + #19778),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.25,1.),.UNSPECIFIED.); +#19774 = CARTESIAN_POINT('',(38.761698791177,104.25169880569, + 121.19972251832)); +#19775 = CARTESIAN_POINT('',(38.918780629625,104.30293940663, + 121.04202016436)); +#19776 = CARTESIAN_POINT('',(39.556780525505,104.50507030681, + 120.41992522052)); +#19777 = CARTESIAN_POINT('',(40.194780421386,104.70720120699, + 119.79783027669)); +#19778 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19779 = VECTOR('',#19780,1.); +#19780 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19781 = ADVANCED_FACE('',(#19782),#19800,.T.); +#19782 = FACE_BOUND('',#19783,.T.); +#19783 = EDGE_LOOP('',(#19784,#19785,#19786,#19794)); +#19784 = ORIENTED_EDGE('',*,*,#17174,.T.); +#19785 = ORIENTED_EDGE('',*,*,#19767,.F.); +#19786 = ORIENTED_EDGE('',*,*,#19787,.T.); +#19787 = EDGE_CURVE('',#19758,#19788,#19790,.T.); +#19788 = VERTEX_POINT('',#19789); +#19789 = CARTESIAN_POINT('',(36.763880655655,104.85879938212, + 119.33125906881)); +#19790 = LINE('',#19791,#19792); +#19791 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19792 = VECTOR('',#19793,1.); +#19793 = DIRECTION('',(-1.,0.,0.)); +#19794 = ORIENTED_EDGE('',*,*,#19795,.T.); +#19795 = EDGE_CURVE('',#19788,#17175,#19796,.T.); +#19796 = LINE('',#19797,#19798); +#19797 = CARTESIAN_POINT('',(36.763880655655,104.85879938212, + 119.33125906881)); +#19798 = VECTOR('',#19799,1.); +#19799 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19800 = PLANE('',#19801); +#19801 = AXIS2_PLACEMENT_3D('',#19802,#19803,#19804); +#19802 = CARTESIAN_POINT('',(40.673280343296,104.85879938212, + 119.33125906881)); +#19803 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#19804 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#19805 = ADVANCED_FACE('',(#19806),#19824,.T.); +#19806 = FACE_BOUND('',#19807,.T.); +#19807 = EDGE_LOOP('',(#19808,#19809,#19810,#19818)); +#19808 = ORIENTED_EDGE('',*,*,#17182,.T.); +#19809 = ORIENTED_EDGE('',*,*,#19795,.F.); +#19810 = ORIENTED_EDGE('',*,*,#19811,.T.); +#19811 = EDGE_CURVE('',#19788,#19812,#19814,.T.); +#19812 = VERTEX_POINT('',#19813); +#19813 = CARTESIAN_POINT('',(36.763880655655,105.13133568424, + 118.49247857849)); +#19814 = LINE('',#19815,#19816); +#19815 = CARTESIAN_POINT('',(36.763880655655,104.85879938212, + 119.33125906881)); +#19816 = VECTOR('',#19817,1.); +#19817 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#19818 = ORIENTED_EDGE('',*,*,#19819,.T.); +#19819 = EDGE_CURVE('',#19812,#17183,#19820,.T.); +#19820 = LINE('',#19821,#19822); +#19821 = CARTESIAN_POINT('',(36.763880655655,105.13133568424, + 118.49247857849)); +#19822 = VECTOR('',#19823,1.); +#19823 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19824 = PLANE('',#19825); +#19825 = AXIS2_PLACEMENT_3D('',#19826,#19827,#19828); +#19826 = CARTESIAN_POINT('',(36.763880655655,104.85879938212, + 119.33125906881)); +#19827 = DIRECTION('',(-1.,0.,0.)); +#19828 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#19829 = ADVANCED_FACE('',(#19830),#19848,.T.); +#19830 = FACE_BOUND('',#19831,.T.); +#19831 = EDGE_LOOP('',(#19832,#19833,#19834,#19842)); +#19832 = ORIENTED_EDGE('',*,*,#17190,.T.); +#19833 = ORIENTED_EDGE('',*,*,#19819,.F.); +#19834 = ORIENTED_EDGE('',*,*,#19835,.T.); +#19835 = EDGE_CURVE('',#19812,#19836,#19838,.T.); +#19836 = VERTEX_POINT('',#19837); +#19837 = CARTESIAN_POINT('',(42.011460655655,105.13133475719, + 118.49248143166)); +#19838 = LINE('',#19839,#19840); +#19839 = CARTESIAN_POINT('',(36.763880655655,105.13133568424, + 118.49247857849)); +#19840 = VECTOR('',#19841,1.); +#19841 = DIRECTION('',(1.,-1.766625709489E-07,5.437114862443E-07)); +#19842 = ORIENTED_EDGE('',*,*,#19843,.T.); +#19843 = EDGE_CURVE('',#19836,#17191,#19844,.T.); +#19844 = LINE('',#19845,#19846); +#19845 = CARTESIAN_POINT('',(42.011460655655,105.13133475719, + 118.49248143166)); +#19846 = VECTOR('',#19847,1.); +#19847 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19848 = PLANE('',#19849); +#19849 = AXIS2_PLACEMENT_3D('',#19850,#19851,#19852); +#19850 = CARTESIAN_POINT('',(36.763880655655,105.13133568424, + 118.49247857849)); +#19851 = DIRECTION('',(5.716920886704E-07,0.309016994375,-0.951056516295 + )); +#19852 = DIRECTION('',(-1.,1.766625709454E-07,-5.437114862455E-07)); +#19853 = ADVANCED_FACE('',(#19854),#19872,.T.); +#19854 = FACE_BOUND('',#19855,.T.); +#19855 = EDGE_LOOP('',(#19856,#19857,#19858,#19866)); +#19856 = ORIENTED_EDGE('',*,*,#17198,.T.); +#19857 = ORIENTED_EDGE('',*,*,#19843,.F.); +#19858 = ORIENTED_EDGE('',*,*,#19859,.T.); +#19859 = EDGE_CURVE('',#19836,#19860,#19862,.T.); +#19860 = VERTEX_POINT('',#19861); +#19861 = CARTESIAN_POINT('',(42.011460655655,104.9201191694, + 119.142536169)); +#19862 = LINE('',#19863,#19864); +#19863 = CARTESIAN_POINT('',(42.011460655655,105.13133475719, + 118.49248143166)); +#19864 = VECTOR('',#19865,1.); +#19865 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#19866 = ORIENTED_EDGE('',*,*,#19867,.T.); +#19867 = EDGE_CURVE('',#19860,#17199,#19868,.T.); +#19868 = LINE('',#19869,#19870); +#19869 = CARTESIAN_POINT('',(42.011460655655,104.9201191694, + 119.142536169)); +#19870 = VECTOR('',#19871,1.); +#19871 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19872 = PLANE('',#19873); +#19873 = AXIS2_PLACEMENT_3D('',#19874,#19875,#19876); +#19874 = CARTESIAN_POINT('',(42.011460655655,105.13133475719, + 118.49248143166)); +#19875 = DIRECTION('',(1.,0.,0.)); +#19876 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#19877 = ADVANCED_FACE('',(#19878),#19898,.T.); +#19878 = FACE_BOUND('',#19879,.T.); +#19879 = EDGE_LOOP('',(#19880,#19881,#19882,#19892)); +#19880 = ORIENTED_EDGE('',*,*,#17206,.T.); +#19881 = ORIENTED_EDGE('',*,*,#19867,.F.); +#19882 = ORIENTED_EDGE('',*,*,#19883,.T.); +#19883 = EDGE_CURVE('',#19860,#19884,#19886,.T.); +#19884 = VERTEX_POINT('',#19885); +#19885 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19886 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19887,#19888,#19889,#19890, + #19891),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.875,1.),.UNSPECIFIED.); +#19887 = CARTESIAN_POINT('',(42.011460655655,104.9201191694, + 119.142536169)); +#19888 = CARTESIAN_POINT('',(41.194741488988,104.6568095482, + 119.95291985535)); +#19889 = CARTESIAN_POINT('',(40.261348155655,104.35588426683, + 120.87907263974)); +#19890 = CARTESIAN_POINT('',(39.327954822322,104.05495898546, + 121.80522542414)); +#19891 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19892 = ORIENTED_EDGE('',*,*,#19893,.T.); +#19893 = EDGE_CURVE('',#19884,#17207,#19894,.T.); +#19894 = LINE('',#19895,#19896); +#19895 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19896 = VECTOR('',#19897,1.); +#19897 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19898 = SURFACE_OF_LINEAR_EXTRUSION('',#19899,#19905); +#19899 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19900,#19901,#19902,#19903, + #19904),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.875,1.),.UNSPECIFIED.); +#19900 = CARTESIAN_POINT('',(42.011460655655,104.9201191694, + 119.142536169)); +#19901 = CARTESIAN_POINT('',(41.194741488988,104.6568095482, + 119.95291985535)); +#19902 = CARTESIAN_POINT('',(40.261348155655,104.35588426683, + 120.87907263974)); +#19903 = CARTESIAN_POINT('',(39.327954822322,104.05495898546, + 121.80522542414)); +#19904 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19905 = VECTOR('',#19906,1.); +#19906 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19907 = ADVANCED_FACE('',(#19908),#19928,.T.); +#19908 = FACE_BOUND('',#19909,.T.); +#19909 = EDGE_LOOP('',(#19910,#19911,#19912,#19922)); +#19910 = ORIENTED_EDGE('',*,*,#17219,.T.); +#19911 = ORIENTED_EDGE('',*,*,#19893,.F.); +#19912 = ORIENTED_EDGE('',*,*,#19913,.T.); +#19913 = EDGE_CURVE('',#19884,#19914,#19916,.T.); +#19914 = VERTEX_POINT('',#19915); +#19915 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19916 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19917,#19918,#19919,#19920, + #19921),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#19917 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19918 = CARTESIAN_POINT('',(39.074395655655,103.96964953937, + 122.06778090193)); +#19919 = CARTESIAN_POINT('',(38.800625655655,103.87426196753, + 122.36135366142)); +#19920 = CARTESIAN_POINT('',(38.526855655655,103.7788743957, + 122.65492642091)); +#19921 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19922 = ORIENTED_EDGE('',*,*,#19923,.T.); +#19923 = EDGE_CURVE('',#19914,#17220,#19924,.T.); +#19924 = LINE('',#19925,#19926); +#19925 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19926 = VECTOR('',#19927,1.); +#19927 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19928 = SURFACE_OF_LINEAR_EXTRUSION('',#19929,#19935); +#19929 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#19930,#19931,#19932,#19933, + #19934),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#19930 = CARTESIAN_POINT('',(39.213923239659,104.01659330031, + 121.9233028617)); +#19931 = CARTESIAN_POINT('',(39.074395655655,103.96964953937, + 122.06778090193)); +#19932 = CARTESIAN_POINT('',(38.800625655655,103.87426196753, + 122.36135366142)); +#19933 = CARTESIAN_POINT('',(38.526855655655,103.7788743957, + 122.65492642091)); +#19934 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19935 = VECTOR('',#19936,1.); +#19936 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19937 = ADVANCED_FACE('',(#19938),#19956,.T.); +#19938 = FACE_BOUND('',#19939,.T.); +#19939 = EDGE_LOOP('',(#19940,#19941,#19942,#19950)); +#19940 = ORIENTED_EDGE('',*,*,#17229,.T.); +#19941 = ORIENTED_EDGE('',*,*,#19923,.F.); +#19942 = ORIENTED_EDGE('',*,*,#19943,.T.); +#19943 = EDGE_CURVE('',#19914,#19944,#19946,.T.); +#19944 = VERTEX_POINT('',#19945); +#19945 = CARTESIAN_POINT('',(37.998610655655,103.5267785377, + 123.43079769287)); +#19946 = LINE('',#19947,#19948); +#19947 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19948 = VECTOR('',#19949,1.); +#19949 = DIRECTION('',(-0.509209367096,-0.265953213814,0.818519827813)); +#19950 = ORIENTED_EDGE('',*,*,#19951,.T.); +#19951 = EDGE_CURVE('',#19944,#17230,#19952,.T.); +#19952 = LINE('',#19953,#19954); +#19953 = CARTESIAN_POINT('',(37.998610655655,103.5267785377, + 123.43079769287)); +#19954 = VECTOR('',#19955,1.); +#19955 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19956 = PLANE('',#19957); +#19957 = AXIS2_PLACEMENT_3D('',#19958,#19959,#19960); +#19958 = CARTESIAN_POINT('',(38.389970655655,103.73118060978, + 122.80171280065)); +#19959 = DIRECTION('',(0.860642678736,-0.157354348128,0.484286886735)); +#19960 = DIRECTION('',(0.509209367096,0.265953213814,-0.818519827813)); +#19961 = ADVANCED_FACE('',(#19962),#19980,.T.); +#19962 = FACE_BOUND('',#19963,.T.); +#19963 = EDGE_LOOP('',(#19964,#19965,#19966,#19974)); +#19964 = ORIENTED_EDGE('',*,*,#17237,.T.); +#19965 = ORIENTED_EDGE('',*,*,#19951,.F.); +#19966 = ORIENTED_EDGE('',*,*,#19967,.T.); +#19967 = EDGE_CURVE('',#19944,#19968,#19970,.T.); +#19968 = VERTEX_POINT('',#19969); +#19969 = CARTESIAN_POINT('',(37.887187368812,103.33225151746, + 124.02949030058)); +#19970 = LINE('',#19971,#19972); +#19971 = CARTESIAN_POINT('',(37.998610655655,103.5267785377, + 123.43079769287)); +#19972 = VECTOR('',#19973,1.); +#19973 = DIRECTION('',(-0.174292871275,-0.304287136542,0.936499510709)); +#19974 = ORIENTED_EDGE('',*,*,#19975,.T.); +#19975 = EDGE_CURVE('',#19968,#17238,#19976,.T.); +#19976 = LINE('',#19977,#19978); +#19977 = CARTESIAN_POINT('',(37.887187368812,103.33225151746, + 124.02949030058)); +#19978 = VECTOR('',#19979,1.); +#19979 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#19980 = PLANE('',#19981); +#19981 = AXIS2_PLACEMENT_3D('',#19982,#19983,#19984); +#19982 = CARTESIAN_POINT('',(37.998610655655,103.5267785377, + 123.43079769287)); +#19983 = DIRECTION('',(0.984693858528,-5.385945922246E-02,0.16576237097) + ); +#19984 = DIRECTION('',(0.174292871275,0.304287136542,-0.936499510709)); +#19985 = ADVANCED_FACE('',(#19986),#20004,.T.); +#19986 = FACE_BOUND('',#19987,.T.); +#19987 = EDGE_LOOP('',(#19988,#19989,#19990,#19998)); +#19988 = ORIENTED_EDGE('',*,*,#17245,.T.); +#19989 = ORIENTED_EDGE('',*,*,#19975,.F.); +#19990 = ORIENTED_EDGE('',*,*,#19991,.T.); +#19991 = EDGE_CURVE('',#19968,#19992,#19994,.T.); +#19992 = VERTEX_POINT('',#19993); +#19993 = CARTESIAN_POINT('',(38.081290655655,103.10775581956, + 124.72041701417)); +#19994 = LINE('',#19995,#19996); +#19995 = CARTESIAN_POINT('',(37.887187368812,103.33225151746, + 124.02949030058)); +#19996 = VECTOR('',#19997,1.); +#19997 = DIRECTION('',(0.258127455384,-0.298544677863,0.918826040171)); +#19998 = ORIENTED_EDGE('',*,*,#19999,.T.); +#19999 = EDGE_CURVE('',#19992,#17246,#20000,.T.); +#20000 = LINE('',#20001,#20002); +#20001 = CARTESIAN_POINT('',(38.081290655655,103.10775581956, + 124.72041701417)); +#20002 = VECTOR('',#20003,1.); +#20003 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20004 = PLANE('',#20005); +#20005 = AXIS2_PLACEMENT_3D('',#20006,#20007,#20008); +#20006 = CARTESIAN_POINT('',(37.887187368812,103.33225151746, + 124.02949030058)); +#20007 = DIRECTION('',(0.966110871886,7.976577042838E-02,-0.245493798478 + )); +#20008 = DIRECTION('',(-0.258127455384,0.298544677863,-0.918826040171)); +#20009 = ADVANCED_FACE('',(#20010),#20028,.T.); +#20010 = FACE_BOUND('',#20011,.T.); +#20011 = EDGE_LOOP('',(#20012,#20013,#20014,#20022)); +#20012 = ORIENTED_EDGE('',*,*,#17253,.T.); +#20013 = ORIENTED_EDGE('',*,*,#19999,.F.); +#20014 = ORIENTED_EDGE('',*,*,#20015,.T.); +#20015 = EDGE_CURVE('',#19992,#20016,#20018,.T.); +#20016 = VERTEX_POINT('',#20017); +#20017 = CARTESIAN_POINT('',(38.604940655655,102.95615733541, + 125.1869891731)); +#20018 = LINE('',#20019,#20020); +#20019 = CARTESIAN_POINT('',(38.081290655655,103.10775581956, + 124.72041701417)); +#20020 = VECTOR('',#20021,1.); +#20021 = DIRECTION('',(0.729772802603,-0.211271747636,0.650227579569)); +#20022 = ORIENTED_EDGE('',*,*,#20023,.T.); +#20023 = EDGE_CURVE('',#20016,#17254,#20024,.T.); +#20024 = LINE('',#20025,#20026); +#20025 = CARTESIAN_POINT('',(38.604940655655,102.95615733541, + 125.1869891731)); +#20026 = VECTOR('',#20027,1.); +#20027 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20028 = PLANE('',#20029); +#20029 = AXIS2_PLACEMENT_3D('',#20030,#20031,#20032); +#20030 = CARTESIAN_POINT('',(38.081290655655,103.10775581956, + 124.72041701417)); +#20031 = DIRECTION('',(0.683689737075,0.225512198037,-0.69405517933)); +#20032 = DIRECTION('',(-0.729772802603,0.211271747636,-0.650227579569)); +#20033 = ADVANCED_FACE('',(#20034),#20052,.T.); +#20034 = FACE_BOUND('',#20035,.T.); +#20035 = EDGE_LOOP('',(#20036,#20037,#20038,#20046)); +#20036 = ORIENTED_EDGE('',*,*,#17261,.T.); +#20037 = ORIENTED_EDGE('',*,*,#20023,.F.); +#20038 = ORIENTED_EDGE('',*,*,#20039,.T.); +#20039 = EDGE_CURVE('',#20016,#20040,#20042,.T.); +#20040 = VERTEX_POINT('',#20041); +#20041 = CARTESIAN_POINT('',(39.371130655655,102.89994683512, + 125.35998730447)); +#20042 = LINE('',#20043,#20044); +#20043 = CARTESIAN_POINT('',(38.604940655655,102.95615733541, + 125.1869891731)); +#20044 = VECTOR('',#20045,1.); +#20045 = DIRECTION('',(0.972956281604,-7.137963083954E-02,0.219683914724 + )); +#20046 = ORIENTED_EDGE('',*,*,#20047,.T.); +#20047 = EDGE_CURVE('',#20040,#17262,#20048,.T.); +#20048 = LINE('',#20049,#20050); +#20049 = CARTESIAN_POINT('',(39.371130655655,102.89994683512, + 125.35998730447)); +#20050 = VECTOR('',#20051,1.); +#20051 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20052 = PLANE('',#20053); +#20053 = AXIS2_PLACEMENT_3D('',#20054,#20055,#20056); +#20054 = CARTESIAN_POINT('',(38.604940655655,102.95615733541, + 125.1869891731)); +#20055 = DIRECTION('',(0.230989337606,0.300660025799,-0.92533641169)); +#20056 = DIRECTION('',(-0.972956281604,7.137963083954E-02, + -0.219683914724)); +#20057 = ADVANCED_FACE('',(#20058),#20076,.T.); +#20058 = FACE_BOUND('',#20059,.T.); +#20059 = EDGE_LOOP('',(#20060,#20061,#20062,#20070)); +#20060 = ORIENTED_EDGE('',*,*,#17269,.T.); +#20061 = ORIENTED_EDGE('',*,*,#20047,.F.); +#20062 = ORIENTED_EDGE('',*,*,#20063,.T.); +#20063 = EDGE_CURVE('',#20040,#20064,#20066,.T.); +#20064 = VERTEX_POINT('',#20065); +#20065 = CARTESIAN_POINT('',(40.258590655655,102.96467415279, + 125.16077710446)); +#20066 = LINE('',#20067,#20068); +#20067 = CARTESIAN_POINT('',(39.371130655655,102.89994683512, + 125.35998730447)); +#20068 = VECTOR('',#20069,1.); +#20069 = DIRECTION('',(0.973258524764,7.09850739335E-02,-0.21846959343) + ); +#20070 = ORIENTED_EDGE('',*,*,#20071,.T.); +#20071 = EDGE_CURVE('',#20064,#17270,#20072,.T.); +#20072 = LINE('',#20073,#20074); +#20073 = CARTESIAN_POINT('',(40.258590655655,102.96467415279, + 125.16077710446)); +#20074 = VECTOR('',#20075,1.); +#20075 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20076 = PLANE('',#20077); +#20077 = AXIS2_PLACEMENT_3D('',#20078,#20079,#20080); +#20078 = CARTESIAN_POINT('',(39.371130655655,102.89994683512, + 125.35998730447)); +#20079 = DIRECTION('',(-0.229712524637,0.300753424072,-0.925623862016)); +#20080 = DIRECTION('',(-0.973258524764,-7.09850739335E-02,0.21846959343) + ); +#20081 = ADVANCED_FACE('',(#20082),#20100,.T.); +#20082 = FACE_BOUND('',#20083,.T.); +#20083 = EDGE_LOOP('',(#20084,#20085,#20086,#20094)); +#20084 = ORIENTED_EDGE('',*,*,#17277,.T.); +#20085 = ORIENTED_EDGE('',*,*,#20071,.F.); +#20086 = ORIENTED_EDGE('',*,*,#20087,.T.); +#20087 = EDGE_CURVE('',#20064,#20088,#20090,.T.); +#20088 = VERTEX_POINT('',#20089); +#20089 = CARTESIAN_POINT('',(40.875950655655,103.13500926437, + 124.63653953577)); +#20090 = LINE('',#20091,#20092); +#20091 = CARTESIAN_POINT('',(40.258590655655,102.96467415279, + 125.16077710446)); +#20092 = VECTOR('',#20093,1.); +#20093 = DIRECTION('',(0.745936632582,0.205810547389,-0.633419733476)); +#20094 = ORIENTED_EDGE('',*,*,#20095,.T.); +#20095 = EDGE_CURVE('',#20088,#17278,#20096,.T.); +#20096 = LINE('',#20097,#20098); +#20097 = CARTESIAN_POINT('',(40.875950655655,103.13500926437, + 124.63653953577)); +#20098 = VECTOR('',#20099,1.); +#20099 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20100 = PLANE('',#20101); +#20101 = AXIS2_PLACEMENT_3D('',#20102,#20103,#20104); +#20102 = CARTESIAN_POINT('',(40.258590655655,102.96467415279, + 125.16077710446)); +#20103 = DIRECTION('',(-0.666016921837,0.230507096195,-0.70942789516)); +#20104 = DIRECTION('',(-0.745936632582,-0.205810547389,0.633419733476)); +#20105 = ADVANCED_FACE('',(#20106),#20124,.T.); +#20106 = FACE_BOUND('',#20107,.T.); +#20107 = EDGE_LOOP('',(#20108,#20109,#20110,#20118)); +#20108 = ORIENTED_EDGE('',*,*,#17285,.T.); +#20109 = ORIENTED_EDGE('',*,*,#20095,.F.); +#20110 = ORIENTED_EDGE('',*,*,#20111,.T.); +#20111 = EDGE_CURVE('',#20088,#20112,#20114,.T.); +#20112 = VERTEX_POINT('',#20113); +#20113 = CARTESIAN_POINT('',(41.101950655655,103.37518159863, + 123.89736509652)); +#20114 = LINE('',#20115,#20116); +#20115 = CARTESIAN_POINT('',(40.875950655655,103.13500926437, + 124.63653953577)); +#20116 = VECTOR('',#20117,1.); +#20117 = DIRECTION('',(0.279217205267,0.296726760868,-0.913231066964)); +#20118 = ORIENTED_EDGE('',*,*,#20119,.T.); +#20119 = EDGE_CURVE('',#20112,#17286,#20120,.T.); +#20120 = LINE('',#20121,#20122); +#20121 = CARTESIAN_POINT('',(41.101950655655,103.37518159863, + 123.89736509652)); +#20122 = VECTOR('',#20123,1.); +#20123 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20124 = PLANE('',#20125); +#20125 = AXIS2_PLACEMENT_3D('',#20126,#20127,#20128); +#20126 = CARTESIAN_POINT('',(40.875950655655,103.13500926437, + 124.63653953577)); +#20127 = DIRECTION('',(-0.960227968913,8.628286154937E-02, + -0.265551342531)); +#20128 = DIRECTION('',(-0.279217205267,-0.296726760868,0.913231066964)); +#20129 = ADVANCED_FACE('',(#20130),#20148,.T.); +#20130 = FACE_BOUND('',#20131,.T.); +#20131 = EDGE_LOOP('',(#20132,#20133,#20134,#20142)); +#20132 = ORIENTED_EDGE('',*,*,#17293,.T.); +#20133 = ORIENTED_EDGE('',*,*,#20119,.F.); +#20134 = ORIENTED_EDGE('',*,*,#20135,.T.); +#20135 = EDGE_CURVE('',#20112,#20136,#20138,.T.); +#20136 = VERTEX_POINT('',#20137); +#20137 = CARTESIAN_POINT('',(41.101950655655,103.383698107, + 123.87115397893)); +#20138 = LINE('',#20139,#20140); +#20139 = CARTESIAN_POINT('',(41.101950655655,103.37518159863, + 123.89736509652)); +#20140 = VECTOR('',#20141,1.); +#20141 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#20142 = ORIENTED_EDGE('',*,*,#20143,.T.); +#20143 = EDGE_CURVE('',#20136,#17294,#20144,.T.); +#20144 = LINE('',#20145,#20146); +#20145 = CARTESIAN_POINT('',(41.101950655655,103.383698107, + 123.87115397893)); +#20146 = VECTOR('',#20147,1.); +#20147 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20148 = PLANE('',#20149); +#20149 = AXIS2_PLACEMENT_3D('',#20150,#20151,#20152); +#20150 = CARTESIAN_POINT('',(41.101950655655,103.37518159863, + 123.89736509652)); +#20151 = DIRECTION('',(-1.,0.,0.)); +#20152 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#20153 = ADVANCED_FACE('',(#20154),#20165,.T.); +#20154 = FACE_BOUND('',#20155,.T.); +#20155 = EDGE_LOOP('',(#20156,#20157,#20158,#20164)); +#20156 = ORIENTED_EDGE('',*,*,#17301,.T.); +#20157 = ORIENTED_EDGE('',*,*,#20143,.F.); +#20158 = ORIENTED_EDGE('',*,*,#20159,.T.); +#20159 = EDGE_CURVE('',#20136,#19360,#20160,.T.); +#20160 = LINE('',#20161,#20162); +#20161 = CARTESIAN_POINT('',(41.101950655655,103.383698107, + 123.87115397893)); +#20162 = VECTOR('',#20163,1.); +#20163 = DIRECTION('',(1.,0.,0.)); +#20164 = ORIENTED_EDGE('',*,*,#19359,.T.); +#20165 = PLANE('',#20166); +#20166 = AXIS2_PLACEMENT_3D('',#20167,#20168,#20169); +#20167 = CARTESIAN_POINT('',(41.101950655655,103.383698107, + 123.87115397893)); +#20168 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#20169 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20170 = ADVANCED_FACE('',(#20171),#20206,.T.); +#20171 = FACE_BOUND('',#20172,.T.); +#20172 = EDGE_LOOP('',(#20173,#20174,#20175,#20176,#20177,#20178,#20179, + #20180,#20181,#20182,#20183,#20184,#20185,#20186,#20187,#20188, + #20189,#20190,#20191,#20192,#20193,#20194,#20195,#20196,#20197, + #20198,#20199,#20200,#20201,#20202,#20203,#20204,#20205)); +#20173 = ORIENTED_EDGE('',*,*,#19367,.F.); +#20174 = ORIENTED_EDGE('',*,*,#20159,.F.); +#20175 = ORIENTED_EDGE('',*,*,#20135,.F.); +#20176 = ORIENTED_EDGE('',*,*,#20111,.F.); +#20177 = ORIENTED_EDGE('',*,*,#20087,.F.); +#20178 = ORIENTED_EDGE('',*,*,#20063,.F.); +#20179 = ORIENTED_EDGE('',*,*,#20039,.F.); +#20180 = ORIENTED_EDGE('',*,*,#20015,.F.); +#20181 = ORIENTED_EDGE('',*,*,#19991,.F.); +#20182 = ORIENTED_EDGE('',*,*,#19967,.F.); +#20183 = ORIENTED_EDGE('',*,*,#19943,.F.); +#20184 = ORIENTED_EDGE('',*,*,#19913,.F.); +#20185 = ORIENTED_EDGE('',*,*,#19883,.F.); +#20186 = ORIENTED_EDGE('',*,*,#19859,.F.); +#20187 = ORIENTED_EDGE('',*,*,#19835,.F.); +#20188 = ORIENTED_EDGE('',*,*,#19811,.F.); +#20189 = ORIENTED_EDGE('',*,*,#19787,.F.); +#20190 = ORIENTED_EDGE('',*,*,#19757,.F.); +#20191 = ORIENTED_EDGE('',*,*,#19727,.F.); +#20192 = ORIENTED_EDGE('',*,*,#19703,.F.); +#20193 = ORIENTED_EDGE('',*,*,#19679,.F.); +#20194 = ORIENTED_EDGE('',*,*,#19655,.F.); +#20195 = ORIENTED_EDGE('',*,*,#19631,.F.); +#20196 = ORIENTED_EDGE('',*,*,#19607,.F.); +#20197 = ORIENTED_EDGE('',*,*,#19583,.F.); +#20198 = ORIENTED_EDGE('',*,*,#19559,.F.); +#20199 = ORIENTED_EDGE('',*,*,#19535,.F.); +#20200 = ORIENTED_EDGE('',*,*,#19511,.F.); +#20201 = ORIENTED_EDGE('',*,*,#19487,.F.); +#20202 = ORIENTED_EDGE('',*,*,#19463,.F.); +#20203 = ORIENTED_EDGE('',*,*,#19439,.F.); +#20204 = ORIENTED_EDGE('',*,*,#19415,.F.); +#20205 = ORIENTED_EDGE('',*,*,#19391,.F.); +#20206 = PLANE('',#20207); +#20207 = AXIS2_PLACEMENT_3D('',#20208,#20209,#20210); +#20208 = CARTESIAN_POINT('',(38.191530655655,104.05822472856, + 121.79517450037)); +#20209 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#20210 = DIRECTION('',(-1.,0.,0.)); +#20211 = ADVANCED_FACE('',(#20212),#20246,.T.); +#20212 = FACE_BOUND('',#20213,.T.); +#20213 = EDGE_LOOP('',(#20214,#20224,#20232,#20240)); +#20214 = ORIENTED_EDGE('',*,*,#20215,.T.); +#20215 = EDGE_CURVE('',#20216,#20218,#20220,.T.); +#20216 = VERTEX_POINT('',#20217); +#20217 = CARTESIAN_POINT('',(47.666930655655,103.48531107221, + 120.32235345123)); +#20218 = VERTEX_POINT('',#20219); +#20219 = CARTESIAN_POINT('',(47.893654228686,102.95045555132, + 121.96846948265)); +#20220 = LINE('',#20221,#20222); +#20221 = CARTESIAN_POINT('',(47.893654228686,102.95045555132, + 121.96846948265)); +#20222 = VECTOR('',#20223,1.); +#20223 = DIRECTION('',(0.129881768363,-0.306399462321,0.943000580984)); +#20224 = ORIENTED_EDGE('',*,*,#20225,.F.); +#20225 = EDGE_CURVE('',#20226,#20218,#20228,.T.); +#20226 = VERTEX_POINT('',#20227); +#20227 = CARTESIAN_POINT('',(47.893654228686,103.90151206761, + 122.27748647702)); +#20228 = LINE('',#20229,#20230); +#20229 = CARTESIAN_POINT('',(47.893654228686,103.90151206761, + 122.27748647702)); +#20230 = VECTOR('',#20231,1.); +#20231 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20232 = ORIENTED_EDGE('',*,*,#20233,.T.); +#20233 = EDGE_CURVE('',#20226,#20234,#20236,.T.); +#20234 = VERTEX_POINT('',#20235); +#20235 = CARTESIAN_POINT('',(47.666930655655,104.43636758851, + 120.6313704456)); +#20236 = LINE('',#20237,#20238); +#20237 = CARTESIAN_POINT('',(47.893654228686,103.90151206761, + 122.27748647702)); +#20238 = VECTOR('',#20239,1.); +#20239 = DIRECTION('',(-0.129881768363,0.306399462321,-0.943000580984)); +#20240 = ORIENTED_EDGE('',*,*,#20241,.T.); +#20241 = EDGE_CURVE('',#20234,#20216,#20242,.T.); +#20242 = LINE('',#20243,#20244); +#20243 = CARTESIAN_POINT('',(47.666930655655,104.43636758851, + 120.6313704456)); +#20244 = VECTOR('',#20245,1.); +#20245 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20246 = PLANE('',#20247); +#20247 = AXIS2_PLACEMENT_3D('',#20248,#20249,#20250); +#20248 = CARTESIAN_POINT('',(47.893654228686,103.90151206761, + 122.27748647702)); +#20249 = DIRECTION('',(-0.99152948834,-4.01356736835E-02,0.123524902149) + ); +#20250 = DIRECTION('',(0.129881768363,-0.306399462321,0.943000580984)); +#20251 = ADVANCED_FACE('',(#20252),#20277,.T.); +#20252 = FACE_BOUND('',#20253,.T.); +#20253 = EDGE_LOOP('',(#20254,#20262,#20263,#20271)); +#20254 = ORIENTED_EDGE('',*,*,#20255,.T.); +#20255 = EDGE_CURVE('',#20256,#20216,#20258,.T.); +#20256 = VERTEX_POINT('',#20257); +#20257 = CARTESIAN_POINT('',(47.389943655655,103.68460323927, + 119.70899522957)); +#20258 = LINE('',#20259,#20260); +#20259 = CARTESIAN_POINT('',(47.666930655655,103.48531107221, + 120.32235345123)); +#20260 = VECTOR('',#20261,1.); +#20261 = DIRECTION('',(0.394631053002,-0.283937071932,0.873868451879)); +#20262 = ORIENTED_EDGE('',*,*,#20241,.F.); +#20263 = ORIENTED_EDGE('',*,*,#20264,.T.); +#20264 = EDGE_CURVE('',#20234,#20265,#20267,.T.); +#20265 = VERTEX_POINT('',#20266); +#20266 = CARTESIAN_POINT('',(47.389943655655,104.63565975557, + 120.01801222394)); +#20267 = LINE('',#20268,#20269); +#20268 = CARTESIAN_POINT('',(47.666930655655,104.43636758851, + 120.6313704456)); +#20269 = VECTOR('',#20270,1.); +#20270 = DIRECTION('',(-0.394631053002,0.283937071932,-0.873868451879)); +#20271 = ORIENTED_EDGE('',*,*,#20272,.T.); +#20272 = EDGE_CURVE('',#20265,#20256,#20273,.T.); +#20273 = LINE('',#20274,#20275); +#20274 = CARTESIAN_POINT('',(47.389943655655,104.63565975557, + 120.01801222394)); +#20275 = VECTOR('',#20276,1.); +#20276 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20277 = PLANE('',#20278); +#20278 = AXIS2_PLACEMENT_3D('',#20279,#20280,#20281); +#20279 = CARTESIAN_POINT('',(47.666930655655,104.43636758851, + 120.6313704456)); +#20280 = DIRECTION('',(-0.918839666104,-0.121947701886,0.37531643449)); +#20281 = DIRECTION('',(0.394631053002,-0.283937071932,0.873868451879)); +#20282 = ADVANCED_FACE('',(#20283),#20308,.T.); +#20283 = FACE_BOUND('',#20284,.T.); +#20284 = EDGE_LOOP('',(#20285,#20293,#20294,#20302)); +#20285 = ORIENTED_EDGE('',*,*,#20286,.T.); +#20286 = EDGE_CURVE('',#20287,#20256,#20289,.T.); +#20287 = VERTEX_POINT('',#20288); +#20288 = CARTESIAN_POINT('',(47.010980655655,103.83279450205, + 119.25290941978)); +#20289 = LINE('',#20290,#20291); +#20290 = CARTESIAN_POINT('',(47.389943655655,103.68460323927, + 119.70899522957)); +#20291 = VECTOR('',#20292,1.); +#20292 = DIRECTION('',(0.620012471611,-0.242452247586,0.746191290948)); +#20293 = ORIENTED_EDGE('',*,*,#20272,.F.); +#20294 = ORIENTED_EDGE('',*,*,#20295,.T.); +#20295 = EDGE_CURVE('',#20265,#20296,#20298,.T.); +#20296 = VERTEX_POINT('',#20297); +#20297 = CARTESIAN_POINT('',(47.010980655655,104.78385101834, + 119.56192641416)); +#20298 = LINE('',#20299,#20300); +#20299 = CARTESIAN_POINT('',(47.389943655655,104.63565975557, + 120.01801222394)); +#20300 = VECTOR('',#20301,1.); +#20301 = DIRECTION('',(-0.620012471611,0.242452247586,-0.746191290948)); +#20302 = ORIENTED_EDGE('',*,*,#20303,.T.); +#20303 = EDGE_CURVE('',#20296,#20287,#20304,.T.); +#20304 = LINE('',#20305,#20306); +#20305 = CARTESIAN_POINT('',(47.010980655655,104.78385101834, + 119.56192641416)); +#20306 = VECTOR('',#20307,1.); +#20307 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20308 = PLANE('',#20309); +#20309 = AXIS2_PLACEMENT_3D('',#20310,#20311,#20312); +#20310 = CARTESIAN_POINT('',(47.389943655655,104.63565975557, + 120.01801222394)); +#20311 = DIRECTION('',(-0.784591954488,-0.191594390452,0.58966690131)); +#20312 = DIRECTION('',(0.620012471611,-0.242452247586,0.746191290948)); +#20313 = ADVANCED_FACE('',(#20314),#20339,.T.); +#20314 = FACE_BOUND('',#20315,.T.); +#20315 = EDGE_LOOP('',(#20316,#20324,#20325,#20333)); +#20316 = ORIENTED_EDGE('',*,*,#20317,.T.); +#20317 = EDGE_CURVE('',#20318,#20287,#20320,.T.); +#20318 = VERTEX_POINT('',#20319); +#20319 = CARTESIAN_POINT('',(46.536935655655,103.92349809729, + 118.97375245795)); +#20320 = LINE('',#20321,#20322); +#20321 = CARTESIAN_POINT('',(47.010980655655,103.83279450205, + 119.25290941978)); +#20322 = VECTOR('',#20323,1.); +#20323 = DIRECTION('',(0.850211707013,-0.162679194045,0.500675077354)); +#20324 = ORIENTED_EDGE('',*,*,#20303,.F.); +#20325 = ORIENTED_EDGE('',*,*,#20326,.T.); +#20326 = EDGE_CURVE('',#20296,#20327,#20329,.T.); +#20327 = VERTEX_POINT('',#20328); +#20328 = CARTESIAN_POINT('',(46.536935655655,104.87455461358, + 119.28276945233)); +#20329 = LINE('',#20330,#20331); +#20330 = CARTESIAN_POINT('',(47.010980655655,104.78385101834, + 119.56192641416)); +#20331 = VECTOR('',#20332,1.); +#20332 = DIRECTION('',(-0.850211707013,0.162679194045,-0.500675077354)); +#20333 = ORIENTED_EDGE('',*,*,#20334,.T.); +#20334 = EDGE_CURVE('',#20327,#20318,#20335,.T.); +#20335 = LINE('',#20336,#20337); +#20336 = CARTESIAN_POINT('',(46.536935655655,104.87455461358, + 119.28276945233)); +#20337 = VECTOR('',#20338,1.); +#20338 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20339 = PLANE('',#20340); +#20340 = AXIS2_PLACEMENT_3D('',#20341,#20342,#20343); +#20341 = CARTESIAN_POINT('',(47.010980655655,104.78385101834, + 119.56192641416)); +#20342 = DIRECTION('',(-0.526440930455,-0.262729866284,0.808599384185)); +#20343 = DIRECTION('',(0.850211707013,-0.162679194045,0.500675077354)); +#20344 = ADVANCED_FACE('',(#20345),#20370,.T.); +#20345 = FACE_BOUND('',#20346,.T.); +#20346 = EDGE_LOOP('',(#20347,#20355,#20356,#20364)); +#20347 = ORIENTED_EDGE('',*,*,#20348,.T.); +#20348 = EDGE_CURVE('',#20349,#20318,#20351,.T.); +#20349 = VERTEX_POINT('',#20350); +#20350 = CARTESIAN_POINT('',(45.974700655655,103.95373262903, + 118.88070013734)); +#20351 = LINE('',#20352,#20353); +#20352 = CARTESIAN_POINT('',(46.536935655655,103.92349809729, + 118.97375245795)); +#20353 = VECTOR('',#20354,1.); +#20354 = DIRECTION('',(0.985193705685,-5.297939539718E-02,0.163053813023 + )); +#20355 = ORIENTED_EDGE('',*,*,#20334,.F.); +#20356 = ORIENTED_EDGE('',*,*,#20357,.T.); +#20357 = EDGE_CURVE('',#20327,#20358,#20360,.T.); +#20358 = VERTEX_POINT('',#20359); +#20359 = CARTESIAN_POINT('',(45.974700655655,104.90478914533, + 119.18971713172)); +#20360 = LINE('',#20361,#20362); +#20361 = CARTESIAN_POINT('',(46.536935655655,104.87455461358, + 119.28276945233)); +#20362 = VECTOR('',#20363,1.); +#20363 = DIRECTION('',(-0.985193705685,5.297939539718E-02, + -0.163053813023)); +#20364 = ORIENTED_EDGE('',*,*,#20365,.T.); +#20365 = EDGE_CURVE('',#20358,#20349,#20366,.T.); +#20366 = LINE('',#20367,#20368); +#20367 = CARTESIAN_POINT('',(45.974700655655,104.90478914533, + 119.18971713172)); +#20368 = VECTOR('',#20369,1.); +#20369 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20370 = PLANE('',#20371); +#20371 = AXIS2_PLACEMENT_3D('',#20372,#20373,#20374); +#20372 = CARTESIAN_POINT('',(46.536935655655,104.87455461358, + 119.28276945233)); +#20373 = DIRECTION('',(-0.171444924912,-0.304441597808,0.936974893605)); +#20374 = DIRECTION('',(0.985193705685,-5.297939539718E-02,0.163053813023 + )); +#20375 = ADVANCED_FACE('',(#20376),#20401,.T.); +#20376 = FACE_BOUND('',#20377,.T.); +#20377 = EDGE_LOOP('',(#20378,#20386,#20387,#20395)); +#20378 = ORIENTED_EDGE('',*,*,#20379,.T.); +#20379 = EDGE_CURVE('',#20380,#20349,#20382,.T.); +#20380 = VERTEX_POINT('',#20381); +#20381 = CARTESIAN_POINT('',(45.412458655655,103.92349809729, + 118.97375245795)); +#20382 = LINE('',#20383,#20384); +#20383 = CARTESIAN_POINT('',(45.974700655655,103.95373262903, + 118.88070013734)); +#20384 = VECTOR('',#20385,1.); +#20385 = DIRECTION('',(0.985194066217,5.297875518306E-02,-0.163051842647 + )); +#20386 = ORIENTED_EDGE('',*,*,#20365,.F.); +#20387 = ORIENTED_EDGE('',*,*,#20388,.T.); +#20388 = EDGE_CURVE('',#20358,#20389,#20391,.T.); +#20389 = VERTEX_POINT('',#20390); +#20390 = CARTESIAN_POINT('',(45.412458655655,104.87455461358, + 119.28276945233)); +#20391 = LINE('',#20392,#20393); +#20392 = CARTESIAN_POINT('',(45.974700655655,104.90478914533, + 119.18971713172)); +#20393 = VECTOR('',#20394,1.); +#20394 = DIRECTION('',(-0.985194066217,-5.297875518306E-02, + 0.163051842647)); +#20395 = ORIENTED_EDGE('',*,*,#20396,.T.); +#20396 = EDGE_CURVE('',#20389,#20380,#20397,.T.); +#20397 = LINE('',#20398,#20399); +#20398 = CARTESIAN_POINT('',(45.412458655655,104.87455461358, + 119.28276945233)); +#20399 = VECTOR('',#20400,1.); +#20400 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20401 = PLANE('',#20402); +#20402 = AXIS2_PLACEMENT_3D('',#20403,#20404,#20405); +#20403 = CARTESIAN_POINT('',(45.974700655655,104.90478914533, + 119.18971713172)); +#20404 = DIRECTION('',(0.171442853136,-0.304441709218,0.936975236491)); +#20405 = DIRECTION('',(0.985194066217,5.297875518306E-02,-0.163051842647 + )); +#20406 = ADVANCED_FACE('',(#20407),#20432,.T.); +#20407 = FACE_BOUND('',#20408,.T.); +#20408 = EDGE_LOOP('',(#20409,#20417,#20418,#20426)); +#20409 = ORIENTED_EDGE('',*,*,#20410,.T.); +#20410 = EDGE_CURVE('',#20411,#20380,#20413,.T.); +#20411 = VERTEX_POINT('',#20412); +#20412 = CARTESIAN_POINT('',(44.938410655655,103.83279450205, + 119.25290941978)); +#20413 = LINE('',#20414,#20415); +#20414 = CARTESIAN_POINT('',(45.412458655655,103.92349809729, + 118.97375245795)); +#20415 = VECTOR('',#20416,1.); +#20416 = DIRECTION('',(0.850213198176,0.162678449851,-0.50067278696)); +#20417 = ORIENTED_EDGE('',*,*,#20396,.F.); +#20418 = ORIENTED_EDGE('',*,*,#20419,.T.); +#20419 = EDGE_CURVE('',#20389,#20420,#20422,.T.); +#20420 = VERTEX_POINT('',#20421); +#20421 = CARTESIAN_POINT('',(44.938410655655,104.78385101834, + 119.56192641416)); +#20422 = LINE('',#20423,#20424); +#20423 = CARTESIAN_POINT('',(45.412458655655,104.87455461358, + 119.28276945233)); +#20424 = VECTOR('',#20425,1.); +#20425 = DIRECTION('',(-0.850213198176,-0.162678449851,0.50067278696)); +#20426 = ORIENTED_EDGE('',*,*,#20427,.T.); +#20427 = EDGE_CURVE('',#20420,#20411,#20428,.T.); +#20428 = LINE('',#20429,#20430); +#20429 = CARTESIAN_POINT('',(44.938410655655,104.78385101834, + 119.56192641416)); +#20430 = VECTOR('',#20431,1.); +#20431 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20432 = PLANE('',#20433); +#20433 = AXIS2_PLACEMENT_3D('',#20434,#20435,#20436); +#20434 = CARTESIAN_POINT('',(45.412458655655,104.87455461358, + 119.28276945233)); +#20435 = DIRECTION('',(0.526438522192,-0.262730327078,0.808600802365)); +#20436 = DIRECTION('',(0.850213198176,0.162678449851,-0.50067278696)); +#20437 = ADVANCED_FACE('',(#20438),#20463,.T.); +#20438 = FACE_BOUND('',#20439,.T.); +#20439 = EDGE_LOOP('',(#20440,#20448,#20449,#20457)); +#20440 = ORIENTED_EDGE('',*,*,#20441,.T.); +#20441 = EDGE_CURVE('',#20442,#20411,#20444,.T.); +#20442 = VERTEX_POINT('',#20443); +#20443 = CARTESIAN_POINT('',(44.555315655655,103.68460323927, + 119.70899522957)); +#20444 = LINE('',#20445,#20446); +#20445 = CARTESIAN_POINT('',(44.938410655655,103.83279450205, + 119.25290941978)); +#20446 = VECTOR('',#20447,1.); +#20447 = DIRECTION('',(0.624147911838,0.241436894795,-0.743066356377)); +#20448 = ORIENTED_EDGE('',*,*,#20427,.F.); +#20449 = ORIENTED_EDGE('',*,*,#20450,.T.); +#20450 = EDGE_CURVE('',#20420,#20451,#20453,.T.); +#20451 = VERTEX_POINT('',#20452); +#20452 = CARTESIAN_POINT('',(44.555315655655,104.63565975557, + 120.01801222394)); +#20453 = LINE('',#20454,#20455); +#20454 = CARTESIAN_POINT('',(44.938410655655,104.78385101834, + 119.56192641416)); +#20455 = VECTOR('',#20456,1.); +#20456 = DIRECTION('',(-0.624147911838,-0.241436894795,0.743066356377)); +#20457 = ORIENTED_EDGE('',*,*,#20458,.T.); +#20458 = EDGE_CURVE('',#20451,#20442,#20459,.T.); +#20459 = LINE('',#20460,#20461); +#20460 = CARTESIAN_POINT('',(44.555315655655,104.63565975557, + 120.01801222394)); +#20461 = VECTOR('',#20462,1.); +#20462 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20463 = PLANE('',#20464); +#20464 = AXIS2_PLACEMENT_3D('',#20465,#20466,#20467); +#20465 = CARTESIAN_POINT('',(44.938410655655,104.78385101834, + 119.56192641416)); +#20466 = DIRECTION('',(0.781306203833,-0.192872311762,0.593599938686)); +#20467 = DIRECTION('',(0.624147911838,0.241436894795,-0.743066356377)); +#20468 = ADVANCED_FACE('',(#20469),#20494,.T.); +#20469 = FACE_BOUND('',#20470,.T.); +#20470 = EDGE_LOOP('',(#20471,#20479,#20480,#20488)); +#20471 = ORIENTED_EDGE('',*,*,#20472,.T.); +#20472 = EDGE_CURVE('',#20473,#20442,#20475,.T.); +#20473 = VERTEX_POINT('',#20474); +#20474 = CARTESIAN_POINT('',(44.276950655655,103.48531107221, + 120.32235345123)); +#20475 = LINE('',#20476,#20477); +#20476 = CARTESIAN_POINT('',(44.555315655655,103.68460323927, + 119.70899522957)); +#20477 = VECTOR('',#20478,1.); +#20478 = DIRECTION('',(0.396286652796,0.283716795624,-0.873190511112)); +#20479 = ORIENTED_EDGE('',*,*,#20458,.F.); +#20480 = ORIENTED_EDGE('',*,*,#20481,.T.); +#20481 = EDGE_CURVE('',#20451,#20482,#20484,.T.); +#20482 = VERTEX_POINT('',#20483); +#20483 = CARTESIAN_POINT('',(44.276950655655,104.43636758851, + 120.6313704456)); +#20484 = LINE('',#20485,#20486); +#20485 = CARTESIAN_POINT('',(44.555315655655,104.63565975557, + 120.01801222394)); +#20486 = VECTOR('',#20487,1.); +#20487 = DIRECTION('',(-0.396286652796,-0.283716795624,0.873190511112)); +#20488 = ORIENTED_EDGE('',*,*,#20489,.T.); +#20489 = EDGE_CURVE('',#20482,#20473,#20490,.T.); +#20490 = LINE('',#20491,#20492); +#20491 = CARTESIAN_POINT('',(44.276950655655,104.43636758851, + 120.6313704456)); +#20492 = VECTOR('',#20493,1.); +#20493 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20494 = PLANE('',#20495); +#20495 = AXIS2_PLACEMENT_3D('',#20496,#20497,#20498); +#20496 = CARTESIAN_POINT('',(44.555315655655,104.63565975557, + 120.01801222394)); +#20497 = DIRECTION('',(0.918126836998,-0.122459310358,0.376891003462)); +#20498 = DIRECTION('',(0.396286652796,0.283716795624,-0.873190511112)); +#20499 = ADVANCED_FACE('',(#20500),#20525,.T.); +#20500 = FACE_BOUND('',#20501,.T.); +#20501 = EDGE_LOOP('',(#20502,#20510,#20511,#20519)); +#20502 = ORIENTED_EDGE('',*,*,#20503,.T.); +#20503 = EDGE_CURVE('',#20504,#20473,#20506,.T.); +#20504 = VERTEX_POINT('',#20505); +#20505 = CARTESIAN_POINT('',(44.04469944153,102.95045555132, + 121.96846948265)); +#20506 = LINE('',#20507,#20508); +#20507 = CARTESIAN_POINT('',(44.276950655655,103.48531107221, + 120.32235345123)); +#20508 = VECTOR('',#20509,1.); +#20509 = DIRECTION('',(0.132993001972,0.306271989202,-0.942608259065)); +#20510 = ORIENTED_EDGE('',*,*,#20489,.F.); +#20511 = ORIENTED_EDGE('',*,*,#20512,.T.); +#20512 = EDGE_CURVE('',#20482,#20513,#20515,.T.); +#20513 = VERTEX_POINT('',#20514); +#20514 = CARTESIAN_POINT('',(44.04469944153,103.90151206761, + 122.27748647702)); +#20515 = LINE('',#20516,#20517); +#20516 = CARTESIAN_POINT('',(44.276950655655,104.43636758851, + 120.6313704456)); +#20517 = VECTOR('',#20518,1.); +#20518 = DIRECTION('',(-0.132993001972,-0.306271989202,0.942608259065)); +#20519 = ORIENTED_EDGE('',*,*,#20520,.T.); +#20520 = EDGE_CURVE('',#20513,#20504,#20521,.T.); +#20521 = LINE('',#20522,#20523); +#20522 = CARTESIAN_POINT('',(44.04469944153,103.90151206761, + 122.27748647702)); +#20523 = VECTOR('',#20524,1.); +#20524 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20525 = PLANE('',#20526); +#20526 = AXIS2_PLACEMENT_3D('',#20527,#20528,#20529); +#20527 = CARTESIAN_POINT('',(44.276950655655,104.43636758851, + 120.6313704456)); +#20528 = DIRECTION('',(0.991116976661,-4.109709774221E-02,0.126483861147 + )); +#20529 = DIRECTION('',(0.132993001972,0.306271989202,-0.942608259065)); +#20530 = ADVANCED_FACE('',(#20531),#20556,.T.); +#20531 = FACE_BOUND('',#20532,.T.); +#20532 = EDGE_LOOP('',(#20533,#20541,#20542,#20550)); +#20533 = ORIENTED_EDGE('',*,*,#20534,.T.); +#20534 = EDGE_CURVE('',#20535,#20504,#20537,.T.); +#20535 = VERTEX_POINT('',#20536); +#20536 = CARTESIAN_POINT('',(44.276950655655,102.41730878548, + 123.60932650678)); +#20537 = LINE('',#20538,#20539); +#20538 = CARTESIAN_POINT('',(44.04469944153,102.95045555132, + 121.96846948265)); +#20539 = VECTOR('',#20540,1.); +#20540 = DIRECTION('',(-0.133411674712,0.306254600934,-0.94255474348)); +#20541 = ORIENTED_EDGE('',*,*,#20520,.F.); +#20542 = ORIENTED_EDGE('',*,*,#20543,.T.); +#20543 = EDGE_CURVE('',#20513,#20544,#20546,.T.); +#20544 = VERTEX_POINT('',#20545); +#20545 = CARTESIAN_POINT('',(44.276950655655,103.36836530177, + 123.91834350115)); +#20546 = LINE('',#20547,#20548); +#20547 = CARTESIAN_POINT('',(44.04469944153,103.90151206761, + 122.27748647702)); +#20548 = VECTOR('',#20549,1.); +#20549 = DIRECTION('',(0.133411674712,-0.306254600934,0.94255474348)); +#20550 = ORIENTED_EDGE('',*,*,#20551,.T.); +#20551 = EDGE_CURVE('',#20544,#20535,#20552,.T.); +#20552 = LINE('',#20553,#20554); +#20553 = CARTESIAN_POINT('',(44.276950655655,103.36836530177, + 123.91834350115)); +#20554 = VECTOR('',#20555,1.); +#20555 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20556 = PLANE('',#20557); +#20557 = AXIS2_PLACEMENT_3D('',#20558,#20559,#20560); +#20558 = CARTESIAN_POINT('',(44.04469944153,103.90151206761, + 122.27748647702)); +#20559 = DIRECTION('',(0.991060707046,4.122647473407E-02,-0.126882042585 + )); +#20560 = DIRECTION('',(-0.133411674712,0.306254600934,-0.94255474348)); +#20561 = ADVANCED_FACE('',(#20562),#20587,.T.); +#20562 = FACE_BOUND('',#20563,.T.); +#20563 = EDGE_LOOP('',(#20564,#20572,#20573,#20581)); +#20564 = ORIENTED_EDGE('',*,*,#20565,.T.); +#20565 = EDGE_CURVE('',#20566,#20535,#20568,.T.); +#20566 = VERTEX_POINT('',#20567); +#20567 = CARTESIAN_POINT('',(44.555315655655,102.21844275285, + 124.2213732215)); +#20568 = LINE('',#20569,#20570); +#20569 = CARTESIAN_POINT('',(44.276950655655,102.41730878548, + 123.60932650678)); +#20570 = VECTOR('',#20571,1.); +#20571 = DIRECTION('',(-0.397002106474,0.283621266537,-0.872896502813)); +#20572 = ORIENTED_EDGE('',*,*,#20551,.F.); +#20573 = ORIENTED_EDGE('',*,*,#20574,.T.); +#20574 = EDGE_CURVE('',#20544,#20575,#20577,.T.); +#20575 = VERTEX_POINT('',#20576); +#20576 = CARTESIAN_POINT('',(44.555315655655,103.16949926914, + 124.53039021588)); +#20577 = LINE('',#20578,#20579); +#20578 = CARTESIAN_POINT('',(44.276950655655,103.36836530177, + 123.91834350115)); +#20579 = VECTOR('',#20580,1.); +#20580 = DIRECTION('',(0.397002106474,-0.283621266537,0.872896502813)); +#20581 = ORIENTED_EDGE('',*,*,#20582,.T.); +#20582 = EDGE_CURVE('',#20575,#20566,#20583,.T.); +#20583 = LINE('',#20584,#20585); +#20584 = CARTESIAN_POINT('',(44.555315655655,103.16949926914, + 124.53039021588)); +#20585 = VECTOR('',#20586,1.); +#20586 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20587 = PLANE('',#20588); +#20588 = AXIS2_PLACEMENT_3D('',#20589,#20590,#20591); +#20589 = CARTESIAN_POINT('',(44.276950655655,103.36836530177, + 123.91834350115)); +#20590 = DIRECTION('',(0.917817698378,0.122680397703,-0.377571440345)); +#20591 = DIRECTION('',(-0.397002106474,0.283621266537,-0.872896502813)); +#20592 = ADVANCED_FACE('',(#20593),#20618,.T.); +#20593 = FACE_BOUND('',#20594,.T.); +#20594 = EDGE_LOOP('',(#20595,#20603,#20604,#20612)); +#20595 = ORIENTED_EDGE('',*,*,#20596,.T.); +#20596 = EDGE_CURVE('',#20597,#20566,#20599,.T.); +#20597 = VERTEX_POINT('',#20598); +#20598 = CARTESIAN_POINT('',(44.938410655655,102.07152865731, + 124.6735283147)); +#20599 = LINE('',#20600,#20601); +#20600 = CARTESIAN_POINT('',(44.555315655655,102.21844275285, + 124.2213732215)); +#20601 = VECTOR('',#20602,1.); +#20602 = DIRECTION('',(-0.627443316081,0.240619865257,-0.740551798019)); +#20603 = ORIENTED_EDGE('',*,*,#20582,.F.); +#20604 = ORIENTED_EDGE('',*,*,#20605,.T.); +#20605 = EDGE_CURVE('',#20575,#20606,#20608,.T.); +#20606 = VERTEX_POINT('',#20607); +#20607 = CARTESIAN_POINT('',(44.938410655655,103.02258517361, + 124.98254530908)); +#20608 = LINE('',#20609,#20610); +#20609 = CARTESIAN_POINT('',(44.555315655655,103.16949926914, + 124.53039021588)); +#20610 = VECTOR('',#20611,1.); +#20611 = DIRECTION('',(0.627443316081,-0.240619865257,0.740551798019)); +#20612 = ORIENTED_EDGE('',*,*,#20613,.T.); +#20613 = EDGE_CURVE('',#20606,#20597,#20614,.T.); +#20614 = LINE('',#20615,#20616); +#20615 = CARTESIAN_POINT('',(44.938410655655,103.02258517361, + 124.98254530908)); +#20616 = VECTOR('',#20617,1.); +#20617 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20618 = PLANE('',#20619); +#20619 = AXIS2_PLACEMENT_3D('',#20620,#20621,#20622); +#20620 = CARTESIAN_POINT('',(44.555315655655,103.16949926914, + 124.53039021588)); +#20621 = DIRECTION('',(0.778662240709,0.193890647676,-0.596734054364)); +#20622 = DIRECTION('',(-0.627443316081,0.240619865257,-0.740551798019)); +#20623 = ADVANCED_FACE('',(#20624),#20649,.T.); +#20624 = FACE_BOUND('',#20625,.T.); +#20625 = EDGE_LOOP('',(#20626,#20634,#20635,#20643)); +#20626 = ORIENTED_EDGE('',*,*,#20627,.T.); +#20627 = EDGE_CURVE('',#20628,#20597,#20630,.T.); +#20628 = VERTEX_POINT('',#20629); +#20629 = CARTESIAN_POINT('',(45.412458655655,101.98082506207, + 124.95268527654)); +#20630 = LINE('',#20631,#20632); +#20631 = CARTESIAN_POINT('',(44.938410655655,102.07152865731, + 124.6735283147)); +#20632 = VECTOR('',#20633,1.); +#20633 = DIRECTION('',(-0.850213198176,0.162678449851,-0.50067278696)); +#20634 = ORIENTED_EDGE('',*,*,#20613,.F.); +#20635 = ORIENTED_EDGE('',*,*,#20636,.T.); +#20636 = EDGE_CURVE('',#20606,#20637,#20639,.T.); +#20637 = VERTEX_POINT('',#20638); +#20638 = CARTESIAN_POINT('',(45.412458655655,102.93188157837, + 125.26170227091)); +#20639 = LINE('',#20640,#20641); +#20640 = CARTESIAN_POINT('',(44.938410655655,103.02258517361, + 124.98254530908)); +#20641 = VECTOR('',#20642,1.); +#20642 = DIRECTION('',(0.850213198176,-0.162678449851,0.50067278696)); +#20643 = ORIENTED_EDGE('',*,*,#20644,.T.); +#20644 = EDGE_CURVE('',#20637,#20628,#20645,.T.); +#20645 = LINE('',#20646,#20647); +#20646 = CARTESIAN_POINT('',(45.412458655655,102.93188157837, + 125.26170227091)); +#20647 = VECTOR('',#20648,1.); +#20648 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20649 = PLANE('',#20650); +#20650 = AXIS2_PLACEMENT_3D('',#20651,#20652,#20653); +#20651 = CARTESIAN_POINT('',(44.938410655655,103.02258517361, + 124.98254530908)); +#20652 = DIRECTION('',(0.526438522192,0.262730327078,-0.808600802365)); +#20653 = DIRECTION('',(-0.850213198176,0.162678449851,-0.50067278696)); +#20654 = ADVANCED_FACE('',(#20655),#20680,.T.); +#20655 = FACE_BOUND('',#20656,.T.); +#20656 = EDGE_LOOP('',(#20657,#20665,#20666,#20674)); +#20657 = ORIENTED_EDGE('',*,*,#20658,.T.); +#20658 = EDGE_CURVE('',#20659,#20628,#20661,.T.); +#20659 = VERTEX_POINT('',#20660); +#20660 = CARTESIAN_POINT('',(45.974700655655,101.95059053033, + 125.04573759715)); +#20661 = LINE('',#20662,#20663); +#20662 = CARTESIAN_POINT('',(45.412458655655,101.98082506207, + 124.95268527654)); +#20663 = VECTOR('',#20664,1.); +#20664 = DIRECTION('',(-0.985194066217,5.297875518306E-02, + -0.163051842647)); +#20665 = ORIENTED_EDGE('',*,*,#20644,.F.); +#20666 = ORIENTED_EDGE('',*,*,#20667,.T.); +#20667 = EDGE_CURVE('',#20637,#20668,#20670,.T.); +#20668 = VERTEX_POINT('',#20669); +#20669 = CARTESIAN_POINT('',(45.974700655655,102.90164704662, + 125.35475459152)); +#20670 = LINE('',#20671,#20672); +#20671 = CARTESIAN_POINT('',(45.412458655655,102.93188157837, + 125.26170227091)); +#20672 = VECTOR('',#20673,1.); +#20673 = DIRECTION('',(0.985194066217,-5.297875518306E-02,0.163051842647 + )); +#20674 = ORIENTED_EDGE('',*,*,#20675,.T.); +#20675 = EDGE_CURVE('',#20668,#20659,#20676,.T.); +#20676 = LINE('',#20677,#20678); +#20677 = CARTESIAN_POINT('',(45.974700655655,102.90164704662, + 125.35475459152)); +#20678 = VECTOR('',#20679,1.); +#20679 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20680 = PLANE('',#20681); +#20681 = AXIS2_PLACEMENT_3D('',#20682,#20683,#20684); +#20682 = CARTESIAN_POINT('',(45.412458655655,102.93188157837, + 125.26170227091)); +#20683 = DIRECTION('',(0.171442853136,0.304441709218,-0.936975236491)); +#20684 = DIRECTION('',(-0.985194066217,5.297875518306E-02, + -0.163051842647)); +#20685 = ADVANCED_FACE('',(#20686),#20711,.T.); +#20686 = FACE_BOUND('',#20687,.T.); +#20687 = EDGE_LOOP('',(#20688,#20696,#20697,#20705)); +#20688 = ORIENTED_EDGE('',*,*,#20689,.T.); +#20689 = EDGE_CURVE('',#20690,#20659,#20692,.T.); +#20690 = VERTEX_POINT('',#20691); +#20691 = CARTESIAN_POINT('',(46.536935655655,101.98082506207, + 124.95268527654)); +#20692 = LINE('',#20693,#20694); +#20693 = CARTESIAN_POINT('',(45.974700655655,101.95059053033, + 125.04573759715)); +#20694 = VECTOR('',#20695,1.); +#20695 = DIRECTION('',(-0.985193705685,-5.297939539718E-02, + 0.163053813023)); +#20696 = ORIENTED_EDGE('',*,*,#20675,.F.); +#20697 = ORIENTED_EDGE('',*,*,#20698,.T.); +#20698 = EDGE_CURVE('',#20668,#20699,#20701,.T.); +#20699 = VERTEX_POINT('',#20700); +#20700 = CARTESIAN_POINT('',(46.536935655655,102.93188157837, + 125.26170227091)); +#20701 = LINE('',#20702,#20703); +#20702 = CARTESIAN_POINT('',(45.974700655655,102.90164704662, + 125.35475459152)); +#20703 = VECTOR('',#20704,1.); +#20704 = DIRECTION('',(0.985193705685,5.297939539718E-02,-0.163053813023 + )); +#20705 = ORIENTED_EDGE('',*,*,#20706,.T.); +#20706 = EDGE_CURVE('',#20699,#20690,#20707,.T.); +#20707 = LINE('',#20708,#20709); +#20708 = CARTESIAN_POINT('',(46.536935655655,102.93188157837, + 125.26170227091)); +#20709 = VECTOR('',#20710,1.); +#20710 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20711 = PLANE('',#20712); +#20712 = AXIS2_PLACEMENT_3D('',#20713,#20714,#20715); +#20713 = CARTESIAN_POINT('',(45.974700655655,102.90164704662, + 125.35475459152)); +#20714 = DIRECTION('',(-0.171444924912,0.304441597808,-0.936974893605)); +#20715 = DIRECTION('',(-0.985193705685,-5.297939539718E-02, + 0.163053813023)); +#20716 = ADVANCED_FACE('',(#20717),#20742,.T.); +#20717 = FACE_BOUND('',#20718,.T.); +#20718 = EDGE_LOOP('',(#20719,#20727,#20728,#20736)); +#20719 = ORIENTED_EDGE('',*,*,#20720,.T.); +#20720 = EDGE_CURVE('',#20721,#20690,#20723,.T.); +#20721 = VERTEX_POINT('',#20722); +#20722 = CARTESIAN_POINT('',(47.010980655655,102.07152865731, + 124.6735283147)); +#20723 = LINE('',#20724,#20725); +#20724 = CARTESIAN_POINT('',(46.536935655655,101.98082506207, + 124.95268527654)); +#20725 = VECTOR('',#20726,1.); +#20726 = DIRECTION('',(-0.850211707013,-0.162679194045,0.500675077354)); +#20727 = ORIENTED_EDGE('',*,*,#20706,.F.); +#20728 = ORIENTED_EDGE('',*,*,#20729,.T.); +#20729 = EDGE_CURVE('',#20699,#20730,#20732,.T.); +#20730 = VERTEX_POINT('',#20731); +#20731 = CARTESIAN_POINT('',(47.010980655655,103.02258517361, + 124.98254530908)); +#20732 = LINE('',#20733,#20734); +#20733 = CARTESIAN_POINT('',(46.536935655655,102.93188157837, + 125.26170227091)); +#20734 = VECTOR('',#20735,1.); +#20735 = DIRECTION('',(0.850211707013,0.162679194045,-0.500675077354)); +#20736 = ORIENTED_EDGE('',*,*,#20737,.T.); +#20737 = EDGE_CURVE('',#20730,#20721,#20738,.T.); +#20738 = LINE('',#20739,#20740); +#20739 = CARTESIAN_POINT('',(47.010980655655,103.02258517361, + 124.98254530908)); +#20740 = VECTOR('',#20741,1.); +#20741 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20742 = PLANE('',#20743); +#20743 = AXIS2_PLACEMENT_3D('',#20744,#20745,#20746); +#20744 = CARTESIAN_POINT('',(46.536935655655,102.93188157837, + 125.26170227091)); +#20745 = DIRECTION('',(-0.526440930455,0.262729866284,-0.808599384185)); +#20746 = DIRECTION('',(-0.850211707013,-0.162679194045,0.500675077354)); +#20747 = ADVANCED_FACE('',(#20748),#20773,.T.); +#20748 = FACE_BOUND('',#20749,.T.); +#20749 = EDGE_LOOP('',(#20750,#20758,#20759,#20767)); +#20750 = ORIENTED_EDGE('',*,*,#20751,.T.); +#20751 = EDGE_CURVE('',#20752,#20721,#20754,.T.); +#20752 = VERTEX_POINT('',#20753); +#20753 = CARTESIAN_POINT('',(47.389943655655,102.21844275285, + 124.2213732215)); +#20754 = LINE('',#20755,#20756); +#20755 = CARTESIAN_POINT('',(47.010980655655,102.07152865731, + 124.6735283147)); +#20756 = VECTOR('',#20757,1.); +#20757 = DIRECTION('',(-0.623313853754,-0.241642564202,0.743699341727)); +#20758 = ORIENTED_EDGE('',*,*,#20737,.F.); +#20759 = ORIENTED_EDGE('',*,*,#20760,.T.); +#20760 = EDGE_CURVE('',#20730,#20761,#20763,.T.); +#20761 = VERTEX_POINT('',#20762); +#20762 = CARTESIAN_POINT('',(47.389943655655,103.16949926914, + 124.53039021588)); +#20763 = LINE('',#20764,#20765); +#20764 = CARTESIAN_POINT('',(47.010980655655,103.02258517361, + 124.98254530908)); +#20765 = VECTOR('',#20766,1.); +#20766 = DIRECTION('',(0.623313853754,0.241642564202,-0.743699341727)); +#20767 = ORIENTED_EDGE('',*,*,#20768,.T.); +#20768 = EDGE_CURVE('',#20761,#20752,#20769,.T.); +#20769 = LINE('',#20770,#20771); +#20770 = CARTESIAN_POINT('',(47.389943655655,103.16949926914, + 124.53039021588)); +#20771 = VECTOR('',#20772,1.); +#20772 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20773 = PLANE('',#20774); +#20774 = AXIS2_PLACEMENT_3D('',#20775,#20776,#20777); +#20775 = CARTESIAN_POINT('',(47.010980655655,103.02258517361, + 124.98254530908)); +#20776 = DIRECTION('',(-0.781971764016,0.192614573639,-0.592806702309)); +#20777 = DIRECTION('',(-0.623313853754,-0.241642564202,0.743699341727)); +#20778 = ADVANCED_FACE('',(#20779),#20804,.T.); +#20779 = FACE_BOUND('',#20780,.T.); +#20780 = EDGE_LOOP('',(#20781,#20789,#20790,#20798)); +#20781 = ORIENTED_EDGE('',*,*,#20782,.T.); +#20782 = EDGE_CURVE('',#20783,#20752,#20785,.T.); +#20783 = VERTEX_POINT('',#20784); +#20784 = CARTESIAN_POINT('',(47.666930655655,102.41730878548, + 123.60932650678)); +#20785 = LINE('',#20786,#20787); +#20786 = CARTESIAN_POINT('',(47.389943655655,102.21844275285, + 124.2213732215)); +#20787 = VECTOR('',#20788,1.); +#20788 = DIRECTION('',(-0.395344627411,-0.283842265428,0.873576667462)); +#20789 = ORIENTED_EDGE('',*,*,#20768,.F.); +#20790 = ORIENTED_EDGE('',*,*,#20791,.T.); +#20791 = EDGE_CURVE('',#20761,#20792,#20794,.T.); +#20792 = VERTEX_POINT('',#20793); +#20793 = CARTESIAN_POINT('',(47.666930655655,103.36836530177, + 123.91834350115)); +#20794 = LINE('',#20795,#20796); +#20795 = CARTESIAN_POINT('',(47.389943655655,103.16949926914, + 124.53039021588)); +#20796 = VECTOR('',#20797,1.); +#20797 = DIRECTION('',(0.395344627411,0.283842265428,-0.873576667462)); +#20798 = ORIENTED_EDGE('',*,*,#20799,.T.); +#20799 = EDGE_CURVE('',#20792,#20783,#20800,.T.); +#20800 = LINE('',#20801,#20802); +#20801 = CARTESIAN_POINT('',(47.666930655655,103.36836530177, + 123.91834350115)); +#20802 = VECTOR('',#20803,1.); +#20803 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20804 = PLANE('',#20805); +#20805 = AXIS2_PLACEMENT_3D('',#20806,#20807,#20808); +#20806 = CARTESIAN_POINT('',(47.389943655655,103.16949926914, + 124.53039021588)); +#20807 = DIRECTION('',(-0.918532865812,0.122168208505,-0.375995084082)); +#20808 = DIRECTION('',(-0.395344627411,-0.283842265428,0.873576667462)); +#20809 = ADVANCED_FACE('',(#20810),#20835,.T.); +#20810 = FACE_BOUND('',#20811,.T.); +#20811 = EDGE_LOOP('',(#20812,#20813,#20821,#20829)); +#20812 = ORIENTED_EDGE('',*,*,#16835,.T.); +#20813 = ORIENTED_EDGE('',*,*,#20814,.F.); +#20814 = EDGE_CURVE('',#20815,#16838,#20817,.T.); +#20815 = VERTEX_POINT('',#20816); +#20816 = CARTESIAN_POINT('',(48.803812655655,104.26688443679, + 121.15298595147)); +#20817 = LINE('',#20818,#20819); +#20818 = CARTESIAN_POINT('',(48.803812655655,104.26688443679, + 121.15298595147)); +#20819 = VECTOR('',#20820,1.); +#20820 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20821 = ORIENTED_EDGE('',*,*,#20822,.T.); +#20822 = EDGE_CURVE('',#20815,#20823,#20825,.T.); +#20823 = VERTEX_POINT('',#20824); +#20824 = CARTESIAN_POINT('',(48.891037507081,103.90151479358, + 122.27747808737)); +#20825 = LINE('',#20826,#20827); +#20826 = CARTESIAN_POINT('',(48.803812655655,104.26688443679, + 121.15298595147)); +#20827 = VECTOR('',#20828,1.); +#20828 = DIRECTION('',(7.357183209831E-02,-0.308179533752,0.948479077523 + )); +#20829 = ORIENTED_EDGE('',*,*,#20830,.T.); +#20830 = EDGE_CURVE('',#20823,#16836,#20831,.T.); +#20831 = LINE('',#20832,#20833); +#20832 = CARTESIAN_POINT('',(48.891037507081,103.90151479358, + 122.27747808737)); +#20833 = VECTOR('',#20834,1.); +#20834 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20835 = PLANE('',#20836); +#20836 = AXIS2_PLACEMENT_3D('',#20837,#20838,#20839); +#20837 = CARTESIAN_POINT('',(48.803812655655,104.26688443679, + 121.15298595147)); +#20838 = DIRECTION('',(0.997289920495,2.273494642568E-02, + -6.997097033287E-02)); +#20839 = DIRECTION('',(-7.357183209831E-02,0.308179533752, + -0.948479077523)); +#20840 = ADVANCED_FACE('',(#20841),#20859,.T.); +#20841 = FACE_BOUND('',#20842,.T.); +#20842 = EDGE_LOOP('',(#20843,#20844,#20845,#20853)); +#20843 = ORIENTED_EDGE('',*,*,#16845,.T.); +#20844 = ORIENTED_EDGE('',*,*,#20830,.F.); +#20845 = ORIENTED_EDGE('',*,*,#20846,.T.); +#20846 = EDGE_CURVE('',#20823,#20847,#20849,.T.); +#20847 = VERTEX_POINT('',#20848); +#20848 = CARTESIAN_POINT('',(48.803812655655,103.53614546083, + 123.40196926774)); +#20849 = LINE('',#20850,#20851); +#20850 = CARTESIAN_POINT('',(48.891037507081,103.90151479358, + 122.27747808737)); +#20851 = VECTOR('',#20852,1.); +#20852 = DIRECTION('',(-7.357189427608E-02,-0.308179532334,0.94847907316 + )); +#20853 = ORIENTED_EDGE('',*,*,#20854,.T.); +#20854 = EDGE_CURVE('',#20847,#16846,#20855,.T.); +#20855 = LINE('',#20856,#20857); +#20856 = CARTESIAN_POINT('',(48.803812655655,103.53614546083, + 123.40196926774)); +#20857 = VECTOR('',#20858,1.); +#20858 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20859 = PLANE('',#20860); +#20860 = AXIS2_PLACEMENT_3D('',#20861,#20862,#20863); +#20861 = CARTESIAN_POINT('',(48.891037507081,103.90151479358, + 122.27747808737)); +#20862 = DIRECTION('',(0.997289915908,-2.273496563967E-02, + 6.997102946745E-02)); +#20863 = DIRECTION('',(7.357189427608E-02,0.308179532334,-0.94847907316) + ); +#20864 = ADVANCED_FACE('',(#20865),#20883,.T.); +#20865 = FACE_BOUND('',#20866,.T.); +#20866 = EDGE_LOOP('',(#20867,#20868,#20869,#20877)); +#20867 = ORIENTED_EDGE('',*,*,#16853,.T.); +#20868 = ORIENTED_EDGE('',*,*,#20854,.F.); +#20869 = ORIENTED_EDGE('',*,*,#20870,.T.); +#20870 = EDGE_CURVE('',#20847,#20871,#20873,.T.); +#20871 = VERTEX_POINT('',#20872); +#20872 = CARTESIAN_POINT('',(48.543360655655,103.22528394402, + 124.35870264038)); +#20873 = LINE('',#20874,#20875); +#20874 = CARTESIAN_POINT('',(48.803812655655,103.53614546083, + 123.40196926774)); +#20875 = VECTOR('',#20876,1.); +#20876 = DIRECTION('',(-0.250642232811,-0.299153105636,0.920698588312)); +#20877 = ORIENTED_EDGE('',*,*,#20878,.T.); +#20878 = EDGE_CURVE('',#20871,#16854,#20879,.T.); +#20879 = LINE('',#20880,#20881); +#20880 = CARTESIAN_POINT('',(48.543360655655,103.22528394402, + 124.35870264038)); +#20881 = VECTOR('',#20882,1.); +#20882 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20883 = PLANE('',#20884); +#20884 = AXIS2_PLACEMENT_3D('',#20885,#20886,#20887); +#20885 = CARTESIAN_POINT('',(48.803812655655,103.53614546083, + 123.40196926774)); +#20886 = DIRECTION('',(0.96807978552,-7.745270944653E-02,0.238374928773) + ); +#20887 = DIRECTION('',(0.250642232811,0.299153105636,-0.920698588312)); +#20888 = ADVANCED_FACE('',(#20889),#20907,.T.); +#20889 = FACE_BOUND('',#20890,.T.); +#20890 = EDGE_LOOP('',(#20891,#20892,#20893,#20901)); +#20891 = ORIENTED_EDGE('',*,*,#16861,.T.); +#20892 = ORIENTED_EDGE('',*,*,#20878,.F.); +#20893 = ORIENTED_EDGE('',*,*,#20894,.T.); +#20894 = EDGE_CURVE('',#20871,#20895,#20897,.T.); +#20895 = VERTEX_POINT('',#20896); +#20896 = CARTESIAN_POINT('',(48.120305655655,102.97361370543, + 125.1332639905)); +#20897 = LINE('',#20898,#20899); +#20898 = CARTESIAN_POINT('',(48.543360655655,103.22528394402, + 124.35870264038)); +#20899 = VECTOR('',#20900,1.); +#20900 = DIRECTION('',(-0.46097149669,-0.274226298132,0.843981763223)); +#20901 = ORIENTED_EDGE('',*,*,#20902,.T.); +#20902 = EDGE_CURVE('',#20895,#16862,#20903,.T.); +#20903 = LINE('',#20904,#20905); +#20904 = CARTESIAN_POINT('',(48.120305655655,102.97361370543, + 125.1332639905)); +#20905 = VECTOR('',#20906,1.); +#20906 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20907 = PLANE('',#20908); +#20908 = AXIS2_PLACEMENT_3D('',#20909,#20910,#20911); +#20909 = CARTESIAN_POINT('',(48.543360655655,103.22528394402, + 124.35870264038)); +#20910 = DIRECTION('',(0.887414941975,-0.1424480264,0.438409945753)); +#20911 = DIRECTION('',(0.46097149669,0.274226298132,-0.843981763223)); +#20912 = ADVANCED_FACE('',(#20913),#20931,.T.); +#20913 = FACE_BOUND('',#20914,.T.); +#20914 = EDGE_LOOP('',(#20915,#20916,#20917,#20925)); +#20915 = ORIENTED_EDGE('',*,*,#16869,.T.); +#20916 = ORIENTED_EDGE('',*,*,#20902,.F.); +#20917 = ORIENTED_EDGE('',*,*,#20918,.T.); +#20918 = EDGE_CURVE('',#20895,#20919,#20921,.T.); +#20919 = VERTEX_POINT('',#20920); +#20920 = CARTESIAN_POINT('',(47.545660655655,102.78752274436, + 125.70599307778)); +#20921 = LINE('',#20922,#20923); +#20922 = CARTESIAN_POINT('',(48.120305655655,102.97361370543, + 125.1332639905)); +#20923 = VECTOR('',#20924,1.); +#20924 = DIRECTION('',(-0.690359359732,-0.223563481335,0.688057646018)); +#20925 = ORIENTED_EDGE('',*,*,#20926,.T.); +#20926 = EDGE_CURVE('',#20919,#16870,#20927,.T.); +#20927 = LINE('',#20928,#20929); +#20928 = CARTESIAN_POINT('',(47.545660655655,102.78752274436, + 125.70599307778)); +#20929 = VECTOR('',#20930,1.); +#20930 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20931 = PLANE('',#20932); +#20932 = AXIS2_PLACEMENT_3D('',#20933,#20934,#20935); +#20933 = CARTESIAN_POINT('',(48.120305655655,102.97361370543, + 125.1332639905)); +#20934 = DIRECTION('',(0.723466622886,-0.213332774383,0.656570767658)); +#20935 = DIRECTION('',(0.690359359732,0.223563481335,-0.688057646018)); +#20936 = ADVANCED_FACE('',(#20937),#20955,.T.); +#20937 = FACE_BOUND('',#20938,.T.); +#20938 = EDGE_LOOP('',(#20939,#20940,#20941,#20949)); +#20939 = ORIENTED_EDGE('',*,*,#16877,.T.); +#20940 = ORIENTED_EDGE('',*,*,#20926,.F.); +#20941 = ORIENTED_EDGE('',*,*,#20942,.T.); +#20942 = EDGE_CURVE('',#20919,#20943,#20945,.T.); +#20943 = VERTEX_POINT('',#20944); +#20944 = CARTESIAN_POINT('',(46.824950655655,102.67126900599, + 126.06378529449)); +#20945 = LINE('',#20946,#20947); +#20946 = CARTESIAN_POINT('',(47.545660655655,102.78752274436, + 125.70599307778)); +#20947 = VECTOR('',#20948,1.); +#20948 = DIRECTION('',(-0.886492823333,-0.142995247394,0.4400941188)); +#20949 = ORIENTED_EDGE('',*,*,#20950,.T.); +#20950 = EDGE_CURVE('',#20943,#16878,#20951,.T.); +#20951 = LINE('',#20952,#20953); +#20952 = CARTESIAN_POINT('',(46.824950655655,102.67126900599, + 126.06378529449)); +#20953 = VECTOR('',#20954,1.); +#20954 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20955 = PLANE('',#20956); +#20956 = AXIS2_PLACEMENT_3D('',#20957,#20958,#20959); +#20957 = CARTESIAN_POINT('',(47.545660655655,102.78752274436, + 125.70599307778)); +#20958 = DIRECTION('',(0.462742341027,-0.273941347801,0.843104776279)); +#20959 = DIRECTION('',(0.886492823333,0.142995247394,-0.4400941188)); +#20960 = ADVANCED_FACE('',(#20961),#20979,.T.); +#20961 = FACE_BOUND('',#20962,.T.); +#20962 = EDGE_LOOP('',(#20963,#20964,#20965,#20973)); +#20963 = ORIENTED_EDGE('',*,*,#16885,.T.); +#20964 = ORIENTED_EDGE('',*,*,#20950,.F.); +#20965 = ORIENTED_EDGE('',*,*,#20966,.T.); +#20966 = EDGE_CURVE('',#20943,#20967,#20969,.T.); +#20967 = VERTEX_POINT('',#20968); +#20968 = CARTESIAN_POINT('',(45.974700655655,102.63251765686, + 126.18304968375)); +#20969 = LINE('',#20970,#20971); +#20970 = CARTESIAN_POINT('',(46.824950655655,102.67126900599, + 126.06378529449)); +#20971 = VECTOR('',#20972,1.); +#20972 = DIRECTION('',(-0.989297875987,-4.508865320149E-02, + 0.138768605672)); +#20973 = ORIENTED_EDGE('',*,*,#20974,.T.); +#20974 = EDGE_CURVE('',#20967,#16886,#20975,.T.); +#20975 = LINE('',#20976,#20977); +#20976 = CARTESIAN_POINT('',(45.974700655655,102.63251765686, + 126.18304968375)); +#20977 = VECTOR('',#20978,1.); +#20978 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#20979 = PLANE('',#20980); +#20980 = AXIS2_PLACEMENT_3D('',#20981,#20982,#20983); +#20981 = CARTESIAN_POINT('',(46.824950655655,102.67126900599, + 126.06378529449)); +#20982 = DIRECTION('',(0.145909946774,-0.305709856179,0.940878191514)); +#20983 = DIRECTION('',(0.989297875987,4.508865320149E-02,-0.138768605672 + )); +#20984 = ADVANCED_FACE('',(#20985),#21003,.T.); +#20985 = FACE_BOUND('',#20986,.T.); +#20986 = EDGE_LOOP('',(#20987,#20988,#20989,#20997)); +#20987 = ORIENTED_EDGE('',*,*,#16893,.T.); +#20988 = ORIENTED_EDGE('',*,*,#20974,.F.); +#20989 = ORIENTED_EDGE('',*,*,#20990,.T.); +#20990 = EDGE_CURVE('',#20967,#20991,#20993,.T.); +#20991 = VERTEX_POINT('',#20992); +#20992 = CARTESIAN_POINT('',(45.124448655655,102.67126900599, + 126.06378529449)); +#20993 = LINE('',#20994,#20995); +#20994 = CARTESIAN_POINT('',(45.974700655655,102.63251765686, + 126.18304968375)); +#20995 = VECTOR('',#20996,1.); +#20996 = DIRECTION('',(-0.98929792553,4.508854939996E-02,-0.138768286203 + )); +#20997 = ORIENTED_EDGE('',*,*,#20998,.T.); +#20998 = EDGE_CURVE('',#20991,#16894,#20999,.T.); +#20999 = LINE('',#21000,#21001); +#21000 = CARTESIAN_POINT('',(45.124448655655,102.67126900599, + 126.06378529449)); +#21001 = VECTOR('',#21002,1.); +#21002 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21003 = PLANE('',#21004); +#21004 = AXIS2_PLACEMENT_3D('',#21005,#21006,#21007); +#21005 = CARTESIAN_POINT('',(45.974700655655,102.63251765686, + 126.18304968375)); +#21006 = DIRECTION('',(-0.145909610865,-0.305709871489,0.940878238632)); +#21007 = DIRECTION('',(0.98929792553,-4.508854939996E-02,0.138768286203) + ); +#21008 = ADVANCED_FACE('',(#21009),#21027,.T.); +#21009 = FACE_BOUND('',#21010,.T.); +#21010 = EDGE_LOOP('',(#21011,#21012,#21013,#21021)); +#21011 = ORIENTED_EDGE('',*,*,#16901,.T.); +#21012 = ORIENTED_EDGE('',*,*,#20998,.F.); +#21013 = ORIENTED_EDGE('',*,*,#21014,.T.); +#21014 = EDGE_CURVE('',#20991,#21015,#21017,.T.); +#21015 = VERTEX_POINT('',#21016); +#21016 = CARTESIAN_POINT('',(44.403730655655,102.78752274436, + 125.70599307778)); +#21017 = LINE('',#21018,#21019); +#21018 = CARTESIAN_POINT('',(45.124448655655,102.67126900599, + 126.06378529449)); +#21019 = VECTOR('',#21020,1.); +#21020 = DIRECTION('',(-0.886494930395,0.142994000016,-0.440090279764)); +#21021 = ORIENTED_EDGE('',*,*,#21022,.T.); +#21022 = EDGE_CURVE('',#21015,#16902,#21023,.T.); +#21023 = LINE('',#21024,#21025); +#21024 = CARTESIAN_POINT('',(44.403730655655,102.78752274436, + 125.70599307778)); +#21025 = VECTOR('',#21026,1.); +#21026 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21027 = PLANE('',#21028); +#21028 = AXIS2_PLACEMENT_3D('',#21029,#21030,#21031); +#21029 = CARTESIAN_POINT('',(45.124448655655,102.67126900599, + 126.06378529449)); +#21030 = DIRECTION('',(-0.462738304426,-0.273941998919,0.843106780215)); +#21031 = DIRECTION('',(0.886494930395,-0.142994000016,0.440090279764)); +#21032 = ADVANCED_FACE('',(#21033),#21051,.T.); +#21033 = FACE_BOUND('',#21034,.T.); +#21034 = EDGE_LOOP('',(#21035,#21036,#21037,#21045)); +#21035 = ORIENTED_EDGE('',*,*,#16909,.T.); +#21036 = ORIENTED_EDGE('',*,*,#21022,.F.); +#21037 = ORIENTED_EDGE('',*,*,#21038,.T.); +#21038 = EDGE_CURVE('',#21015,#21039,#21041,.T.); +#21039 = VERTEX_POINT('',#21040); +#21040 = CARTESIAN_POINT('',(43.824958655655,102.97361370543, + 125.1332639905)); +#21041 = LINE('',#21042,#21043); +#21042 = CARTESIAN_POINT('',(44.403730655655,102.78752274436, + 125.70599307778)); +#21043 = VECTOR('',#21044,1.); +#21044 = DIRECTION('',(-0.692941138044,0.222799448382,-0.685706194377)); +#21045 = ORIENTED_EDGE('',*,*,#21046,.T.); +#21046 = EDGE_CURVE('',#21039,#16910,#21047,.T.); +#21047 = LINE('',#21048,#21049); +#21048 = CARTESIAN_POINT('',(43.824958655655,102.97361370543, + 125.1332639905)); +#21049 = VECTOR('',#21050,1.); +#21050 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21051 = PLANE('',#21052); +#21052 = AXIS2_PLACEMENT_3D('',#21053,#21054,#21055); +#21053 = CARTESIAN_POINT('',(44.403730655655,102.78752274436, + 125.70599307778)); +#21054 = DIRECTION('',(-0.720994160314,-0.214130587757,0.659026184745)); +#21055 = DIRECTION('',(0.692941138044,-0.222799448382,0.685706194377)); +#21056 = ADVANCED_FACE('',(#21057),#21075,.T.); +#21057 = FACE_BOUND('',#21058,.T.); +#21058 = EDGE_LOOP('',(#21059,#21060,#21061,#21069)); +#21059 = ORIENTED_EDGE('',*,*,#16917,.T.); +#21060 = ORIENTED_EDGE('',*,*,#21046,.F.); +#21061 = ORIENTED_EDGE('',*,*,#21062,.T.); +#21062 = EDGE_CURVE('',#21039,#21063,#21065,.T.); +#21063 = VERTEX_POINT('',#21064); +#21064 = CARTESIAN_POINT('',(43.400520655655,103.22528394402, + 124.35870264038)); +#21065 = LINE('',#21066,#21067); +#21066 = CARTESIAN_POINT('',(43.824958655655,102.97361370543, + 125.1332639905)); +#21067 = VECTOR('',#21068,1.); +#21068 = DIRECTION('',(-0.462156992867,0.274035691107,-0.84339513512)); +#21069 = ORIENTED_EDGE('',*,*,#21070,.T.); +#21070 = EDGE_CURVE('',#21063,#16918,#21071,.T.); +#21071 = LINE('',#21072,#21073); +#21072 = CARTESIAN_POINT('',(43.400520655655,103.22528394402, + 124.35870264038)); +#21073 = VECTOR('',#21074,1.); +#21074 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21075 = PLANE('',#21076); +#21076 = AXIS2_PLACEMENT_3D('',#21077,#21078,#21079); +#21077 = CARTESIAN_POINT('',(43.824958655655,102.97361370543, + 125.1332639905)); +#21078 = DIRECTION('',(-0.886798124685,-0.142814364865,0.439537419618)); +#21079 = DIRECTION('',(0.462156992867,-0.274035691107,0.84339513512)); +#21080 = ADVANCED_FACE('',(#21081),#21099,.T.); +#21081 = FACE_BOUND('',#21082,.T.); +#21082 = EDGE_LOOP('',(#21083,#21084,#21085,#21093)); +#21083 = ORIENTED_EDGE('',*,*,#16925,.T.); +#21084 = ORIENTED_EDGE('',*,*,#21070,.F.); +#21085 = ORIENTED_EDGE('',*,*,#21086,.T.); +#21086 = EDGE_CURVE('',#21063,#21087,#21089,.T.); +#21087 = VERTEX_POINT('',#21088); +#21088 = CARTESIAN_POINT('',(43.135935655655,103.53614546083, + 123.40196926774)); +#21089 = LINE('',#21090,#21091); +#21090 = CARTESIAN_POINT('',(43.400520655655,103.22528394402, + 124.35870264038)); +#21091 = VECTOR('',#21092,1.); +#21092 = DIRECTION('',(-0.254364109788,0.298852969714,-0.919774864924)); +#21093 = ORIENTED_EDGE('',*,*,#21094,.T.); +#21094 = EDGE_CURVE('',#21087,#16926,#21095,.T.); +#21095 = LINE('',#21096,#21097); +#21096 = CARTESIAN_POINT('',(43.135935655655,103.53614546083, + 123.40196926774)); +#21097 = VECTOR('',#21098,1.); +#21098 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21099 = PLANE('',#21100); +#21100 = AXIS2_PLACEMENT_3D('',#21101,#21102,#21103); +#21101 = CARTESIAN_POINT('',(43.400520655655,103.22528394402, + 124.35870264038)); +#21102 = DIRECTION('',(-0.967108525271,-7.86028326834E-02,0.241914644125 + )); +#21103 = DIRECTION('',(0.254364109788,-0.298852969714,0.919774864924)); +#21104 = ADVANCED_FACE('',(#21105),#21123,.T.); +#21105 = FACE_BOUND('',#21106,.T.); +#21106 = EDGE_LOOP('',(#21107,#21108,#21109,#21117)); +#21107 = ORIENTED_EDGE('',*,*,#16933,.T.); +#21108 = ORIENTED_EDGE('',*,*,#21094,.F.); +#21109 = ORIENTED_EDGE('',*,*,#21110,.T.); +#21110 = EDGE_CURVE('',#21087,#21111,#21113,.T.); +#21111 = VERTEX_POINT('',#21112); +#21112 = CARTESIAN_POINT('',(43.047327351254,103.90151479358, + 122.27747808737)); +#21113 = LINE('',#21114,#21115); +#21114 = CARTESIAN_POINT('',(43.135935655655,103.53614546083, + 123.40196926774)); +#21115 = VECTOR('',#21116,1.); +#21116 = DIRECTION('',(-7.473233440423E-02,0.308152868291, + -0.948397009674)); +#21117 = ORIENTED_EDGE('',*,*,#21118,.T.); +#21118 = EDGE_CURVE('',#21111,#16934,#21119,.T.); +#21119 = LINE('',#21120,#21121); +#21120 = CARTESIAN_POINT('',(43.047327351254,103.90151479358, + 122.27747808737)); +#21121 = VECTOR('',#21122,1.); +#21122 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21123 = PLANE('',#21124); +#21124 = AXIS2_PLACEMENT_3D('',#21125,#21126,#21127); +#21125 = CARTESIAN_POINT('',(43.135935655655,103.53614546083, + 123.40196926774)); +#21126 = DIRECTION('',(-0.997203629253,-2.309356136022E-02, + 7.107467361309E-02)); +#21127 = DIRECTION('',(7.473233440423E-02,-0.308152868291,0.948397009674 + )); +#21128 = ADVANCED_FACE('',(#21129),#21147,.T.); +#21129 = FACE_BOUND('',#21130,.T.); +#21130 = EDGE_LOOP('',(#21131,#21132,#21133,#21141)); +#21131 = ORIENTED_EDGE('',*,*,#16941,.T.); +#21132 = ORIENTED_EDGE('',*,*,#21118,.F.); +#21133 = ORIENTED_EDGE('',*,*,#21134,.T.); +#21134 = EDGE_CURVE('',#21111,#21135,#21137,.T.); +#21135 = VERTEX_POINT('',#21136); +#21136 = CARTESIAN_POINT('',(43.135935655655,104.26688443679, + 121.15298595147)); +#21137 = LINE('',#21138,#21139); +#21138 = CARTESIAN_POINT('',(43.047327351254,103.90151479358, + 122.27747808737)); +#21139 = VECTOR('',#21140,1.); +#21140 = DIRECTION('',(7.473227125666E-02,0.308152869754,-0.948397014175 + )); +#21141 = ORIENTED_EDGE('',*,*,#21142,.T.); +#21142 = EDGE_CURVE('',#21135,#16942,#21143,.T.); +#21143 = LINE('',#21144,#21145); +#21144 = CARTESIAN_POINT('',(43.135935655655,104.26688443679, + 121.15298595147)); +#21145 = VECTOR('',#21146,1.); +#21146 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21147 = PLANE('',#21148); +#21148 = AXIS2_PLACEMENT_3D('',#21149,#21150,#21151); +#21149 = CARTESIAN_POINT('',(43.047327351254,103.90151479358, + 122.27747808737)); +#21150 = DIRECTION('',(-0.997203633985,2.309354184655E-02, + -7.107461355618E-02)); +#21151 = DIRECTION('',(-7.473227125666E-02,-0.308152869754, + 0.948397014175)); +#21152 = ADVANCED_FACE('',(#21153),#21171,.T.); +#21153 = FACE_BOUND('',#21154,.T.); +#21154 = EDGE_LOOP('',(#21155,#21156,#21157,#21165)); +#21155 = ORIENTED_EDGE('',*,*,#16949,.T.); +#21156 = ORIENTED_EDGE('',*,*,#21142,.F.); +#21157 = ORIENTED_EDGE('',*,*,#21158,.T.); +#21158 = EDGE_CURVE('',#21135,#21159,#21161,.T.); +#21159 = VERTEX_POINT('',#21160); +#21160 = CARTESIAN_POINT('',(43.400520655655,104.57774564459, + 120.19625352989)); +#21161 = LINE('',#21162,#21163); +#21162 = CARTESIAN_POINT('',(43.135935655655,104.26688443679, + 121.15298595147)); +#21163 = VECTOR('',#21164,1.); +#21164 = DIRECTION('',(0.254364346283,0.298852950492,-0.919774805766)); +#21165 = ORIENTED_EDGE('',*,*,#21166,.T.); +#21166 = EDGE_CURVE('',#21159,#16950,#21167,.T.); +#21167 = LINE('',#21168,#21169); +#21168 = CARTESIAN_POINT('',(43.400520655655,104.57774564459, + 120.19625352989)); +#21169 = VECTOR('',#21170,1.); +#21170 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21171 = PLANE('',#21172); +#21172 = AXIS2_PLACEMENT_3D('',#21173,#21174,#21175); +#21173 = CARTESIAN_POINT('',(43.135935655655,104.26688443679, + 121.15298595147)); +#21174 = DIRECTION('',(-0.967108463069,7.860290576439E-02, + -0.241914869045)); +#21175 = DIRECTION('',(-0.254364346283,-0.298852950492,0.919774805766)); +#21176 = ADVANCED_FACE('',(#21177),#21195,.T.); +#21177 = FACE_BOUND('',#21178,.T.); +#21178 = EDGE_LOOP('',(#21179,#21180,#21181,#21189)); +#21179 = ORIENTED_EDGE('',*,*,#16957,.T.); +#21180 = ORIENTED_EDGE('',*,*,#21166,.F.); +#21181 = ORIENTED_EDGE('',*,*,#21182,.T.); +#21182 = EDGE_CURVE('',#21159,#21183,#21185,.T.); +#21183 = VERTEX_POINT('',#21184); +#21184 = CARTESIAN_POINT('',(43.824958655655,104.8298417086, + 119.4203816239)); +#21185 = LINE('',#21186,#21187); +#21186 = CARTESIAN_POINT('',(43.400520655655,104.57774564459, + 120.19625352989)); +#21187 = VECTOR('',#21188,1.); +#21188 = DIRECTION('',(0.461542750808,0.274134528132,-0.843699324204)); +#21189 = ORIENTED_EDGE('',*,*,#21190,.T.); +#21190 = EDGE_CURVE('',#21183,#16958,#21191,.T.); +#21191 = LINE('',#21192,#21193); +#21192 = CARTESIAN_POINT('',(43.824958655655,104.8298417086, + 119.4203816239)); +#21193 = VECTOR('',#21194,1.); +#21194 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21195 = PLANE('',#21196); +#21196 = AXIS2_PLACEMENT_3D('',#21197,#21198,#21199); +#21197 = CARTESIAN_POINT('',(43.400520655655,104.57774564459, + 120.19625352989)); +#21198 = DIRECTION('',(-0.887117968016,0.14262455363,-0.438953240704)); +#21199 = DIRECTION('',(-0.461542750808,-0.274134528132,0.843699324204)); +#21200 = ADVANCED_FACE('',(#21201),#21219,.T.); +#21201 = FACE_BOUND('',#21202,.T.); +#21202 = EDGE_LOOP('',(#21203,#21204,#21205,#21213)); +#21203 = ORIENTED_EDGE('',*,*,#16965,.T.); +#21204 = ORIENTED_EDGE('',*,*,#21190,.F.); +#21205 = ORIENTED_EDGE('',*,*,#21206,.T.); +#21206 = EDGE_CURVE('',#21183,#21207,#21209,.T.); +#21207 = VERTEX_POINT('',#21208); +#21208 = CARTESIAN_POINT('',(44.403730655655,105.01721014591, + 118.84372086897)); +#21209 = LINE('',#21210,#21211); +#21210 = CARTESIAN_POINT('',(43.824958655655,104.8298417086, + 119.4203816239)); +#21211 = VECTOR('',#21212,1.); +#21212 = DIRECTION('',(0.690473107898,0.223529934477,-0.687954399406)); +#21213 = ORIENTED_EDGE('',*,*,#21214,.T.); +#21214 = EDGE_CURVE('',#21207,#16966,#21215,.T.); +#21215 = LINE('',#21216,#21217); +#21216 = CARTESIAN_POINT('',(44.403730655655,105.01721014591, + 118.84372086897)); +#21217 = VECTOR('',#21218,1.); +#21218 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21219 = PLANE('',#21220); +#21220 = AXIS2_PLACEMENT_3D('',#21221,#21222,#21223); +#21221 = CARTESIAN_POINT('',(43.824958655655,104.8298417086, + 119.4203816239)); +#21222 = DIRECTION('',(-0.723358062974,0.213367924499,-0.656678948593)); +#21223 = DIRECTION('',(-0.690473107898,-0.223529934477,0.687954399406)); +#21224 = ADVANCED_FACE('',(#21225),#21243,.T.); +#21225 = FACE_BOUND('',#21226,.T.); +#21226 = EDGE_LOOP('',(#21227,#21228,#21229,#21237)); +#21227 = ORIENTED_EDGE('',*,*,#16973,.T.); +#21228 = ORIENTED_EDGE('',*,*,#21214,.F.); +#21229 = ORIENTED_EDGE('',*,*,#21230,.T.); +#21230 = EDGE_CURVE('',#21207,#21231,#21233,.T.); +#21231 = VERTEX_POINT('',#21232); +#21232 = CARTESIAN_POINT('',(45.124448655655,105.13346388428, + 118.48592865226)); +#21233 = LINE('',#21234,#21235); +#21234 = CARTESIAN_POINT('',(44.403730655655,105.01721014591, + 118.84372086897)); +#21235 = VECTOR('',#21236,1.); +#21236 = DIRECTION('',(0.886494930395,0.142994000016,-0.440090279764)); +#21237 = ORIENTED_EDGE('',*,*,#21238,.T.); +#21238 = EDGE_CURVE('',#21231,#16974,#21239,.T.); +#21239 = LINE('',#21240,#21241); +#21240 = CARTESIAN_POINT('',(45.124448655655,105.13346388428, + 118.48592865226)); +#21241 = VECTOR('',#21242,1.); +#21242 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21243 = PLANE('',#21244); +#21244 = AXIS2_PLACEMENT_3D('',#21245,#21246,#21247); +#21245 = CARTESIAN_POINT('',(44.403730655655,105.01721014591, + 118.84372086897)); +#21246 = DIRECTION('',(-0.462738304426,0.273941998919,-0.843106780215)); +#21247 = DIRECTION('',(-0.886494930395,-0.142994000016,0.440090279764)); +#21248 = ADVANCED_FACE('',(#21249),#21267,.T.); +#21249 = FACE_BOUND('',#21250,.T.); +#21250 = EDGE_LOOP('',(#21251,#21252,#21253,#21261)); +#21251 = ORIENTED_EDGE('',*,*,#16981,.T.); +#21252 = ORIENTED_EDGE('',*,*,#21238,.F.); +#21253 = ORIENTED_EDGE('',*,*,#21254,.T.); +#21254 = EDGE_CURVE('',#21231,#21255,#21257,.T.); +#21255 = VERTEX_POINT('',#21256); +#21256 = CARTESIAN_POINT('',(45.974700655655,105.17221523341, + 118.36666426301)); +#21257 = LINE('',#21258,#21259); +#21258 = CARTESIAN_POINT('',(45.124448655655,105.13346388428, + 118.48592865226)); +#21259 = VECTOR('',#21260,1.); +#21260 = DIRECTION('',(0.98929792553,4.508854939996E-02,-0.138768286203) + ); +#21261 = ORIENTED_EDGE('',*,*,#21262,.T.); +#21262 = EDGE_CURVE('',#21255,#16982,#21263,.T.); +#21263 = LINE('',#21264,#21265); +#21264 = CARTESIAN_POINT('',(45.974700655655,105.17221523341, + 118.36666426301)); +#21265 = VECTOR('',#21266,1.); +#21266 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21267 = PLANE('',#21268); +#21268 = AXIS2_PLACEMENT_3D('',#21269,#21270,#21271); +#21269 = CARTESIAN_POINT('',(45.124448655655,105.13346388428, + 118.48592865226)); +#21270 = DIRECTION('',(-0.145909610865,0.305709871489,-0.940878238632)); +#21271 = DIRECTION('',(-0.98929792553,-4.508854939996E-02,0.138768286203 + )); +#21272 = ADVANCED_FACE('',(#21273),#21291,.T.); +#21273 = FACE_BOUND('',#21274,.T.); +#21274 = EDGE_LOOP('',(#21275,#21276,#21277,#21285)); +#21275 = ORIENTED_EDGE('',*,*,#16989,.T.); +#21276 = ORIENTED_EDGE('',*,*,#21262,.F.); +#21277 = ORIENTED_EDGE('',*,*,#21278,.T.); +#21278 = EDGE_CURVE('',#21255,#21279,#21281,.T.); +#21279 = VERTEX_POINT('',#21280); +#21280 = CARTESIAN_POINT('',(46.824950655655,105.13346388428, + 118.48592865226)); +#21281 = LINE('',#21282,#21283); +#21282 = CARTESIAN_POINT('',(45.974700655655,105.17221523341, + 118.36666426301)); +#21283 = VECTOR('',#21284,1.); +#21284 = DIRECTION('',(0.989297875987,-4.508865320149E-02,0.138768605672 + )); +#21285 = ORIENTED_EDGE('',*,*,#21286,.T.); +#21286 = EDGE_CURVE('',#21279,#16990,#21287,.T.); +#21287 = LINE('',#21288,#21289); +#21288 = CARTESIAN_POINT('',(46.824950655655,105.13346388428, + 118.48592865226)); +#21289 = VECTOR('',#21290,1.); +#21290 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21291 = PLANE('',#21292); +#21292 = AXIS2_PLACEMENT_3D('',#21293,#21294,#21295); +#21293 = CARTESIAN_POINT('',(45.974700655655,105.17221523341, + 118.36666426301)); +#21294 = DIRECTION('',(0.145909946774,0.305709856179,-0.940878191514)); +#21295 = DIRECTION('',(-0.989297875987,4.508865320149E-02, + -0.138768605672)); +#21296 = ADVANCED_FACE('',(#21297),#21315,.T.); +#21297 = FACE_BOUND('',#21298,.T.); +#21298 = EDGE_LOOP('',(#21299,#21300,#21301,#21309)); +#21299 = ORIENTED_EDGE('',*,*,#16997,.T.); +#21300 = ORIENTED_EDGE('',*,*,#21286,.F.); +#21301 = ORIENTED_EDGE('',*,*,#21302,.T.); +#21302 = EDGE_CURVE('',#21279,#21303,#21305,.T.); +#21303 = VERTEX_POINT('',#21304); +#21304 = CARTESIAN_POINT('',(47.545660655655,105.01721014591, + 118.84372086897)); +#21305 = LINE('',#21306,#21307); +#21306 = CARTESIAN_POINT('',(46.824950655655,105.13346388428, + 118.48592865226)); +#21307 = VECTOR('',#21308,1.); +#21308 = DIRECTION('',(0.886492823333,-0.142995247394,0.4400941188)); +#21309 = ORIENTED_EDGE('',*,*,#21310,.T.); +#21310 = EDGE_CURVE('',#21303,#16998,#21311,.T.); +#21311 = LINE('',#21312,#21313); +#21312 = CARTESIAN_POINT('',(47.545660655655,105.01721014591, + 118.84372086897)); +#21313 = VECTOR('',#21314,1.); +#21314 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21315 = PLANE('',#21316); +#21316 = AXIS2_PLACEMENT_3D('',#21317,#21318,#21319); +#21317 = CARTESIAN_POINT('',(46.824950655655,105.13346388428, + 118.48592865226)); +#21318 = DIRECTION('',(0.462742341027,0.273941347801,-0.843104776279)); +#21319 = DIRECTION('',(-0.886492823333,0.142995247394,-0.4400941188)); +#21320 = ADVANCED_FACE('',(#21321),#21339,.T.); +#21321 = FACE_BOUND('',#21322,.T.); +#21322 = EDGE_LOOP('',(#21323,#21324,#21325,#21333)); +#21323 = ORIENTED_EDGE('',*,*,#17005,.T.); +#21324 = ORIENTED_EDGE('',*,*,#21310,.F.); +#21325 = ORIENTED_EDGE('',*,*,#21326,.T.); +#21326 = EDGE_CURVE('',#21303,#21327,#21329,.T.); +#21327 = VERTEX_POINT('',#21328); +#21328 = CARTESIAN_POINT('',(48.120305655655,104.8298417086, + 119.4203816239)); +#21329 = LINE('',#21330,#21331); +#21330 = CARTESIAN_POINT('',(47.545660655655,105.01721014591, + 118.84372086897)); +#21331 = VECTOR('',#21332,1.); +#21332 = DIRECTION('',(0.687883723009,-0.224290993982,0.690296699715)); +#21333 = ORIENTED_EDGE('',*,*,#21334,.T.); +#21334 = EDGE_CURVE('',#21327,#17006,#21335,.T.); +#21335 = LINE('',#21336,#21337); +#21336 = CARTESIAN_POINT('',(48.120305655655,104.8298417086, + 119.4203816239)); +#21337 = VECTOR('',#21338,1.); +#21338 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21339 = PLANE('',#21340); +#21340 = AXIS2_PLACEMENT_3D('',#21341,#21342,#21343); +#21341 = CARTESIAN_POINT('',(47.545660655655,105.01721014591, + 118.84372086897)); +#21342 = DIRECTION('',(0.725820903267,0.212567760564,-0.654216297221)); +#21343 = DIRECTION('',(-0.687883723009,0.224290993982,-0.690296699715)); +#21344 = ADVANCED_FACE('',(#21345),#21363,.T.); +#21345 = FACE_BOUND('',#21346,.T.); +#21346 = EDGE_LOOP('',(#21347,#21348,#21349,#21357)); +#21347 = ORIENTED_EDGE('',*,*,#17013,.T.); +#21348 = ORIENTED_EDGE('',*,*,#21334,.F.); +#21349 = ORIENTED_EDGE('',*,*,#21350,.T.); +#21350 = EDGE_CURVE('',#21327,#21351,#21353,.T.); +#21351 = VERTEX_POINT('',#21352); +#21352 = CARTESIAN_POINT('',(48.543360655655,104.57774564459, + 120.19625352989)); +#21353 = LINE('',#21354,#21355); +#21354 = CARTESIAN_POINT('',(48.120305655655,104.8298417086, + 119.4203816239)); +#21355 = VECTOR('',#21356,1.); +#21356 = DIRECTION('',(0.460357979363,-0.274324696868,0.844284603392)); +#21357 = ORIENTED_EDGE('',*,*,#21358,.T.); +#21358 = EDGE_CURVE('',#21351,#17014,#21359,.T.); +#21359 = LINE('',#21360,#21361); +#21360 = CARTESIAN_POINT('',(48.543360655655,104.57774564459, + 120.19625352989)); +#21361 = VECTOR('',#21362,1.); +#21362 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21363 = PLANE('',#21364); +#21364 = AXIS2_PLACEMENT_3D('',#21365,#21366,#21367); +#21365 = CARTESIAN_POINT('',(48.120305655655,104.8298417086, + 119.4203816239)); +#21366 = DIRECTION('',(0.887733366973,0.142258439119,-0.437826456102)); +#21367 = DIRECTION('',(-0.460357979363,0.274324696868,-0.844284603392)); +#21368 = ADVANCED_FACE('',(#21369),#21380,.T.); +#21369 = FACE_BOUND('',#21370,.T.); +#21370 = EDGE_LOOP('',(#21371,#21372,#21373,#21379)); +#21371 = ORIENTED_EDGE('',*,*,#17021,.T.); +#21372 = ORIENTED_EDGE('',*,*,#21358,.F.); +#21373 = ORIENTED_EDGE('',*,*,#21374,.T.); +#21374 = EDGE_CURVE('',#21351,#20815,#21375,.T.); +#21375 = LINE('',#21376,#21377); +#21376 = CARTESIAN_POINT('',(48.543360655655,104.57774564459, + 120.19625352989)); +#21377 = VECTOR('',#21378,1.); +#21378 = DIRECTION('',(0.250642466313,-0.299153086955,0.920698530815)); +#21379 = ORIENTED_EDGE('',*,*,#20814,.T.); +#21380 = PLANE('',#21381); +#21381 = AXIS2_PLACEMENT_3D('',#21382,#21383,#21384); +#21382 = CARTESIAN_POINT('',(48.543360655655,104.57774564459, + 120.19625352989)); +#21383 = DIRECTION('',(0.968079725064,7.745278160291E-02,-0.238375150848 + )); +#21384 = DIRECTION('',(-0.250642466313,0.299153086955,-0.920698530815)); +#21385 = ADVANCED_FACE('',(#21386),#21402,.T.); +#21386 = FACE_BOUND('',#21387,.T.); +#21387 = EDGE_LOOP('',(#21388,#21394,#21395,#21401)); +#21388 = ORIENTED_EDGE('',*,*,#21389,.T.); +#21389 = EDGE_CURVE('',#20218,#20783,#21390,.T.); +#21390 = LINE('',#21391,#21392); +#21391 = CARTESIAN_POINT('',(47.666930655655,102.41730878548, + 123.60932650678)); +#21392 = VECTOR('',#21393,1.); +#21393 = DIRECTION('',(-0.130290988727,-0.30638287113,0.94294951855)); +#21394 = ORIENTED_EDGE('',*,*,#20799,.F.); +#21395 = ORIENTED_EDGE('',*,*,#21396,.T.); +#21396 = EDGE_CURVE('',#20792,#20226,#21397,.T.); +#21397 = LINE('',#21398,#21399); +#21398 = CARTESIAN_POINT('',(47.666930655655,103.36836530177, + 123.91834350115)); +#21399 = VECTOR('',#21400,1.); +#21400 = DIRECTION('',(0.130290988727,0.30638287113,-0.94294951855)); +#21401 = ORIENTED_EDGE('',*,*,#20225,.T.); +#21402 = PLANE('',#21403); +#21403 = AXIS2_PLACEMENT_3D('',#21404,#21405,#21406); +#21404 = CARTESIAN_POINT('',(47.666930655655,103.36836530177, + 123.91834350115)); +#21405 = DIRECTION('',(-0.991475798119,4.026212973042E-02, + -0.123914093843)); +#21406 = DIRECTION('',(-0.130290988727,-0.30638287113,0.94294951855)); +#21407 = ADVANCED_FACE('',(#21408,#21434),#21456,.T.); +#21408 = FACE_BOUND('',#21409,.T.); +#21409 = EDGE_LOOP('',(#21410,#21411,#21412,#21413,#21414,#21415,#21416, + #21417,#21418,#21419,#21420,#21421,#21422,#21423,#21424,#21425, + #21426,#21427,#21428,#21429,#21430,#21431,#21432,#21433)); +#21410 = ORIENTED_EDGE('',*,*,#20822,.F.); +#21411 = ORIENTED_EDGE('',*,*,#21374,.F.); +#21412 = ORIENTED_EDGE('',*,*,#21350,.F.); +#21413 = ORIENTED_EDGE('',*,*,#21326,.F.); +#21414 = ORIENTED_EDGE('',*,*,#21302,.F.); +#21415 = ORIENTED_EDGE('',*,*,#21278,.F.); +#21416 = ORIENTED_EDGE('',*,*,#21254,.F.); +#21417 = ORIENTED_EDGE('',*,*,#21230,.F.); +#21418 = ORIENTED_EDGE('',*,*,#21206,.F.); +#21419 = ORIENTED_EDGE('',*,*,#21182,.F.); +#21420 = ORIENTED_EDGE('',*,*,#21158,.F.); +#21421 = ORIENTED_EDGE('',*,*,#21134,.F.); +#21422 = ORIENTED_EDGE('',*,*,#21110,.F.); +#21423 = ORIENTED_EDGE('',*,*,#21086,.F.); +#21424 = ORIENTED_EDGE('',*,*,#21062,.F.); +#21425 = ORIENTED_EDGE('',*,*,#21038,.F.); +#21426 = ORIENTED_EDGE('',*,*,#21014,.F.); +#21427 = ORIENTED_EDGE('',*,*,#20990,.F.); +#21428 = ORIENTED_EDGE('',*,*,#20966,.F.); +#21429 = ORIENTED_EDGE('',*,*,#20942,.F.); +#21430 = ORIENTED_EDGE('',*,*,#20918,.F.); +#21431 = ORIENTED_EDGE('',*,*,#20894,.F.); +#21432 = ORIENTED_EDGE('',*,*,#20870,.F.); +#21433 = ORIENTED_EDGE('',*,*,#20846,.F.); +#21434 = FACE_BOUND('',#21435,.T.); +#21435 = EDGE_LOOP('',(#21436,#21437,#21438,#21439,#21440,#21441,#21442, + #21443,#21444,#21445,#21446,#21447,#21448,#21449,#21450,#21451, + #21452,#21453,#21454,#21455)); +#21436 = ORIENTED_EDGE('',*,*,#20233,.F.); +#21437 = ORIENTED_EDGE('',*,*,#21396,.F.); +#21438 = ORIENTED_EDGE('',*,*,#20791,.F.); +#21439 = ORIENTED_EDGE('',*,*,#20760,.F.); +#21440 = ORIENTED_EDGE('',*,*,#20729,.F.); +#21441 = ORIENTED_EDGE('',*,*,#20698,.F.); +#21442 = ORIENTED_EDGE('',*,*,#20667,.F.); +#21443 = ORIENTED_EDGE('',*,*,#20636,.F.); +#21444 = ORIENTED_EDGE('',*,*,#20605,.F.); +#21445 = ORIENTED_EDGE('',*,*,#20574,.F.); +#21446 = ORIENTED_EDGE('',*,*,#20543,.F.); +#21447 = ORIENTED_EDGE('',*,*,#20512,.F.); +#21448 = ORIENTED_EDGE('',*,*,#20481,.F.); +#21449 = ORIENTED_EDGE('',*,*,#20450,.F.); +#21450 = ORIENTED_EDGE('',*,*,#20419,.F.); +#21451 = ORIENTED_EDGE('',*,*,#20388,.F.); +#21452 = ORIENTED_EDGE('',*,*,#20357,.F.); +#21453 = ORIENTED_EDGE('',*,*,#20326,.F.); +#21454 = ORIENTED_EDGE('',*,*,#20295,.F.); +#21455 = ORIENTED_EDGE('',*,*,#20264,.F.); +#21456 = PLANE('',#21457); +#21457 = AXIS2_PLACEMENT_3D('',#21458,#21459,#21460); +#21458 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#21459 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#21460 = DIRECTION('',(-1.,0.,0.)); +#21461 = ADVANCED_FACE('',(#21462),#21487,.T.); +#21462 = FACE_BOUND('',#21463,.T.); +#21463 = EDGE_LOOP('',(#21464,#21465,#21473,#21481)); +#21464 = ORIENTED_EDGE('',*,*,#16555,.T.); +#21465 = ORIENTED_EDGE('',*,*,#21466,.F.); +#21466 = EDGE_CURVE('',#21467,#16558,#21469,.T.); +#21467 = VERTEX_POINT('',#21468); +#21468 = CARTESIAN_POINT('',(55.185518655655,103.383698107, + 123.87115397893)); +#21469 = LINE('',#21470,#21471); +#21470 = CARTESIAN_POINT('',(55.185518655655,103.383698107, + 123.87115397893)); +#21471 = VECTOR('',#21472,1.); +#21472 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21473 = ORIENTED_EDGE('',*,*,#21474,.T.); +#21474 = EDGE_CURVE('',#21467,#21475,#21477,.T.); +#21475 = VERTEX_POINT('',#21476); +#21476 = CARTESIAN_POINT('',(55.185518655655,103.37347891499, + 123.90260541792)); +#21477 = LINE('',#21478,#21479); +#21478 = CARTESIAN_POINT('',(55.185518655655,103.383698107, + 123.87115397893)); +#21479 = VECTOR('',#21480,1.); +#21480 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#21481 = ORIENTED_EDGE('',*,*,#21482,.T.); +#21482 = EDGE_CURVE('',#21475,#16556,#21483,.T.); +#21483 = LINE('',#21484,#21485); +#21484 = CARTESIAN_POINT('',(55.185518655655,103.37347891499, + 123.90260541792)); +#21485 = VECTOR('',#21486,1.); +#21486 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21487 = PLANE('',#21488); +#21488 = AXIS2_PLACEMENT_3D('',#21489,#21490,#21491); +#21489 = CARTESIAN_POINT('',(55.185518655655,103.383698107, + 123.87115397893)); +#21490 = DIRECTION('',(1.,0.,0.)); +#21491 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#21492 = ADVANCED_FACE('',(#21493),#21511,.T.); +#21493 = FACE_BOUND('',#21494,.T.); +#21494 = EDGE_LOOP('',(#21495,#21496,#21497,#21505)); +#21495 = ORIENTED_EDGE('',*,*,#16565,.T.); +#21496 = ORIENTED_EDGE('',*,*,#21482,.F.); +#21497 = ORIENTED_EDGE('',*,*,#21498,.T.); +#21498 = EDGE_CURVE('',#21475,#21499,#21501,.T.); +#21499 = VERTEX_POINT('',#21500); +#21500 = CARTESIAN_POINT('',(55.095946655655,103.17205762084, + 124.52251641898)); +#21501 = LINE('',#21502,#21503); +#21502 = CARTESIAN_POINT('',(55.185518655655,103.37347891499, + 123.90260541792)); +#21503 = VECTOR('',#21504,1.); +#21504 = DIRECTION('',(-0.136140342999,-0.306139910613,0.942201762967)); +#21505 = ORIENTED_EDGE('',*,*,#21506,.T.); +#21506 = EDGE_CURVE('',#21499,#16566,#21507,.T.); +#21507 = LINE('',#21508,#21509); +#21508 = CARTESIAN_POINT('',(55.095946655655,103.17205762084, + 124.52251641898)); +#21509 = VECTOR('',#21510,1.); +#21510 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21511 = PLANE('',#21512); +#21512 = AXIS2_PLACEMENT_3D('',#21513,#21514,#21515); +#21513 = CARTESIAN_POINT('',(55.185518655655,103.37347891499, + 123.90260541792)); +#21514 = DIRECTION('',(0.99068956137,-4.206967960666E-02,0.12947716034) + ); +#21515 = DIRECTION('',(0.136140342999,0.306139910613,-0.942201762967)); +#21516 = ADVANCED_FACE('',(#21517),#21535,.T.); +#21517 = FACE_BOUND('',#21518,.T.); +#21518 = EDGE_LOOP('',(#21519,#21520,#21521,#21529)); +#21519 = ORIENTED_EDGE('',*,*,#16573,.T.); +#21520 = ORIENTED_EDGE('',*,*,#21506,.F.); +#21521 = ORIENTED_EDGE('',*,*,#21522,.T.); +#21522 = EDGE_CURVE('',#21499,#21523,#21525,.T.); +#21523 = VERTEX_POINT('',#21524); +#21524 = CARTESIAN_POINT('',(54.827228655655,102.99363182632, + 125.07165454937)); +#21525 = LINE('',#21526,#21527); +#21526 = CARTESIAN_POINT('',(55.095946655655,103.17205762084, + 124.52251641898)); +#21527 = VECTOR('',#21528,1.); +#21528 = DIRECTION('',(-0.421938306747,-0.280162391872,0.862251181199)); +#21529 = ORIENTED_EDGE('',*,*,#21530,.T.); +#21530 = EDGE_CURVE('',#21523,#16574,#21531,.T.); +#21531 = LINE('',#21532,#21533); +#21532 = CARTESIAN_POINT('',(54.827228655655,102.99363182632, + 125.07165454937)); +#21533 = VECTOR('',#21534,1.); +#21534 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21535 = PLANE('',#21536); +#21536 = AXIS2_PLACEMENT_3D('',#21537,#21538,#21539); +#21537 = CARTESIAN_POINT('',(55.095946655655,103.17205762084, + 124.52251641898)); +#21538 = DIRECTION('',(0.906624544836,-0.130386107363,0.401287176107)); +#21539 = DIRECTION('',(0.421938306747,0.280162391872,-0.862251181199)); +#21540 = ADVANCED_FACE('',(#21541),#21559,.T.); +#21541 = FACE_BOUND('',#21542,.T.); +#21542 = EDGE_LOOP('',(#21543,#21544,#21545,#21553)); +#21543 = ORIENTED_EDGE('',*,*,#16581,.T.); +#21544 = ORIENTED_EDGE('',*,*,#21530,.F.); +#21545 = ORIENTED_EDGE('',*,*,#21546,.T.); +#21546 = EDGE_CURVE('',#21523,#21547,#21549,.T.); +#21547 = VERTEX_POINT('',#21548); +#21548 = CARTESIAN_POINT('',(54.406926655655,102.84331112744, + 125.53429408961)); +#21549 = LINE('',#21550,#21551); +#21550 = CARTESIAN_POINT('',(54.827228655655,102.99363182632, + 125.07165454937)); +#21551 = VECTOR('',#21552,1.); +#21552 = DIRECTION('',(-0.653787194936,-0.233826505849,0.719643987607)); +#21553 = ORIENTED_EDGE('',*,*,#21554,.T.); +#21554 = EDGE_CURVE('',#21547,#16582,#21555,.T.); +#21555 = LINE('',#21556,#21557); +#21556 = CARTESIAN_POINT('',(54.406926655655,102.84331112744, + 125.53429408961)); +#21557 = VECTOR('',#21558,1.); +#21558 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21559 = PLANE('',#21560); +#21560 = AXIS2_PLACEMENT_3D('',#21561,#21562,#21563); +#21561 = CARTESIAN_POINT('',(54.827228655655,102.99363182632, + 125.07165454937)); +#21562 = DIRECTION('',(0.756678467869,-0.20203135394,0.621788572015)); +#21563 = DIRECTION('',(0.653787194936,0.233826505849,-0.719643987607)); +#21564 = ADVANCED_FACE('',(#21565),#21583,.T.); +#21565 = FACE_BOUND('',#21566,.T.); +#21566 = EDGE_LOOP('',(#21567,#21568,#21569,#21577)); +#21567 = ORIENTED_EDGE('',*,*,#16589,.T.); +#21568 = ORIENTED_EDGE('',*,*,#21554,.F.); +#21569 = ORIENTED_EDGE('',*,*,#21570,.T.); +#21570 = EDGE_CURVE('',#21547,#21571,#21573,.T.); +#21571 = VERTEX_POINT('',#21572); +#21572 = CARTESIAN_POINT('',(53.862600655655,102.72961234158, + 125.88422297105)); +#21573 = LINE('',#21574,#21575); +#21574 = CARTESIAN_POINT('',(54.406926655655,102.84331112744, + 125.53429408961)); +#21575 = VECTOR('',#21576,1.); +#21576 = DIRECTION('',(-0.828483636637,-0.17305361785,0.532604270706)); +#21577 = ORIENTED_EDGE('',*,*,#21578,.T.); +#21578 = EDGE_CURVE('',#21571,#16590,#21579,.T.); +#21579 = LINE('',#21580,#21581); +#21580 = CARTESIAN_POINT('',(53.862600655655,102.72961234158, + 125.88422297105)); +#21581 = VECTOR('',#21582,1.); +#21582 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21583 = PLANE('',#21584); +#21584 = AXIS2_PLACEMENT_3D('',#21585,#21586,#21587); +#21585 = CARTESIAN_POINT('',(54.406926655655,102.84331112744, + 125.53429408961)); +#21586 = DIRECTION('',(0.560013271115,-0.256015523282,0.787934761267)); +#21587 = DIRECTION('',(0.828483636637,0.17305361785,-0.532604270706)); +#21588 = ADVANCED_FACE('',(#21589),#21607,.T.); +#21589 = FACE_BOUND('',#21590,.T.); +#21590 = EDGE_LOOP('',(#21591,#21592,#21593,#21601)); +#21591 = ORIENTED_EDGE('',*,*,#16597,.T.); +#21592 = ORIENTED_EDGE('',*,*,#21578,.F.); +#21593 = ORIENTED_EDGE('',*,*,#21594,.T.); +#21594 = EDGE_CURVE('',#21571,#21595,#21597,.T.); +#21595 = VERTEX_POINT('',#21596); +#21596 = CARTESIAN_POINT('',(53.219055655655,102.65679403194, + 126.10833468383)); +#21597 = LINE('',#21598,#21599); +#21598 = CARTESIAN_POINT('',(53.862600655655,102.72961234158, + 125.88422297105)); +#21599 = VECTOR('',#21600,1.); +#21600 = DIRECTION('',(-0.939027849092,-0.106252741728,0.327012313996)); +#21601 = ORIENTED_EDGE('',*,*,#21602,.T.); +#21602 = EDGE_CURVE('',#21595,#16598,#21603,.T.); +#21603 = LINE('',#21604,#21605); +#21604 = CARTESIAN_POINT('',(53.219055655655,102.65679403194, + 126.10833468383)); +#21605 = VECTOR('',#21606,1.); +#21606 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21607 = PLANE('',#21608); +#21608 = AXIS2_PLACEMENT_3D('',#21609,#21610,#21611); +#21609 = CARTESIAN_POINT('',(53.862600655655,102.72961234158, + 125.88422297105)); +#21610 = DIRECTION('',(0.343841095027,-0.290175563561,0.893068554862)); +#21611 = DIRECTION('',(0.939027849092,0.106252741728,-0.327012313996)); +#21612 = ADVANCED_FACE('',(#21613),#21631,.T.); +#21613 = FACE_BOUND('',#21614,.T.); +#21614 = EDGE_LOOP('',(#21615,#21616,#21617,#21625)); +#21615 = ORIENTED_EDGE('',*,*,#16605,.T.); +#21616 = ORIENTED_EDGE('',*,*,#21602,.F.); +#21617 = ORIENTED_EDGE('',*,*,#21618,.T.); +#21618 = EDGE_CURVE('',#21595,#21619,#21621,.T.); +#21619 = VERTEX_POINT('',#21620); +#21620 = CARTESIAN_POINT('',(52.512120655655,102.63252136507, + 126.18303827107)); +#21621 = LINE('',#21622,#21623); +#21622 = CARTESIAN_POINT('',(53.219055655655,102.65679403194, + 126.10833468383)); +#21623 = VECTOR('',#21624,1.); +#21624 = DIRECTION('',(-0.993883786109,-3.41250752217E-02,0.105026182215 + )); +#21625 = ORIENTED_EDGE('',*,*,#21626,.T.); +#21626 = EDGE_CURVE('',#21619,#16606,#21627,.T.); +#21627 = LINE('',#21628,#21629); +#21628 = CARTESIAN_POINT('',(52.512120655655,102.63252136507, + 126.18303827107)); +#21629 = VECTOR('',#21630,1.); +#21630 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21631 = PLANE('',#21632); +#21632 = AXIS2_PLACEMENT_3D('',#21633,#21634,#21635); +#21633 = CARTESIAN_POINT('',(53.219055655655,102.65679403194, + 126.10833468383)); +#21634 = DIRECTION('',(0.110431063155,-0.307126980341,0.945239651219)); +#21635 = DIRECTION('',(0.993883786109,3.41250752217E-02,-0.105026182215) + ); +#21636 = ADVANCED_FACE('',(#21637),#21655,.T.); +#21637 = FACE_BOUND('',#21638,.T.); +#21638 = EDGE_LOOP('',(#21639,#21640,#21641,#21649)); +#21639 = ORIENTED_EDGE('',*,*,#16613,.T.); +#21640 = ORIENTED_EDGE('',*,*,#21626,.F.); +#21641 = ORIENTED_EDGE('',*,*,#21642,.T.); +#21642 = EDGE_CURVE('',#21619,#21643,#21645,.T.); +#21643 = VERTEX_POINT('',#21644); +#21644 = CARTESIAN_POINT('',(51.829993655655,102.65509073027, + 126.11357690735)); +#21645 = LINE('',#21646,#21647); +#21646 = CARTESIAN_POINT('',(52.512120655655,102.63252136507, + 126.18303827107)); +#21647 = VECTOR('',#21648,1.); +#21648 = DIRECTION('',(-0.994316722842,3.289870836875E-02, + -0.101251813141)); +#21649 = ORIENTED_EDGE('',*,*,#21650,.T.); +#21650 = EDGE_CURVE('',#21643,#16614,#21651,.T.); +#21651 = LINE('',#21652,#21653); +#21652 = CARTESIAN_POINT('',(51.829993655655,102.65509073027, + 126.11357690735)); +#21653 = VECTOR('',#21654,1.); +#21654 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21655 = PLANE('',#21656); +#21656 = AXIS2_PLACEMENT_3D('',#21657,#21658,#21659); +#21657 = CARTESIAN_POINT('',(52.512120655655,102.63252136507, + 126.18303827107)); +#21658 = DIRECTION('',(-0.106462456653,-0.307260765149,0.94565139852)); +#21659 = DIRECTION('',(0.994316722842,-3.289870836875E-02,0.101251813141 + )); +#21660 = ADVANCED_FACE('',(#21661),#21679,.T.); +#21661 = FACE_BOUND('',#21662,.T.); +#21662 = EDGE_LOOP('',(#21663,#21664,#21665,#21673)); +#21663 = ORIENTED_EDGE('',*,*,#16621,.T.); +#21664 = ORIENTED_EDGE('',*,*,#21650,.F.); +#21665 = ORIENTED_EDGE('',*,*,#21666,.T.); +#21666 = EDGE_CURVE('',#21643,#21667,#21669,.T.); +#21667 = VERTEX_POINT('',#21668); +#21668 = CARTESIAN_POINT('',(51.227790655655,102.72279913489, + 125.90519186512)); +#21669 = LINE('',#21670,#21671); +#21670 = CARTESIAN_POINT('',(51.829993655655,102.65509073027, + 126.11357690735)); +#21671 = VECTOR('',#21672,1.); +#21672 = DIRECTION('',(-0.939730213375,0.105658114492,-0.32518223954)); +#21673 = ORIENTED_EDGE('',*,*,#21674,.T.); +#21674 = EDGE_CURVE('',#21667,#16622,#21675,.T.); +#21675 = LINE('',#21676,#21677); +#21676 = CARTESIAN_POINT('',(51.227790655655,102.72279913489, + 125.90519186512)); +#21677 = VECTOR('',#21678,1.); +#21678 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21679 = PLANE('',#21680); +#21680 = AXIS2_PLACEMENT_3D('',#21681,#21682,#21683); +#21681 = CARTESIAN_POINT('',(51.829993655655,102.65509073027, + 126.11357690735)); +#21682 = DIRECTION('',(-0.34191684087,-0.29039260606,0.89373654299)); +#21683 = DIRECTION('',(0.939730213375,-0.105658114492,0.32518223954)); +#21684 = ADVANCED_FACE('',(#21685),#21703,.T.); +#21685 = FACE_BOUND('',#21686,.T.); +#21686 = EDGE_LOOP('',(#21687,#21688,#21689,#21697)); +#21687 = ORIENTED_EDGE('',*,*,#16629,.T.); +#21688 = ORIENTED_EDGE('',*,*,#21674,.F.); +#21689 = ORIENTED_EDGE('',*,*,#21690,.T.); +#21690 = EDGE_CURVE('',#21667,#21691,#21693,.T.); +#21691 = VERTEX_POINT('',#21692); +#21692 = CARTESIAN_POINT('',(50.726182655655,102.82925857962, + 125.57754338469)); +#21693 = LINE('',#21694,#21695); +#21694 = CARTESIAN_POINT('',(51.227790655655,102.72279913489, + 125.90519186512)); +#21695 = VECTOR('',#21696,1.); +#21696 = DIRECTION('',(-0.824306893797,0.174947876036,-0.538434197939)); +#21697 = ORIENTED_EDGE('',*,*,#21698,.T.); +#21698 = EDGE_CURVE('',#21691,#16630,#21699,.T.); +#21699 = LINE('',#21700,#21701); +#21700 = CARTESIAN_POINT('',(50.726182655655,102.82925857962, + 125.57754338469)); +#21701 = VECTOR('',#21702,1.); +#21702 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21703 = PLANE('',#21704); +#21704 = AXIS2_PLACEMENT_3D('',#21705,#21706,#21707); +#21705 = CARTESIAN_POINT('',(51.227790655655,102.72279913489, + 125.90519186512)); +#21706 = DIRECTION('',(-0.56614321937,-0.254724838764,0.783962442772)); +#21707 = DIRECTION('',(0.824306893797,-0.174947876036,0.538434197939)); +#21708 = ADVANCED_FACE('',(#21709),#21727,.T.); +#21709 = FACE_BOUND('',#21710,.T.); +#21710 = EDGE_LOOP('',(#21711,#21712,#21713,#21721)); +#21711 = ORIENTED_EDGE('',*,*,#16637,.T.); +#21712 = ORIENTED_EDGE('',*,*,#21698,.F.); +#21713 = ORIENTED_EDGE('',*,*,#21714,.T.); +#21714 = EDGE_CURVE('',#21691,#21715,#21717,.T.); +#21715 = VERTEX_POINT('',#21716); +#21716 = CARTESIAN_POINT('',(50.345840655655,102.96808168319, + 125.15028980425)); +#21717 = LINE('',#21718,#21719); +#21718 = CARTESIAN_POINT('',(50.726182655655,102.82925857962, + 125.57754338469)); +#21719 = VECTOR('',#21720,1.); +#21720 = DIRECTION('',(-0.64615507419,0.235843669084,-0.725852177686)); +#21721 = ORIENTED_EDGE('',*,*,#21722,.T.); +#21722 = EDGE_CURVE('',#21715,#16638,#21723,.T.); +#21723 = LINE('',#21724,#21725); +#21724 = CARTESIAN_POINT('',(50.345840655655,102.96808168319, + 125.15028980425)); +#21725 = VECTOR('',#21726,1.); +#21726 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21727 = PLANE('',#21728); +#21728 = AXIS2_PLACEMENT_3D('',#21729,#21730,#21731); +#21729 = CARTESIAN_POINT('',(50.726182655655,102.82925857962, + 125.57754338469)); +#21730 = DIRECTION('',(-0.763206145218,-0.199672898926,0.614529993846)); +#21731 = DIRECTION('',(0.64615507419,-0.235843669084,0.725852177686)); +#21732 = ADVANCED_FACE('',(#21733),#21751,.T.); +#21733 = FACE_BOUND('',#21734,.T.); +#21734 = EDGE_LOOP('',(#21735,#21736,#21737,#21745)); +#21735 = ORIENTED_EDGE('',*,*,#16645,.T.); +#21736 = ORIENTED_EDGE('',*,*,#21722,.F.); +#21737 = ORIENTED_EDGE('',*,*,#21738,.T.); +#21738 = EDGE_CURVE('',#21715,#21739,#21741,.T.); +#21739 = VERTEX_POINT('',#21740); +#21740 = CARTESIAN_POINT('',(50.101933655655,103.13245492989, + 124.64440096894)); +#21741 = LINE('',#21742,#21743); +#21742 = CARTESIAN_POINT('',(50.345840655655,102.96808168319, + 125.15028980425)); +#21743 = VECTOR('',#21744,1.); +#21744 = DIRECTION('',(-0.416808577567,0.28089468177,-0.864504937765)); +#21745 = ORIENTED_EDGE('',*,*,#21746,.T.); +#21746 = EDGE_CURVE('',#21739,#16646,#21747,.T.); +#21747 = LINE('',#21748,#21749); +#21748 = CARTESIAN_POINT('',(50.101933655655,103.13245492989, + 124.64440096894)); +#21749 = VECTOR('',#21750,1.); +#21750 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21751 = PLANE('',#21752); +#21752 = AXIS2_PLACEMENT_3D('',#21753,#21754,#21755); +#21753 = CARTESIAN_POINT('',(50.345840655655,102.96808168319, + 125.15028980425)); +#21754 = DIRECTION('',(-0.908994284727,-0.128800933869,0.396408513742)); +#21755 = DIRECTION('',(0.416808577567,-0.28089468177,0.864504937765)); +#21756 = ADVANCED_FACE('',(#21757),#21775,.T.); +#21757 = FACE_BOUND('',#21758,.T.); +#21758 = EDGE_LOOP('',(#21759,#21760,#21761,#21769)); +#21759 = ORIENTED_EDGE('',*,*,#16653,.T.); +#21760 = ORIENTED_EDGE('',*,*,#21746,.F.); +#21761 = ORIENTED_EDGE('',*,*,#21762,.T.); +#21762 = EDGE_CURVE('',#21739,#21763,#21765,.T.); +#21763 = VERTEX_POINT('',#21764); +#21764 = CARTESIAN_POINT('',(50.019741113839,103.31756853436, + 124.07467987595)); +#21765 = LINE('',#21766,#21767); +#21766 = CARTESIAN_POINT('',(50.101933655655,103.13245492989, + 124.64440096894)); +#21767 = VECTOR('',#21768,1.); +#21768 = DIRECTION('',(-0.135933492782,0.306148687719,-0.94222877612)); +#21769 = ORIENTED_EDGE('',*,*,#21770,.T.); +#21770 = EDGE_CURVE('',#21763,#16654,#21771,.T.); +#21771 = LINE('',#21772,#21773); +#21772 = CARTESIAN_POINT('',(50.019741113839,103.31756853436, + 124.07467987595)); +#21773 = VECTOR('',#21774,1.); +#21774 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21775 = PLANE('',#21776); +#21776 = AXIS2_PLACEMENT_3D('',#21777,#21778,#21779); +#21777 = CARTESIAN_POINT('',(50.101933655655,103.13245492989, + 124.64440096894)); +#21778 = DIRECTION('',(-0.99071796468,-4.200575937435E-02,0.129280434093 + )); +#21779 = DIRECTION('',(0.135933492782,-0.306148687719,0.94222877612)); +#21780 = ADVANCED_FACE('',(#21781),#21799,.T.); +#21781 = FACE_BOUND('',#21782,.T.); +#21782 = EDGE_LOOP('',(#21783,#21784,#21785,#21793)); +#21783 = ORIENTED_EDGE('',*,*,#16661,.T.); +#21784 = ORIENTED_EDGE('',*,*,#21770,.F.); +#21785 = ORIENTED_EDGE('',*,*,#21786,.T.); +#21786 = EDGE_CURVE('',#21763,#21787,#21789,.T.); +#21787 = VERTEX_POINT('',#21788); +#21788 = CARTESIAN_POINT('',(50.185990655655,103.57958305268, + 123.26828210642)); +#21789 = LINE('',#21790,#21791); +#21790 = CARTESIAN_POINT('',(50.019741113839,103.31756853436, + 124.07467987595)); +#21791 = VECTOR('',#21792,1.); +#21792 = DIRECTION('',(0.192409187786,0.303242944955,-0.933285819452)); +#21793 = ORIENTED_EDGE('',*,*,#21794,.T.); +#21794 = EDGE_CURVE('',#21787,#16662,#21795,.T.); +#21795 = LINE('',#21796,#21797); +#21796 = CARTESIAN_POINT('',(50.185990655655,103.57958305268, + 123.26828210642)); +#21797 = VECTOR('',#21798,1.); +#21798 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21799 = PLANE('',#21800); +#21800 = AXIS2_PLACEMENT_3D('',#21801,#21802,#21803); +#21801 = CARTESIAN_POINT('',(50.019741113839,103.31756853436, + 124.07467987595)); +#21802 = DIRECTION('',(-0.981314783571,5.94577088998E-02,-0.182992011839 + )); +#21803 = DIRECTION('',(-0.192409187786,-0.303242944955,0.933285819452)); +#21804 = ADVANCED_FACE('',(#21805),#21823,.T.); +#21805 = FACE_BOUND('',#21806,.T.); +#21806 = EDGE_LOOP('',(#21807,#21808,#21809,#21817)); +#21807 = ORIENTED_EDGE('',*,*,#16669,.T.); +#21808 = ORIENTED_EDGE('',*,*,#21794,.F.); +#21809 = ORIENTED_EDGE('',*,*,#21810,.T.); +#21810 = EDGE_CURVE('',#21787,#21811,#21813,.T.); +#21811 = VERTEX_POINT('',#21812); +#21812 = CARTESIAN_POINT('',(50.748230655655,103.86404277553, + 122.39280510042)); +#21813 = LINE('',#21814,#21815); +#21814 = CARTESIAN_POINT('',(50.185990655655,103.57958305268, + 123.26828210642)); +#21815 = VECTOR('',#21816,1.); +#21816 = DIRECTION('',(0.521242956754,0.263717677531,-0.8116395546)); +#21817 = ORIENTED_EDGE('',*,*,#21818,.T.); +#21818 = EDGE_CURVE('',#21811,#16670,#21819,.T.); +#21819 = LINE('',#21820,#21821); +#21820 = CARTESIAN_POINT('',(50.748230655655,103.86404277553, + 122.39280510042)); +#21821 = VECTOR('',#21822,1.); +#21822 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21823 = PLANE('',#21824); +#21824 = AXIS2_PLACEMENT_3D('',#21825,#21826,#21827); +#21825 = CARTESIAN_POINT('',(50.185990655655,103.57958305268, + 123.26828210642)); +#21826 = DIRECTION('',(-0.85340833136,0.161072931835,-0.495731510594)); +#21827 = DIRECTION('',(-0.521242956754,-0.263717677531,0.8116395546)); +#21828 = ADVANCED_FACE('',(#21829),#21849,.T.); +#21829 = FACE_BOUND('',#21830,.T.); +#21830 = EDGE_LOOP('',(#21831,#21832,#21833,#21843)); +#21831 = ORIENTED_EDGE('',*,*,#16677,.T.); +#21832 = ORIENTED_EDGE('',*,*,#21818,.F.); +#21833 = ORIENTED_EDGE('',*,*,#21834,.T.); +#21834 = EDGE_CURVE('',#21811,#21835,#21837,.T.); +#21835 = VERTEX_POINT('',#21836); +#21836 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21837 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#21838,#21839,#21840,#21841, + #21842),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.75,1.),.UNSPECIFIED.); +#21838 = CARTESIAN_POINT('',(50.748230655655,103.86404277553, + 122.39280510042)); +#21839 = CARTESIAN_POINT('',(51.032108155655,103.96113375204, + 122.09398980039)); +#21840 = CARTESIAN_POINT('',(51.410611488989,104.09058838739, + 121.69556940036)); +#21841 = CARTESIAN_POINT('',(51.789114822322,104.22004302275, + 121.29714900033)); +#21842 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21843 = ORIENTED_EDGE('',*,*,#21844,.T.); +#21844 = EDGE_CURVE('',#21835,#16678,#21845,.T.); +#21845 = LINE('',#21846,#21847); +#21846 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21847 = VECTOR('',#21848,1.); +#21848 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21849 = SURFACE_OF_LINEAR_EXTRUSION('',#21850,#21856); +#21850 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#21851,#21852,#21853,#21854, + #21855),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.75,1.),.UNSPECIFIED.); +#21851 = CARTESIAN_POINT('',(50.748230655655,103.86404277553, + 122.39280510042)); +#21852 = CARTESIAN_POINT('',(51.032108155655,103.96113375204, + 122.09398980039)); +#21853 = CARTESIAN_POINT('',(51.410611488989,104.09058838739, + 121.69556940036)); +#21854 = CARTESIAN_POINT('',(51.789114822322,104.22004302275, + 121.29714900033)); +#21855 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21856 = VECTOR('',#21857,1.); +#21857 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21858 = ADVANCED_FACE('',(#21859),#21879,.T.); +#21859 = FACE_BOUND('',#21860,.T.); +#21860 = EDGE_LOOP('',(#21861,#21862,#21863,#21873)); +#21861 = ORIENTED_EDGE('',*,*,#16689,.T.); +#21862 = ORIENTED_EDGE('',*,*,#21844,.F.); +#21863 = ORIENTED_EDGE('',*,*,#21864,.T.); +#21864 = EDGE_CURVE('',#21835,#21865,#21867,.T.); +#21865 = VERTEX_POINT('',#21866); +#21866 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21867 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#21868,#21869,#21870,#21871, + #21872),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.25,1.),.UNSPECIFIED.); +#21868 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21869 = CARTESIAN_POINT('',(52.043239655077,104.30293932937, + 121.04202040212)); +#21870 = CARTESIAN_POINT('',(52.681235652766,104.50506992054, + 120.41992640934)); +#21871 = CARTESIAN_POINT('',(53.319231650455,104.7072005117, + 119.79783241656)); +#21872 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21873 = ORIENTED_EDGE('',*,*,#21874,.T.); +#21874 = EDGE_CURVE('',#21865,#16690,#21875,.T.); +#21875 = LINE('',#21876,#21877); +#21876 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21877 = VECTOR('',#21878,1.); +#21878 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21879 = SURFACE_OF_LINEAR_EXTRUSION('',#21880,#21886); +#21880 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#21881,#21882,#21883,#21884, + #21885),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.25,1.),.UNSPECIFIED.); +#21881 = CARTESIAN_POINT('',(51.886158370794,104.25169892848, + 121.19972214039)); +#21882 = CARTESIAN_POINT('',(52.043239655077,104.30293932937, + 121.04202040212)); +#21883 = CARTESIAN_POINT('',(52.681235652766,104.50506992054, + 120.41992640934)); +#21884 = CARTESIAN_POINT('',(53.319231650455,104.7072005117, + 119.79783241656)); +#21885 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21886 = VECTOR('',#21887,1.); +#21887 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21888 = ADVANCED_FACE('',(#21889),#21907,.T.); +#21889 = FACE_BOUND('',#21890,.T.); +#21890 = EDGE_LOOP('',(#21891,#21892,#21893,#21901)); +#21891 = ORIENTED_EDGE('',*,*,#16700,.T.); +#21892 = ORIENTED_EDGE('',*,*,#21874,.F.); +#21893 = ORIENTED_EDGE('',*,*,#21894,.T.); +#21894 = EDGE_CURVE('',#21865,#21895,#21897,.T.); +#21895 = VERTEX_POINT('',#21896); +#21896 = CARTESIAN_POINT('',(49.888330655655,104.85879845507, + 119.33126192198)); +#21897 = LINE('',#21898,#21899); +#21898 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21899 = VECTOR('',#21900,1.); +#21900 = DIRECTION('',(-1.,0.,0.)); +#21901 = ORIENTED_EDGE('',*,*,#21902,.T.); +#21902 = EDGE_CURVE('',#21895,#16701,#21903,.T.); +#21903 = LINE('',#21904,#21905); +#21904 = CARTESIAN_POINT('',(49.888330655655,104.85879845507, + 119.33126192198)); +#21905 = VECTOR('',#21906,1.); +#21906 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21907 = PLANE('',#21908); +#21908 = AXIS2_PLACEMENT_3D('',#21909,#21910,#21911); +#21909 = CARTESIAN_POINT('',(53.797728648721,104.85879845507, + 119.33126192198)); +#21910 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#21911 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#21912 = ADVANCED_FACE('',(#21913),#21931,.T.); +#21913 = FACE_BOUND('',#21914,.T.); +#21914 = EDGE_LOOP('',(#21915,#21916,#21917,#21925)); +#21915 = ORIENTED_EDGE('',*,*,#16708,.T.); +#21916 = ORIENTED_EDGE('',*,*,#21902,.F.); +#21917 = ORIENTED_EDGE('',*,*,#21918,.T.); +#21918 = EDGE_CURVE('',#21895,#21919,#21921,.T.); +#21919 = VERTEX_POINT('',#21920); +#21920 = CARTESIAN_POINT('',(49.888330655655,105.13133475719, + 118.49248143166)); +#21921 = LINE('',#21922,#21923); +#21922 = CARTESIAN_POINT('',(49.888330655655,104.85879845507, + 119.33126192198)); +#21923 = VECTOR('',#21924,1.); +#21924 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#21925 = ORIENTED_EDGE('',*,*,#21926,.T.); +#21926 = EDGE_CURVE('',#21919,#16709,#21927,.T.); +#21927 = LINE('',#21928,#21929); +#21928 = CARTESIAN_POINT('',(49.888330655655,105.13133475719, + 118.49248143166)); +#21929 = VECTOR('',#21930,1.); +#21930 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21931 = PLANE('',#21932); +#21932 = AXIS2_PLACEMENT_3D('',#21933,#21934,#21935); +#21933 = CARTESIAN_POINT('',(49.888330655655,104.85879845507, + 119.33126192198)); +#21934 = DIRECTION('',(-1.,0.,0.)); +#21935 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#21936 = ADVANCED_FACE('',(#21937),#21955,.T.); +#21937 = FACE_BOUND('',#21938,.T.); +#21938 = EDGE_LOOP('',(#21939,#21940,#21941,#21949)); +#21939 = ORIENTED_EDGE('',*,*,#16716,.T.); +#21940 = ORIENTED_EDGE('',*,*,#21926,.F.); +#21941 = ORIENTED_EDGE('',*,*,#21942,.T.); +#21942 = EDGE_CURVE('',#21919,#21943,#21945,.T.); +#21943 = VERTEX_POINT('',#21944); +#21944 = CARTESIAN_POINT('',(55.135908655655,105.13133475719, + 118.49248143166)); +#21945 = LINE('',#21946,#21947); +#21946 = CARTESIAN_POINT('',(49.888330655655,105.13133475719, + 118.49248143166)); +#21947 = VECTOR('',#21948,1.); +#21948 = DIRECTION('',(1.,0.,0.)); +#21949 = ORIENTED_EDGE('',*,*,#21950,.T.); +#21950 = EDGE_CURVE('',#21943,#16717,#21951,.T.); +#21951 = LINE('',#21952,#21953); +#21952 = CARTESIAN_POINT('',(55.135908655655,105.13133475719, + 118.49248143166)); +#21953 = VECTOR('',#21954,1.); +#21954 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21955 = PLANE('',#21956); +#21956 = AXIS2_PLACEMENT_3D('',#21957,#21958,#21959); +#21957 = CARTESIAN_POINT('',(49.888330655655,105.13133475719, + 118.49248143166)); +#21958 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#21959 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21960 = ADVANCED_FACE('',(#21961),#21979,.T.); +#21961 = FACE_BOUND('',#21962,.T.); +#21962 = EDGE_LOOP('',(#21963,#21964,#21965,#21973)); +#21963 = ORIENTED_EDGE('',*,*,#16724,.T.); +#21964 = ORIENTED_EDGE('',*,*,#21950,.F.); +#21965 = ORIENTED_EDGE('',*,*,#21966,.T.); +#21966 = EDGE_CURVE('',#21943,#21967,#21969,.T.); +#21967 = VERTEX_POINT('',#21968); +#21968 = CARTESIAN_POINT('',(55.135908655655,104.9201191694, + 119.142536169)); +#21969 = LINE('',#21970,#21971); +#21970 = CARTESIAN_POINT('',(55.135908655655,105.13133475719, + 118.49248143166)); +#21971 = VECTOR('',#21972,1.); +#21972 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#21973 = ORIENTED_EDGE('',*,*,#21974,.T.); +#21974 = EDGE_CURVE('',#21967,#16725,#21975,.T.); +#21975 = LINE('',#21976,#21977); +#21976 = CARTESIAN_POINT('',(55.135908655655,104.9201191694, + 119.142536169)); +#21977 = VECTOR('',#21978,1.); +#21978 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#21979 = PLANE('',#21980); +#21980 = AXIS2_PLACEMENT_3D('',#21981,#21982,#21983); +#21981 = CARTESIAN_POINT('',(55.135908655655,105.13133475719, + 118.49248143166)); +#21982 = DIRECTION('',(1.,0.,0.)); +#21983 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#21984 = ADVANCED_FACE('',(#21985),#22005,.T.); +#21985 = FACE_BOUND('',#21986,.T.); +#21986 = EDGE_LOOP('',(#21987,#21988,#21989,#21999)); +#21987 = ORIENTED_EDGE('',*,*,#16732,.T.); +#21988 = ORIENTED_EDGE('',*,*,#21974,.F.); +#21989 = ORIENTED_EDGE('',*,*,#21990,.T.); +#21990 = EDGE_CURVE('',#21967,#21991,#21993,.T.); +#21991 = VERTEX_POINT('',#21992); +#21992 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#21993 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#21994,#21995,#21996,#21997, + #21998),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.875,1.),.UNSPECIFIED.); +#21994 = CARTESIAN_POINT('',(55.135908655655,104.9201191694, + 119.142536169)); +#21995 = CARTESIAN_POINT('',(54.319190072322,104.6568095482, + 119.95291985535)); +#21996 = CARTESIAN_POINT('',(53.385797405655,104.35588426683, + 120.87907263974)); +#21997 = CARTESIAN_POINT('',(52.452404738988,104.05495898546, + 121.80522542414)); +#21998 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#21999 = ORIENTED_EDGE('',*,*,#22000,.T.); +#22000 = EDGE_CURVE('',#21991,#16733,#22001,.T.); +#22001 = LINE('',#22002,#22003); +#22002 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#22003 = VECTOR('',#22004,1.); +#22004 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22005 = SURFACE_OF_LINEAR_EXTRUSION('',#22006,#22012); +#22006 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#22007,#22008,#22009,#22010, + #22011),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.875,1.),.UNSPECIFIED.); +#22007 = CARTESIAN_POINT('',(55.135908655655,104.9201191694, + 119.142536169)); +#22008 = CARTESIAN_POINT('',(54.319190072322,104.6568095482, + 119.95291985535)); +#22009 = CARTESIAN_POINT('',(53.385797405655,104.35588426683, + 120.87907263974)); +#22010 = CARTESIAN_POINT('',(52.452404738988,104.05495898546, + 121.80522542414)); +#22011 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#22012 = VECTOR('',#22013,1.); +#22013 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22014 = ADVANCED_FACE('',(#22015),#22035,.T.); +#22015 = FACE_BOUND('',#22016,.T.); +#22016 = EDGE_LOOP('',(#22017,#22018,#22019,#22029)); +#22017 = ORIENTED_EDGE('',*,*,#16745,.T.); +#22018 = ORIENTED_EDGE('',*,*,#22000,.F.); +#22019 = ORIENTED_EDGE('',*,*,#22020,.T.); +#22020 = EDGE_CURVE('',#21991,#22021,#22023,.T.); +#22021 = VERTEX_POINT('',#22022); +#22022 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22023 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#22024,#22025,#22026,#22027, + #22028),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#22024 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#22025 = CARTESIAN_POINT('',(52.198845655655,103.96964953937, + 122.06778090193)); +#22026 = CARTESIAN_POINT('',(51.925075655655,103.87426196753, + 122.36135366142)); +#22027 = CARTESIAN_POINT('',(51.651305655655,103.7788743957, + 122.65492642091)); +#22028 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22029 = ORIENTED_EDGE('',*,*,#22030,.T.); +#22030 = EDGE_CURVE('',#22021,#16746,#22031,.T.); +#22031 = LINE('',#22032,#22033); +#22032 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22033 = VECTOR('',#22034,1.); +#22034 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22035 = SURFACE_OF_LINEAR_EXTRUSION('',#22036,#22042); +#22036 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#22037,#22038,#22039,#22040, + #22041),.UNSPECIFIED.,.F.,.F.,(4,1,4),(0.,0.5,1.), + .QUASI_UNIFORM_KNOTS.); +#22037 = CARTESIAN_POINT('',(52.338373215183,104.01659330751, + 121.92330283956)); +#22038 = CARTESIAN_POINT('',(52.198845655655,103.96964953937, + 122.06778090193)); +#22039 = CARTESIAN_POINT('',(51.925075655655,103.87426196753, + 122.36135366142)); +#22040 = CARTESIAN_POINT('',(51.651305655655,103.7788743957, + 122.65492642091)); +#22041 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22042 = VECTOR('',#22043,1.); +#22043 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22044 = ADVANCED_FACE('',(#22045),#22063,.T.); +#22045 = FACE_BOUND('',#22046,.T.); +#22046 = EDGE_LOOP('',(#22047,#22048,#22049,#22057)); +#22047 = ORIENTED_EDGE('',*,*,#16755,.T.); +#22048 = ORIENTED_EDGE('',*,*,#22030,.F.); +#22049 = ORIENTED_EDGE('',*,*,#22050,.T.); +#22050 = EDGE_CURVE('',#22021,#22051,#22053,.T.); +#22051 = VERTEX_POINT('',#22052); +#22052 = CARTESIAN_POINT('',(51.123060655655,103.5267785377, + 123.43079769287)); +#22053 = LINE('',#22054,#22055); +#22054 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22055 = VECTOR('',#22056,1.); +#22056 = DIRECTION('',(-0.509209367096,-0.265953213814,0.818519827813)); +#22057 = ORIENTED_EDGE('',*,*,#22058,.T.); +#22058 = EDGE_CURVE('',#22051,#16756,#22059,.T.); +#22059 = LINE('',#22060,#22061); +#22060 = CARTESIAN_POINT('',(51.123060655655,103.5267785377, + 123.43079769287)); +#22061 = VECTOR('',#22062,1.); +#22062 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22063 = PLANE('',#22064); +#22064 = AXIS2_PLACEMENT_3D('',#22065,#22066,#22067); +#22065 = CARTESIAN_POINT('',(51.514420655655,103.73118060978, + 122.80171280065)); +#22066 = DIRECTION('',(0.860642678736,-0.157354348128,0.484286886735)); +#22067 = DIRECTION('',(0.509209367096,0.265953213814,-0.818519827813)); +#22068 = ADVANCED_FACE('',(#22069),#22087,.T.); +#22069 = FACE_BOUND('',#22070,.T.); +#22070 = EDGE_LOOP('',(#22071,#22072,#22073,#22081)); +#22071 = ORIENTED_EDGE('',*,*,#16763,.T.); +#22072 = ORIENTED_EDGE('',*,*,#22058,.F.); +#22073 = ORIENTED_EDGE('',*,*,#22074,.T.); +#22074 = EDGE_CURVE('',#22051,#22075,#22077,.T.); +#22075 = VERTEX_POINT('',#22076); +#22076 = CARTESIAN_POINT('',(51.011637368811,103.33225151746, + 124.02949030058)); +#22077 = LINE('',#22078,#22079); +#22078 = CARTESIAN_POINT('',(51.123060655655,103.5267785377, + 123.43079769287)); +#22079 = VECTOR('',#22080,1.); +#22080 = DIRECTION('',(-0.174292871275,-0.304287136542,0.936499510709)); +#22081 = ORIENTED_EDGE('',*,*,#22082,.T.); +#22082 = EDGE_CURVE('',#22075,#16764,#22083,.T.); +#22083 = LINE('',#22084,#22085); +#22084 = CARTESIAN_POINT('',(51.011637368811,103.33225151746, + 124.02949030058)); +#22085 = VECTOR('',#22086,1.); +#22086 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22087 = PLANE('',#22088); +#22088 = AXIS2_PLACEMENT_3D('',#22089,#22090,#22091); +#22089 = CARTESIAN_POINT('',(51.123060655655,103.5267785377, + 123.43079769287)); +#22090 = DIRECTION('',(0.984693858528,-5.385945922245E-02,0.16576237097) + ); +#22091 = DIRECTION('',(0.174292871275,0.304287136542,-0.936499510709)); +#22092 = ADVANCED_FACE('',(#22093),#22111,.T.); +#22093 = FACE_BOUND('',#22094,.T.); +#22094 = EDGE_LOOP('',(#22095,#22096,#22097,#22105)); +#22095 = ORIENTED_EDGE('',*,*,#16771,.T.); +#22096 = ORIENTED_EDGE('',*,*,#22082,.F.); +#22097 = ORIENTED_EDGE('',*,*,#22098,.T.); +#22098 = EDGE_CURVE('',#22075,#22099,#22101,.T.); +#22099 = VERTEX_POINT('',#22100); +#22100 = CARTESIAN_POINT('',(51.205740655655,103.10775581956, + 124.72041701417)); +#22101 = LINE('',#22102,#22103); +#22102 = CARTESIAN_POINT('',(51.011637368811,103.33225151746, + 124.02949030058)); +#22103 = VECTOR('',#22104,1.); +#22104 = DIRECTION('',(0.258127455384,-0.298544677863,0.918826040171)); +#22105 = ORIENTED_EDGE('',*,*,#22106,.T.); +#22106 = EDGE_CURVE('',#22099,#16772,#22107,.T.); +#22107 = LINE('',#22108,#22109); +#22108 = CARTESIAN_POINT('',(51.205740655655,103.10775581956, + 124.72041701417)); +#22109 = VECTOR('',#22110,1.); +#22110 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22111 = PLANE('',#22112); +#22112 = AXIS2_PLACEMENT_3D('',#22113,#22114,#22115); +#22113 = CARTESIAN_POINT('',(51.011637368811,103.33225151746, + 124.02949030058)); +#22114 = DIRECTION('',(0.966110871886,7.976577042838E-02,-0.245493798478 + )); +#22115 = DIRECTION('',(-0.258127455384,0.298544677863,-0.918826040171)); +#22116 = ADVANCED_FACE('',(#22117),#22135,.T.); +#22117 = FACE_BOUND('',#22118,.T.); +#22118 = EDGE_LOOP('',(#22119,#22120,#22121,#22129)); +#22119 = ORIENTED_EDGE('',*,*,#16779,.T.); +#22120 = ORIENTED_EDGE('',*,*,#22106,.F.); +#22121 = ORIENTED_EDGE('',*,*,#22122,.T.); +#22122 = EDGE_CURVE('',#22099,#22123,#22125,.T.); +#22123 = VERTEX_POINT('',#22124); +#22124 = CARTESIAN_POINT('',(51.729390655655,102.95615733541, + 125.1869891731)); +#22125 = LINE('',#22126,#22127); +#22126 = CARTESIAN_POINT('',(51.205740655655,103.10775581956, + 124.72041701417)); +#22127 = VECTOR('',#22128,1.); +#22128 = DIRECTION('',(0.729772802603,-0.211271747636,0.650227579569)); +#22129 = ORIENTED_EDGE('',*,*,#22130,.T.); +#22130 = EDGE_CURVE('',#22123,#16780,#22131,.T.); +#22131 = LINE('',#22132,#22133); +#22132 = CARTESIAN_POINT('',(51.729390655655,102.95615733541, + 125.1869891731)); +#22133 = VECTOR('',#22134,1.); +#22134 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22135 = PLANE('',#22136); +#22136 = AXIS2_PLACEMENT_3D('',#22137,#22138,#22139); +#22137 = CARTESIAN_POINT('',(51.205740655655,103.10775581956, + 124.72041701417)); +#22138 = DIRECTION('',(0.683689737075,0.225512198037,-0.69405517933)); +#22139 = DIRECTION('',(-0.729772802603,0.211271747636,-0.650227579569)); +#22140 = ADVANCED_FACE('',(#22141),#22159,.T.); +#22141 = FACE_BOUND('',#22142,.T.); +#22142 = EDGE_LOOP('',(#22143,#22144,#22145,#22153)); +#22143 = ORIENTED_EDGE('',*,*,#16787,.T.); +#22144 = ORIENTED_EDGE('',*,*,#22130,.F.); +#22145 = ORIENTED_EDGE('',*,*,#22146,.T.); +#22146 = EDGE_CURVE('',#22123,#22147,#22149,.T.); +#22147 = VERTEX_POINT('',#22148); +#22148 = CARTESIAN_POINT('',(52.495580655655,102.89994683512, + 125.35998730447)); +#22149 = LINE('',#22150,#22151); +#22150 = CARTESIAN_POINT('',(51.729390655655,102.95615733541, + 125.1869891731)); +#22151 = VECTOR('',#22152,1.); +#22152 = DIRECTION('',(0.972956281604,-7.137963083954E-02,0.219683914724 + )); +#22153 = ORIENTED_EDGE('',*,*,#22154,.T.); +#22154 = EDGE_CURVE('',#22147,#16788,#22155,.T.); +#22155 = LINE('',#22156,#22157); +#22156 = CARTESIAN_POINT('',(52.495580655655,102.89994683512, + 125.35998730447)); +#22157 = VECTOR('',#22158,1.); +#22158 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22159 = PLANE('',#22160); +#22160 = AXIS2_PLACEMENT_3D('',#22161,#22162,#22163); +#22161 = CARTESIAN_POINT('',(51.729390655655,102.95615733541, + 125.1869891731)); +#22162 = DIRECTION('',(0.230989337606,0.300660025799,-0.92533641169)); +#22163 = DIRECTION('',(-0.972956281604,7.137963083953E-02, + -0.219683914724)); +#22164 = ADVANCED_FACE('',(#22165),#22183,.T.); +#22165 = FACE_BOUND('',#22166,.T.); +#22166 = EDGE_LOOP('',(#22167,#22168,#22169,#22177)); +#22167 = ORIENTED_EDGE('',*,*,#16795,.T.); +#22168 = ORIENTED_EDGE('',*,*,#22154,.F.); +#22169 = ORIENTED_EDGE('',*,*,#22170,.T.); +#22170 = EDGE_CURVE('',#22147,#22171,#22173,.T.); +#22171 = VERTEX_POINT('',#22172); +#22172 = CARTESIAN_POINT('',(53.383042655655,102.96467415279, + 125.16077710446)); +#22173 = LINE('',#22174,#22175); +#22174 = CARTESIAN_POINT('',(52.495580655655,102.89994683512, + 125.35998730447)); +#22175 = VECTOR('',#22176,1.); +#22176 = DIRECTION('',(0.973258640502,7.098492240171E-02,-0.218469127063 + )); +#22177 = ORIENTED_EDGE('',*,*,#22178,.T.); +#22178 = EDGE_CURVE('',#22171,#16796,#22179,.T.); +#22179 = LINE('',#22180,#22181); +#22180 = CARTESIAN_POINT('',(53.383042655655,102.96467415279, + 125.16077710446)); +#22181 = VECTOR('',#22182,1.); +#22182 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22183 = PLANE('',#22184); +#22184 = AXIS2_PLACEMENT_3D('',#22185,#22186,#22187); +#22185 = CARTESIAN_POINT('',(52.495580655655,102.89994683512, + 125.35998730447)); +#22186 = DIRECTION('',(-0.229712034269,0.300753459837,-0.92562397209)); +#22187 = DIRECTION('',(-0.973258640502,-7.098492240171E-02, + 0.218469127063)); +#22188 = ADVANCED_FACE('',(#22189),#22207,.T.); +#22189 = FACE_BOUND('',#22190,.T.); +#22190 = EDGE_LOOP('',(#22191,#22192,#22193,#22201)); +#22191 = ORIENTED_EDGE('',*,*,#16803,.T.); +#22192 = ORIENTED_EDGE('',*,*,#22178,.F.); +#22193 = ORIENTED_EDGE('',*,*,#22194,.T.); +#22194 = EDGE_CURVE('',#22171,#22195,#22197,.T.); +#22195 = VERTEX_POINT('',#22196); +#22196 = CARTESIAN_POINT('',(54.000404655655,103.13500926437, + 124.63653953577)); +#22197 = LINE('',#22198,#22199); +#22198 = CARTESIAN_POINT('',(53.383042655655,102.96467415279, + 125.16077710446)); +#22199 = VECTOR('',#22200,1.); +#22200 = DIRECTION('',(0.745937704503,0.205810176399,-0.633418591685)); +#22201 = ORIENTED_EDGE('',*,*,#22202,.T.); +#22202 = EDGE_CURVE('',#22195,#16804,#22203,.T.); +#22203 = LINE('',#22204,#22205); +#22204 = CARTESIAN_POINT('',(54.000404655655,103.13500926437, + 124.63653953577)); +#22205 = VECTOR('',#22206,1.); +#22206 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22207 = PLANE('',#22208); +#22208 = AXIS2_PLACEMENT_3D('',#22209,#22210,#22211); +#22209 = CARTESIAN_POINT('',(53.383042655655,102.96467415279, + 125.16077710446)); +#22210 = DIRECTION('',(-0.666015721287,0.230507427436,-0.709428914618)); +#22211 = DIRECTION('',(-0.745937704503,-0.205810176399,0.633418591685)); +#22212 = ADVANCED_FACE('',(#22213),#22231,.T.); +#22213 = FACE_BOUND('',#22214,.T.); +#22214 = EDGE_LOOP('',(#22215,#22216,#22217,#22225)); +#22215 = ORIENTED_EDGE('',*,*,#16811,.T.); +#22216 = ORIENTED_EDGE('',*,*,#22202,.F.); +#22217 = ORIENTED_EDGE('',*,*,#22218,.T.); +#22218 = EDGE_CURVE('',#22195,#22219,#22221,.T.); +#22219 = VERTEX_POINT('',#22220); +#22220 = CARTESIAN_POINT('',(54.226402655655,103.37518159863, + 123.89736509652)); +#22221 = LINE('',#22222,#22223); +#22222 = CARTESIAN_POINT('',(54.000404655655,103.13500926437, + 124.63653953577)); +#22223 = VECTOR('',#22224,1.); +#22224 = DIRECTION('',(0.279214926957,0.296726965589,-0.913231697028)); +#22225 = ORIENTED_EDGE('',*,*,#22226,.T.); +#22226 = EDGE_CURVE('',#22219,#16812,#22227,.T.); +#22227 = LINE('',#22228,#22229); +#22228 = CARTESIAN_POINT('',(54.226402655655,103.37518159863, + 123.89736509652)); +#22229 = VECTOR('',#22230,1.); +#22230 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22231 = PLANE('',#22232); +#22232 = AXIS2_PLACEMENT_3D('',#22233,#22234,#22235); +#22233 = CARTESIAN_POINT('',(54.000404655655,103.13500926437, + 124.63653953577)); +#22234 = DIRECTION('',(-0.960228631402,8.628215751275E-02, + -0.265549175729)); +#22235 = DIRECTION('',(-0.279214926957,-0.296726965589,0.913231697028)); +#22236 = ADVANCED_FACE('',(#22237),#22255,.T.); +#22237 = FACE_BOUND('',#22238,.T.); +#22238 = EDGE_LOOP('',(#22239,#22240,#22241,#22249)); +#22239 = ORIENTED_EDGE('',*,*,#16819,.T.); +#22240 = ORIENTED_EDGE('',*,*,#22226,.F.); +#22241 = ORIENTED_EDGE('',*,*,#22242,.T.); +#22242 = EDGE_CURVE('',#22219,#22243,#22245,.T.); +#22243 = VERTEX_POINT('',#22244); +#22244 = CARTESIAN_POINT('',(54.226402655655,103.383698107, + 123.87115397893)); +#22245 = LINE('',#22246,#22247); +#22246 = CARTESIAN_POINT('',(54.226402655655,103.37518159863, + 123.89736509652)); +#22247 = VECTOR('',#22248,1.); +#22248 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22249 = ORIENTED_EDGE('',*,*,#22250,.T.); +#22250 = EDGE_CURVE('',#22243,#16820,#22251,.T.); +#22251 = LINE('',#22252,#22253); +#22252 = CARTESIAN_POINT('',(54.226402655655,103.383698107, + 123.87115397893)); +#22253 = VECTOR('',#22254,1.); +#22254 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22255 = PLANE('',#22256); +#22256 = AXIS2_PLACEMENT_3D('',#22257,#22258,#22259); +#22257 = CARTESIAN_POINT('',(54.226402655655,103.37518159863, + 123.89736509652)); +#22258 = DIRECTION('',(-1.,0.,0.)); +#22259 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#22260 = ADVANCED_FACE('',(#22261),#22272,.T.); +#22261 = FACE_BOUND('',#22262,.T.); +#22262 = EDGE_LOOP('',(#22263,#22264,#22265,#22271)); +#22263 = ORIENTED_EDGE('',*,*,#16827,.T.); +#22264 = ORIENTED_EDGE('',*,*,#22250,.F.); +#22265 = ORIENTED_EDGE('',*,*,#22266,.T.); +#22266 = EDGE_CURVE('',#22243,#21467,#22267,.T.); +#22267 = LINE('',#22268,#22269); +#22268 = CARTESIAN_POINT('',(54.226402655655,103.383698107, + 123.87115397893)); +#22269 = VECTOR('',#22270,1.); +#22270 = DIRECTION('',(1.,0.,0.)); +#22271 = ORIENTED_EDGE('',*,*,#21466,.T.); +#22272 = PLANE('',#22273); +#22273 = AXIS2_PLACEMENT_3D('',#22274,#22275,#22276); +#22274 = CARTESIAN_POINT('',(54.226402655655,103.383698107, + 123.87115397893)); +#22275 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22276 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22277 = ADVANCED_FACE('',(#22278),#22313,.T.); +#22278 = FACE_BOUND('',#22279,.T.); +#22279 = EDGE_LOOP('',(#22280,#22281,#22282,#22283,#22284,#22285,#22286, + #22287,#22288,#22289,#22290,#22291,#22292,#22293,#22294,#22295, + #22296,#22297,#22298,#22299,#22300,#22301,#22302,#22303,#22304, + #22305,#22306,#22307,#22308,#22309,#22310,#22311,#22312)); +#22280 = ORIENTED_EDGE('',*,*,#21474,.F.); +#22281 = ORIENTED_EDGE('',*,*,#22266,.F.); +#22282 = ORIENTED_EDGE('',*,*,#22242,.F.); +#22283 = ORIENTED_EDGE('',*,*,#22218,.F.); +#22284 = ORIENTED_EDGE('',*,*,#22194,.F.); +#22285 = ORIENTED_EDGE('',*,*,#22170,.F.); +#22286 = ORIENTED_EDGE('',*,*,#22146,.F.); +#22287 = ORIENTED_EDGE('',*,*,#22122,.F.); +#22288 = ORIENTED_EDGE('',*,*,#22098,.F.); +#22289 = ORIENTED_EDGE('',*,*,#22074,.F.); +#22290 = ORIENTED_EDGE('',*,*,#22050,.F.); +#22291 = ORIENTED_EDGE('',*,*,#22020,.F.); +#22292 = ORIENTED_EDGE('',*,*,#21990,.F.); +#22293 = ORIENTED_EDGE('',*,*,#21966,.F.); +#22294 = ORIENTED_EDGE('',*,*,#21942,.F.); +#22295 = ORIENTED_EDGE('',*,*,#21918,.F.); +#22296 = ORIENTED_EDGE('',*,*,#21894,.F.); +#22297 = ORIENTED_EDGE('',*,*,#21864,.F.); +#22298 = ORIENTED_EDGE('',*,*,#21834,.F.); +#22299 = ORIENTED_EDGE('',*,*,#21810,.F.); +#22300 = ORIENTED_EDGE('',*,*,#21786,.F.); +#22301 = ORIENTED_EDGE('',*,*,#21762,.F.); +#22302 = ORIENTED_EDGE('',*,*,#21738,.F.); +#22303 = ORIENTED_EDGE('',*,*,#21714,.F.); +#22304 = ORIENTED_EDGE('',*,*,#21690,.F.); +#22305 = ORIENTED_EDGE('',*,*,#21666,.F.); +#22306 = ORIENTED_EDGE('',*,*,#21642,.F.); +#22307 = ORIENTED_EDGE('',*,*,#21618,.F.); +#22308 = ORIENTED_EDGE('',*,*,#21594,.F.); +#22309 = ORIENTED_EDGE('',*,*,#21570,.F.); +#22310 = ORIENTED_EDGE('',*,*,#21546,.F.); +#22311 = ORIENTED_EDGE('',*,*,#21522,.F.); +#22312 = ORIENTED_EDGE('',*,*,#21498,.F.); +#22313 = PLANE('',#22314); +#22314 = AXIS2_PLACEMENT_3D('',#22315,#22316,#22317); +#22315 = CARTESIAN_POINT('',(51.315985655655,104.05822472856, + 121.79517450037)); +#22316 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#22317 = DIRECTION('',(-1.,0.,0.)); +#22318 = ADVANCED_FACE('',(#22319),#22344,.T.); +#22319 = FACE_BOUND('',#22320,.T.); +#22320 = EDGE_LOOP('',(#22321,#22322,#22330,#22338)); +#22321 = ORIENTED_EDGE('',*,*,#16361,.T.); +#22322 = ORIENTED_EDGE('',*,*,#22323,.F.); +#22323 = EDGE_CURVE('',#22324,#16364,#22326,.T.); +#22324 = VERTEX_POINT('',#22325); +#22325 = CARTESIAN_POINT('',(70.134503655655,105.13133475719, + 118.49248143166)); +#22326 = LINE('',#22327,#22328); +#22327 = CARTESIAN_POINT('',(70.134503655655,105.13133475719, + 118.49248143166)); +#22328 = VECTOR('',#22329,1.); +#22329 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22330 = ORIENTED_EDGE('',*,*,#22331,.T.); +#22331 = EDGE_CURVE('',#22324,#22332,#22334,.T.); +#22332 = VERTEX_POINT('',#22333); +#22333 = CARTESIAN_POINT('',(70.134503655655,103.30534283085, + 124.11230672237)); +#22334 = LINE('',#22335,#22336); +#22335 = CARTESIAN_POINT('',(70.134503655655,105.13133475719, + 118.49248143166)); +#22336 = VECTOR('',#22337,1.); +#22337 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#22338 = ORIENTED_EDGE('',*,*,#22339,.T.); +#22339 = EDGE_CURVE('',#22332,#16362,#22340,.T.); +#22340 = LINE('',#22341,#22342); +#22341 = CARTESIAN_POINT('',(70.134503655655,103.30534283085, + 124.11230672237)); +#22342 = VECTOR('',#22343,1.); +#22343 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22344 = PLANE('',#22345); +#22345 = AXIS2_PLACEMENT_3D('',#22346,#22347,#22348); +#22346 = CARTESIAN_POINT('',(70.134503655655,105.13133475719, + 118.49248143166)); +#22347 = DIRECTION('',(1.,0.,0.)); +#22348 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#22349 = ADVANCED_FACE('',(#22350),#22368,.T.); +#22350 = FACE_BOUND('',#22351,.T.); +#22351 = EDGE_LOOP('',(#22352,#22353,#22354,#22362)); +#22352 = ORIENTED_EDGE('',*,*,#16371,.T.); +#22353 = ORIENTED_EDGE('',*,*,#22339,.F.); +#22354 = ORIENTED_EDGE('',*,*,#22355,.T.); +#22355 = EDGE_CURVE('',#22332,#22356,#22358,.T.); +#22356 = VERTEX_POINT('',#22357); +#22357 = CARTESIAN_POINT('',(68.524953655655,103.30534283085, + 124.11230672237)); +#22358 = LINE('',#22359,#22360); +#22359 = CARTESIAN_POINT('',(70.134503655655,103.30534283085, + 124.11230672237)); +#22360 = VECTOR('',#22361,1.); +#22361 = DIRECTION('',(-1.,0.,0.)); +#22362 = ORIENTED_EDGE('',*,*,#22363,.T.); +#22363 = EDGE_CURVE('',#22356,#16372,#22364,.T.); +#22364 = LINE('',#22365,#22366); +#22365 = CARTESIAN_POINT('',(68.524953655655,103.30534283085, + 124.11230672237)); +#22366 = VECTOR('',#22367,1.); +#22367 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22368 = PLANE('',#22369); +#22369 = AXIS2_PLACEMENT_3D('',#22370,#22371,#22372); +#22370 = CARTESIAN_POINT('',(70.134503655655,103.30534283085, + 124.11230672237)); +#22371 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#22372 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#22373 = ADVANCED_FACE('',(#22374),#22392,.T.); +#22374 = FACE_BOUND('',#22375,.T.); +#22375 = EDGE_LOOP('',(#22376,#22377,#22378,#22386)); +#22376 = ORIENTED_EDGE('',*,*,#16379,.T.); +#22377 = ORIENTED_EDGE('',*,*,#22363,.F.); +#22378 = ORIENTED_EDGE('',*,*,#22379,.T.); +#22379 = EDGE_CURVE('',#22356,#22380,#22382,.T.); +#22380 = VERTEX_POINT('',#22381); +#22381 = CARTESIAN_POINT('',(68.524953655655,103.60513257778, + 123.18964875365)); +#22382 = LINE('',#22383,#22384); +#22383 = CARTESIAN_POINT('',(68.524953655655,103.30534283085, + 124.11230672237)); +#22384 = VECTOR('',#22385,1.); +#22385 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22386 = ORIENTED_EDGE('',*,*,#22387,.T.); +#22387 = EDGE_CURVE('',#22380,#16380,#22388,.T.); +#22388 = LINE('',#22389,#22390); +#22389 = CARTESIAN_POINT('',(68.524953655655,103.60513257778, + 123.18964875365)); +#22390 = VECTOR('',#22391,1.); +#22391 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22392 = PLANE('',#22393); +#22393 = AXIS2_PLACEMENT_3D('',#22394,#22395,#22396); +#22394 = CARTESIAN_POINT('',(68.524953655655,103.30534283085, + 124.11230672237)); +#22395 = DIRECTION('',(-1.,0.,0.)); +#22396 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#22397 = ADVANCED_FACE('',(#22398),#22416,.T.); +#22398 = FACE_BOUND('',#22399,.T.); +#22399 = EDGE_LOOP('',(#22400,#22401,#22402,#22410)); +#22400 = ORIENTED_EDGE('',*,*,#16387,.T.); +#22401 = ORIENTED_EDGE('',*,*,#22387,.F.); +#22402 = ORIENTED_EDGE('',*,*,#22403,.T.); +#22403 = EDGE_CURVE('',#22380,#22404,#22406,.T.); +#22404 = VERTEX_POINT('',#22405); +#22405 = CARTESIAN_POINT('',(68.491883655655,103.60513257778, + 123.18964875365)); +#22406 = LINE('',#22407,#22408); +#22407 = CARTESIAN_POINT('',(68.524953655655,103.60513257778, + 123.18964875365)); +#22408 = VECTOR('',#22409,1.); +#22409 = DIRECTION('',(-1.,0.,0.)); +#22410 = ORIENTED_EDGE('',*,*,#22411,.T.); +#22411 = EDGE_CURVE('',#22404,#16388,#22412,.T.); +#22412 = LINE('',#22413,#22414); +#22413 = CARTESIAN_POINT('',(68.491883655655,103.60513257778, + 123.18964875365)); +#22414 = VECTOR('',#22415,1.); +#22415 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22416 = PLANE('',#22417); +#22417 = AXIS2_PLACEMENT_3D('',#22418,#22419,#22420); +#22418 = CARTESIAN_POINT('',(68.524953655655,103.60513257778, + 123.18964875365)); +#22419 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#22420 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#22421 = ADVANCED_FACE('',(#22422),#22440,.T.); +#22422 = FACE_BOUND('',#22423,.T.); +#22423 = EDGE_LOOP('',(#22424,#22425,#22426,#22434)); +#22424 = ORIENTED_EDGE('',*,*,#16395,.T.); +#22425 = ORIENTED_EDGE('',*,*,#22411,.F.); +#22426 = ORIENTED_EDGE('',*,*,#22427,.T.); +#22427 = EDGE_CURVE('',#22404,#22428,#22430,.T.); +#22428 = VERTEX_POINT('',#22429); +#22429 = CARTESIAN_POINT('',(68.205251655655,103.46503199795, + 123.62083400173)); +#22430 = LINE('',#22431,#22432); +#22431 = CARTESIAN_POINT('',(68.491883655655,103.60513257778, + 123.18964875365)); +#22432 = VECTOR('',#22433,1.); +#22433 = DIRECTION('',(-0.534379285796,-0.261195008884,0.803875578834)); +#22434 = ORIENTED_EDGE('',*,*,#22435,.T.); +#22435 = EDGE_CURVE('',#22428,#16396,#22436,.T.); +#22436 = LINE('',#22437,#22438); +#22437 = CARTESIAN_POINT('',(68.205251655655,103.46503199795, + 123.62083400173)); +#22438 = VECTOR('',#22439,1.); +#22439 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22440 = PLANE('',#22441); +#22441 = AXIS2_PLACEMENT_3D('',#22442,#22443,#22444); +#22442 = CARTESIAN_POINT('',(68.491883655655,103.60513257778, + 123.18964875365)); +#22443 = DIRECTION('',(0.845244804132,-0.165132280753,0.50822490193)); +#22444 = DIRECTION('',(0.534379285796,0.261195008884,-0.803875578834)); +#22445 = ADVANCED_FACE('',(#22446),#22464,.T.); +#22446 = FACE_BOUND('',#22447,.T.); +#22447 = EDGE_LOOP('',(#22448,#22449,#22450,#22458)); +#22448 = ORIENTED_EDGE('',*,*,#16403,.T.); +#22449 = ORIENTED_EDGE('',*,*,#22435,.F.); +#22450 = ORIENTED_EDGE('',*,*,#22451,.T.); +#22451 = EDGE_CURVE('',#22428,#22452,#22454,.T.); +#22452 = VERTEX_POINT('',#22453); +#22453 = CARTESIAN_POINT('',(67.808376655655,103.3581467278, + 123.94979303803)); +#22454 = LINE('',#22455,#22456); +#22455 = CARTESIAN_POINT('',(68.205251655655,103.46503199795, + 123.62083400173)); +#22456 = VECTOR('',#22457,1.); +#22457 = DIRECTION('',(-0.753872069675,-0.203030727121,0.624864326401)); +#22458 = ORIENTED_EDGE('',*,*,#22459,.T.); +#22459 = EDGE_CURVE('',#22452,#16404,#22460,.T.); +#22460 = LINE('',#22461,#22462); +#22461 = CARTESIAN_POINT('',(67.808376655655,103.3581467278, + 123.94979303803)); +#22462 = VECTOR('',#22463,1.); +#22463 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22464 = PLANE('',#22465); +#22465 = AXIS2_PLACEMENT_3D('',#22466,#22467,#22468); +#22466 = CARTESIAN_POINT('',(68.205251655655,103.46503199795, + 123.62083400173)); +#22467 = DIRECTION('',(0.657021234484,-0.232959281114,0.716974944318)); +#22468 = DIRECTION('',(0.753872069675,0.203030727121,-0.624864326401)); +#22469 = ADVANCED_FACE('',(#22470),#22488,.T.); +#22470 = FACE_BOUND('',#22471,.T.); +#22471 = EDGE_LOOP('',(#22472,#22473,#22474,#22482)); +#22472 = ORIENTED_EDGE('',*,*,#16411,.T.); +#22473 = ORIENTED_EDGE('',*,*,#22459,.F.); +#22474 = ORIENTED_EDGE('',*,*,#22475,.T.); +#22475 = EDGE_CURVE('',#22452,#22476,#22478,.T.); +#22476 = VERTEX_POINT('',#22477); +#22477 = CARTESIAN_POINT('',(67.302635655655,103.29043832318, + 124.15817808026)); +#22478 = LINE('',#22479,#22480); +#22479 = CARTESIAN_POINT('',(67.808376655655,103.3581467278, + 123.94979303803)); +#22480 = VECTOR('',#22481,1.); +#22481 = DIRECTION('',(-0.917585695908,-0.122846009267,0.378081140328)); +#22482 = ORIENTED_EDGE('',*,*,#22483,.T.); +#22483 = EDGE_CURVE('',#22476,#16412,#22484,.T.); +#22484 = LINE('',#22485,#22486); +#22485 = CARTESIAN_POINT('',(67.302635655655,103.29043832318, + 124.15817808026)); +#22486 = VECTOR('',#22487,1.); +#22487 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22488 = PLANE('',#22489); +#22489 = AXIS2_PLACEMENT_3D('',#22490,#22491,#22492); +#22490 = CARTESIAN_POINT('',(67.808376655655,103.3581467278, + 123.94979303803)); +#22491 = DIRECTION('',(0.397538036752,-0.283549573831,0.872675855353)); +#22492 = DIRECTION('',(0.917585695908,0.122846009267,-0.378081140328)); +#22493 = ADVANCED_FACE('',(#22494),#22512,.T.); +#22494 = FACE_BOUND('',#22495,.T.); +#22495 = EDGE_LOOP('',(#22496,#22497,#22498,#22506)); +#22496 = ORIENTED_EDGE('',*,*,#16419,.T.); +#22497 = ORIENTED_EDGE('',*,*,#22483,.F.); +#22498 = ORIENTED_EDGE('',*,*,#22499,.T.); +#22499 = EDGE_CURVE('',#22476,#22500,#22502,.T.); +#22500 = VERTEX_POINT('',#22501); +#22501 = CARTESIAN_POINT('',(66.689408655655,103.26786895798, + 124.22763944399)); +#22502 = LINE('',#22503,#22504); +#22503 = CARTESIAN_POINT('',(67.302635655655,103.29043832318, + 124.15817808026)); +#22504 = VECTOR('',#22505,1.); +#22505 = DIRECTION('',(-0.992982041012,-3.6545968005E-02,0.112476924079) + ); +#22506 = ORIENTED_EDGE('',*,*,#22507,.T.); +#22507 = EDGE_CURVE('',#22500,#16420,#22508,.T.); +#22508 = LINE('',#22509,#22510); +#22509 = CARTESIAN_POINT('',(66.689408655655,103.26786895798, + 124.22763944399)); +#22510 = VECTOR('',#22511,1.); +#22511 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22512 = PLANE('',#22513); +#22513 = AXIS2_PLACEMENT_3D('',#22514,#22515,#22516); +#22514 = CARTESIAN_POINT('',(67.302635655655,103.29043832318, + 124.15817808026)); +#22515 = DIRECTION('',(0.118265236768,-0.306848325782,0.944382040668)); +#22516 = DIRECTION('',(0.992982041012,3.6545968005E-02,-0.112476924079) + ); +#22517 = ADVANCED_FACE('',(#22518),#22536,.T.); +#22518 = FACE_BOUND('',#22519,.T.); +#22519 = EDGE_LOOP('',(#22520,#22521,#22522,#22530)); +#22520 = ORIENTED_EDGE('',*,*,#16427,.T.); +#22521 = ORIENTED_EDGE('',*,*,#22507,.F.); +#22522 = ORIENTED_EDGE('',*,*,#22523,.T.); +#22523 = EDGE_CURVE('',#22500,#22524,#22526,.T.); +#22524 = VERTEX_POINT('',#22525); +#22525 = CARTESIAN_POINT('',(65.825377655655,103.3134335138, + 124.08740616066)); +#22526 = LINE('',#22527,#22528); +#22527 = CARTESIAN_POINT('',(66.689408655655,103.26786895798, + 124.22763944399)); +#22528 = VECTOR('',#22529,1.); +#22529 = DIRECTION('',(-0.985749195827,5.19833481187E-02,-0.159988294712 + )); +#22530 = ORIENTED_EDGE('',*,*,#22531,.T.); +#22531 = EDGE_CURVE('',#22524,#16428,#22532,.T.); +#22532 = LINE('',#22533,#22534); +#22533 = CARTESIAN_POINT('',(65.825377655655,103.3134335138, + 124.08740616066)); +#22534 = VECTOR('',#22535,1.); +#22535 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22536 = PLANE('',#22537); +#22537 = AXIS2_PLACEMENT_3D('',#22538,#22539,#22540); +#22538 = CARTESIAN_POINT('',(66.689408655655,103.26786895798, + 124.22763944399)); +#22539 = DIRECTION('',(-0.16822164821,-0.304613253702,0.937503196124)); +#22540 = DIRECTION('',(0.985749195827,-5.19833481187E-02,0.159988294712) + ); +#22541 = ADVANCED_FACE('',(#22542),#22560,.T.); +#22542 = FACE_BOUND('',#22543,.T.); +#22543 = EDGE_LOOP('',(#22544,#22545,#22546,#22554)); +#22544 = ORIENTED_EDGE('',*,*,#16435,.T.); +#22545 = ORIENTED_EDGE('',*,*,#22531,.F.); +#22546 = ORIENTED_EDGE('',*,*,#22547,.T.); +#22547 = EDGE_CURVE('',#22524,#22548,#22550,.T.); +#22548 = VERTEX_POINT('',#22549); +#22549 = CARTESIAN_POINT('',(65.184588655655,103.45012749028, + 123.66670535962)); +#22550 = LINE('',#22551,#22552); +#22551 = CARTESIAN_POINT('',(65.825377655655,103.3134335138, + 124.08740616066)); +#22552 = VECTOR('',#22553,1.); +#22553 = DIRECTION('',(-0.822956072371,0.175554102832,-0.54029997217)); +#22554 = ORIENTED_EDGE('',*,*,#22555,.T.); +#22555 = EDGE_CURVE('',#22548,#16436,#22556,.T.); +#22556 = LINE('',#22557,#22558); +#22557 = CARTESIAN_POINT('',(65.184588655655,103.45012749028, + 123.66670535962)); +#22558 = VECTOR('',#22559,1.); +#22559 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22560 = PLANE('',#22561); +#22561 = AXIS2_PLACEMENT_3D('',#22562,#22563,#22564); +#22562 = CARTESIAN_POINT('',(65.825377655655,103.3134335138, + 124.08740616066)); +#22563 = DIRECTION('',(-0.568105010494,-0.254307411987,0.782677735253)); +#22564 = DIRECTION('',(0.822956072371,-0.175554102832,0.54029997217)); +#22565 = ADVANCED_FACE('',(#22566),#22584,.T.); +#22566 = FACE_BOUND('',#22567,.T.); +#22567 = EDGE_LOOP('',(#22568,#22569,#22570,#22578)); +#22568 = ORIENTED_EDGE('',*,*,#16443,.T.); +#22569 = ORIENTED_EDGE('',*,*,#22555,.F.); +#22570 = ORIENTED_EDGE('',*,*,#22571,.T.); +#22571 = EDGE_CURVE('',#22548,#22572,#22574,.T.); +#22572 = VERTEX_POINT('',#22573); +#22573 = CARTESIAN_POINT('',(64.783579655655,103.66602715767, + 123.00223450761)); +#22574 = LINE('',#22575,#22576); +#22575 = CARTESIAN_POINT('',(65.184588655655,103.45012749028, + 123.66670535962)); +#22576 = VECTOR('',#22577,1.); +#22577 = DIRECTION('',(-0.497795590459,0.268008704067,-0.824845976327)); +#22578 = ORIENTED_EDGE('',*,*,#22579,.T.); +#22579 = EDGE_CURVE('',#22572,#16444,#22580,.T.); +#22580 = LINE('',#22581,#22582); +#22581 = CARTESIAN_POINT('',(64.783579655655,103.66602715767, + 123.00223450761)); +#22582 = VECTOR('',#22583,1.); +#22583 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22584 = PLANE('',#22585); +#22585 = AXIS2_PLACEMENT_3D('',#22586,#22587,#22588); +#22586 = CARTESIAN_POINT('',(65.184588655655,103.45012749028, + 123.66670535962)); +#22587 = DIRECTION('',(-0.867294384923,-0.153827297177,0.473431740089)); +#22588 = DIRECTION('',(0.497795590459,-0.268008704067,0.824845976327)); +#22589 = ADVANCED_FACE('',(#22590),#22608,.T.); +#22590 = FACE_BOUND('',#22591,.T.); +#22591 = EDGE_LOOP('',(#22592,#22593,#22594,#22602)); +#22592 = ORIENTED_EDGE('',*,*,#16451,.T.); +#22593 = ORIENTED_EDGE('',*,*,#22579,.F.); +#22594 = ORIENTED_EDGE('',*,*,#22595,.T.); +#22595 = EDGE_CURVE('',#22572,#22596,#22598,.T.); +#22596 = VERTEX_POINT('',#22597); +#22597 = CARTESIAN_POINT('',(64.649909655655,103.95261600761, + 122.12020472221)); +#22598 = LINE('',#22599,#22600); +#22599 = CARTESIAN_POINT('',(64.783579655655,103.66602715767, + 123.00223450761)); +#22600 = VECTOR('',#22601,1.); +#22601 = DIRECTION('',(-0.142656736468,0.305856437798,-0.94132932335)); +#22602 = ORIENTED_EDGE('',*,*,#22603,.T.); +#22603 = EDGE_CURVE('',#22596,#16452,#22604,.T.); +#22604 = LINE('',#22605,#22606); +#22605 = CARTESIAN_POINT('',(64.649909655655,103.95261600761, + 122.12020472221)); +#22606 = VECTOR('',#22607,1.); +#22607 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22608 = PLANE('',#22609); +#22609 = AXIS2_PLACEMENT_3D('',#22610,#22611,#22612); +#22610 = CARTESIAN_POINT('',(64.783579655655,103.66602715767, + 123.00223450761)); +#22611 = DIRECTION('',(-0.98977222407,-4.408335593053E-02,0.135674618811 + )); +#22612 = DIRECTION('',(0.142656736468,-0.305856437798,0.94132932335)); +#22613 = ADVANCED_FACE('',(#22614),#22632,.T.); +#22614 = FACE_BOUND('',#22615,.T.); +#22615 = EDGE_LOOP('',(#22616,#22617,#22618,#22626)); +#22616 = ORIENTED_EDGE('',*,*,#16459,.T.); +#22617 = ORIENTED_EDGE('',*,*,#22603,.F.); +#22618 = ORIENTED_EDGE('',*,*,#22619,.T.); +#22619 = EDGE_CURVE('',#22596,#22620,#22622,.T.); +#22620 = VERTEX_POINT('',#22621); +#22621 = CARTESIAN_POINT('',(64.649909655655,105.13133475719, + 118.49248143166)); +#22622 = LINE('',#22623,#22624); +#22623 = CARTESIAN_POINT('',(64.649909655655,103.95261600761, + 122.12020472221)); +#22624 = VECTOR('',#22625,1.); +#22625 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22626 = ORIENTED_EDGE('',*,*,#22627,.T.); +#22627 = EDGE_CURVE('',#22620,#16460,#22628,.T.); +#22628 = LINE('',#22629,#22630); +#22629 = CARTESIAN_POINT('',(64.649909655655,105.13133475719, + 118.49248143166)); +#22630 = VECTOR('',#22631,1.); +#22631 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22632 = PLANE('',#22633); +#22633 = AXIS2_PLACEMENT_3D('',#22634,#22635,#22636); +#22634 = CARTESIAN_POINT('',(64.649909655655,103.95261600761, + 122.12020472221)); +#22635 = DIRECTION('',(-1.,0.,0.)); +#22636 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#22637 = ADVANCED_FACE('',(#22638),#22656,.T.); +#22638 = FACE_BOUND('',#22639,.T.); +#22639 = EDGE_LOOP('',(#22640,#22641,#22642,#22650)); +#22640 = ORIENTED_EDGE('',*,*,#16467,.T.); +#22641 = ORIENTED_EDGE('',*,*,#22627,.F.); +#22642 = ORIENTED_EDGE('',*,*,#22643,.T.); +#22643 = EDGE_CURVE('',#22620,#22644,#22646,.T.); +#22644 = VERTEX_POINT('',#22645); +#22645 = CARTESIAN_POINT('',(66.259459655655,105.13133475719, + 118.49248143166)); +#22646 = LINE('',#22647,#22648); +#22647 = CARTESIAN_POINT('',(64.649909655655,105.13133475719, + 118.49248143166)); +#22648 = VECTOR('',#22649,1.); +#22649 = DIRECTION('',(1.,0.,0.)); +#22650 = ORIENTED_EDGE('',*,*,#22651,.T.); +#22651 = EDGE_CURVE('',#22644,#16468,#22652,.T.); +#22652 = LINE('',#22653,#22654); +#22653 = CARTESIAN_POINT('',(66.259459655655,105.13133475719, + 118.49248143166)); +#22654 = VECTOR('',#22655,1.); +#22655 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22656 = PLANE('',#22657); +#22657 = AXIS2_PLACEMENT_3D('',#22658,#22659,#22660); +#22658 = CARTESIAN_POINT('',(64.649909655655,105.13133475719, + 118.49248143166)); +#22659 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22660 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22661 = ADVANCED_FACE('',(#22662),#22680,.T.); +#22662 = FACE_BOUND('',#22663,.T.); +#22663 = EDGE_LOOP('',(#22664,#22665,#22666,#22674)); +#22664 = ORIENTED_EDGE('',*,*,#16475,.T.); +#22665 = ORIENTED_EDGE('',*,*,#22651,.F.); +#22666 = ORIENTED_EDGE('',*,*,#22667,.T.); +#22667 = EDGE_CURVE('',#22644,#22668,#22670,.T.); +#22668 = VERTEX_POINT('',#22669); +#22669 = CARTESIAN_POINT('',(66.259459655655,104.05481719816, + 121.80566180057)); +#22670 = LINE('',#22671,#22672); +#22671 = CARTESIAN_POINT('',(66.259459655655,105.13133475719, + 118.49248143166)); +#22672 = VECTOR('',#22673,1.); +#22673 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#22674 = ORIENTED_EDGE('',*,*,#22675,.T.); +#22675 = EDGE_CURVE('',#22668,#16476,#22676,.T.); +#22676 = LINE('',#22677,#22678); +#22677 = CARTESIAN_POINT('',(66.259459655655,104.05481719816, + 121.80566180057)); +#22678 = VECTOR('',#22679,1.); +#22679 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22680 = PLANE('',#22681); +#22681 = AXIS2_PLACEMENT_3D('',#22682,#22683,#22684); +#22682 = CARTESIAN_POINT('',(66.259459655655,105.13133475719, + 118.49248143166)); +#22683 = DIRECTION('',(1.,0.,0.)); +#22684 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#22685 = ADVANCED_FACE('',(#22686),#22704,.T.); +#22686 = FACE_BOUND('',#22687,.T.); +#22687 = EDGE_LOOP('',(#22688,#22689,#22690,#22698)); +#22688 = ORIENTED_EDGE('',*,*,#16483,.T.); +#22689 = ORIENTED_EDGE('',*,*,#22675,.F.); +#22690 = ORIENTED_EDGE('',*,*,#22691,.T.); +#22691 = EDGE_CURVE('',#22668,#22692,#22694,.T.); +#22692 = VERTEX_POINT('',#22693); +#22693 = CARTESIAN_POINT('',(66.328361655655,103.89640550732, + 122.29320285358)); +#22694 = LINE('',#22695,#22696); +#22695 = CARTESIAN_POINT('',(66.259459655655,104.05481719816, + 121.80566180057)); +#22696 = VECTOR('',#22697,1.); +#22697 = DIRECTION('',(0.133210686866,-0.306262955282,0.942580455519)); +#22698 = ORIENTED_EDGE('',*,*,#22699,.T.); +#22699 = EDGE_CURVE('',#22692,#16484,#22700,.T.); +#22700 = LINE('',#22701,#22702); +#22701 = CARTESIAN_POINT('',(66.328361655655,103.89640550732, + 122.29320285358)); +#22702 = VECTOR('',#22703,1.); +#22703 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22704 = PLANE('',#22705); +#22705 = AXIS2_PLACEMENT_3D('',#22706,#22707,#22708); +#22706 = CARTESIAN_POINT('',(66.259459655655,104.05481719816, + 121.80566180057)); +#22707 = DIRECTION('',(0.991087742284,4.116436607396E-02,-0.126690891784 + )); +#22708 = DIRECTION('',(-0.133210686866,0.306262955282,-0.942580455519)); +#22709 = ADVANCED_FACE('',(#22710),#22728,.T.); +#22710 = FACE_BOUND('',#22711,.T.); +#22711 = EDGE_LOOP('',(#22712,#22713,#22714,#22722)); +#22712 = ORIENTED_EDGE('',*,*,#16491,.T.); +#22713 = ORIENTED_EDGE('',*,*,#22699,.F.); +#22714 = ORIENTED_EDGE('',*,*,#22715,.T.); +#22715 = EDGE_CURVE('',#22692,#22716,#22718,.T.); +#22716 = VERTEX_POINT('',#22717); +#22717 = CARTESIAN_POINT('',(66.535067655655,103.77887429269, + 122.65492673793)); +#22718 = LINE('',#22719,#22720); +#22719 = CARTESIAN_POINT('',(66.328361655655,103.89640550732, + 122.29320285358)); +#22720 = VECTOR('',#22721,1.); +#22721 = DIRECTION('',(0.477513359189,-0.271509898621,0.835621545167)); +#22722 = ORIENTED_EDGE('',*,*,#22723,.T.); +#22723 = EDGE_CURVE('',#22716,#16492,#22724,.T.); +#22724 = LINE('',#22725,#22726); +#22725 = CARTESIAN_POINT('',(66.535067655655,103.77887429269, + 122.65492673793)); +#22726 = VECTOR('',#22727,1.); +#22727 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22728 = PLANE('',#22729); +#22729 = AXIS2_PLACEMENT_3D('',#22730,#22731,#22732); +#22730 = CARTESIAN_POINT('',(66.328361655655,103.89640550732, + 122.29320285358)); +#22731 = DIRECTION('',(0.878624488503,0.14755974303,-0.454142191874)); +#22732 = DIRECTION('',(-0.477513359189,0.271509898621,-0.835621545167)); +#22733 = ADVANCED_FACE('',(#22734),#22752,.T.); +#22734 = FACE_BOUND('',#22735,.T.); +#22735 = EDGE_LOOP('',(#22736,#22737,#22738,#22746)); +#22736 = ORIENTED_EDGE('',*,*,#16499,.T.); +#22737 = ORIENTED_EDGE('',*,*,#22723,.F.); +#22738 = ORIENTED_EDGE('',*,*,#22739,.T.); +#22739 = EDGE_CURVE('',#22716,#22740,#22742,.T.); +#22740 = VERTEX_POINT('',#22741); +#22741 = CARTESIAN_POINT('',(66.872687655655,103.7047785068, + 122.88297011835)); +#22742 = LINE('',#22743,#22744); +#22743 = CARTESIAN_POINT('',(66.535067655655,103.77887429269, + 122.65492673793)); +#22744 = VECTOR('',#22745,1.); +#22745 = DIRECTION('',(0.815304550829,-0.178930843661,0.550692511828)); +#22746 = ORIENTED_EDGE('',*,*,#22747,.T.); +#22747 = EDGE_CURVE('',#22740,#16500,#22748,.T.); +#22748 = LINE('',#22749,#22750); +#22749 = CARTESIAN_POINT('',(66.872687655655,103.7047785068, + 122.88297011835)); +#22750 = VECTOR('',#22751,1.); +#22751 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22752 = PLANE('',#22753); +#22753 = AXIS2_PLACEMENT_3D('',#22754,#22755,#22756); +#22754 = CARTESIAN_POINT('',(66.535067655655,103.77887429269, + 122.65492673793)); +#22755 = DIRECTION('',(0.579032373358,0.251942961797,-0.775400705831)); +#22756 = DIRECTION('',(-0.815304550829,0.178930843661,-0.550692511828)); +#22757 = ADVANCED_FACE('',(#22758),#22776,.T.); +#22758 = FACE_BOUND('',#22759,.T.); +#22759 = EDGE_LOOP('',(#22760,#22761,#22762,#22770)); +#22760 = ORIENTED_EDGE('',*,*,#16507,.T.); +#22761 = ORIENTED_EDGE('',*,*,#22747,.F.); +#22762 = ORIENTED_EDGE('',*,*,#22763,.T.); +#22763 = EDGE_CURVE('',#22740,#22764,#22766,.T.); +#22764 = VERTEX_POINT('',#22765); +#22765 = CARTESIAN_POINT('',(67.345354655655,103.68008001451, + 122.95898426147)); +#22766 = LINE('',#22767,#22768); +#22767 = CARTESIAN_POINT('',(66.872687655655,103.7047785068, + 122.88297011835)); +#22768 = VECTOR('',#22769,1.); +#22769 = DIRECTION('',(0.98600277272,-5.152206919953E-02,0.158568624177) + ); +#22770 = ORIENTED_EDGE('',*,*,#22771,.T.); +#22771 = EDGE_CURVE('',#22764,#16508,#22772,.T.); +#22772 = LINE('',#22773,#22774); +#22773 = CARTESIAN_POINT('',(67.345354655655,103.68008001451, + 122.95898426147)); +#22774 = VECTOR('',#22775,1.); +#22775 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22776 = PLANE('',#22777); +#22777 = AXIS2_PLACEMENT_3D('',#22778,#22779,#22780); +#22778 = CARTESIAN_POINT('',(66.872687655655,103.7047785068, + 122.88297011835)); +#22779 = DIRECTION('',(0.166728918271,0.304691613271,-0.937744362081)); +#22780 = DIRECTION('',(-0.98600277272,5.152206919953E-02,-0.158568624177 + )); +#22781 = ADVANCED_FACE('',(#22782),#22800,.T.); +#22782 = FACE_BOUND('',#22783,.T.); +#22783 = EDGE_LOOP('',(#22784,#22785,#22786,#22794)); +#22784 = ORIENTED_EDGE('',*,*,#16515,.T.); +#22785 = ORIENTED_EDGE('',*,*,#22771,.F.); +#22786 = ORIENTED_EDGE('',*,*,#22787,.T.); +#22787 = EDGE_CURVE('',#22764,#22788,#22790,.T.); +#22788 = VERTEX_POINT('',#22789); +#22789 = CARTESIAN_POINT('',(67.968228655655,103.73118060978, + 122.80171280065)); +#22790 = LINE('',#22791,#22792); +#22791 = CARTESIAN_POINT('',(67.345354655655,103.68008001451, + 122.95898426147)); +#22792 = VECTOR('',#22793,1.); +#22793 = DIRECTION('',(0.966518193451,7.929317169974E-02,-0.244039289151 + )); +#22794 = ORIENTED_EDGE('',*,*,#22795,.T.); +#22795 = EDGE_CURVE('',#22788,#16516,#22796,.T.); +#22796 = LINE('',#22797,#22798); +#22797 = CARTESIAN_POINT('',(67.968228655655,103.73118060978, + 122.80171280065)); +#22798 = VECTOR('',#22799,1.); +#22799 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22800 = PLANE('',#22801); +#22801 = AXIS2_PLACEMENT_3D('',#22802,#22803,#22804); +#22802 = CARTESIAN_POINT('',(67.345354655655,103.68008001451, + 122.95898426147)); +#22803 = DIRECTION('',(-0.256598093772,0.298670547149,-0.919213426)); +#22804 = DIRECTION('',(-0.966518193451,-7.929317169974E-02, + 0.244039289151)); +#22805 = ADVANCED_FACE('',(#22806),#22824,.T.); +#22806 = FACE_BOUND('',#22807,.T.); +#22807 = EDGE_LOOP('',(#22808,#22809,#22810,#22818)); +#22808 = ORIENTED_EDGE('',*,*,#16523,.T.); +#22809 = ORIENTED_EDGE('',*,*,#22795,.F.); +#22810 = ORIENTED_EDGE('',*,*,#22811,.T.); +#22811 = EDGE_CURVE('',#22788,#22812,#22814,.T.); +#22812 = VERTEX_POINT('',#22813); +#22813 = CARTESIAN_POINT('',(68.381640655655,103.87085536419, + 122.37183810846)); +#22814 = LINE('',#22815,#22816); +#22815 = CARTESIAN_POINT('',(67.968228655655,103.73118060978, + 122.80171280065)); +#22816 = VECTOR('',#22817,1.); +#22817 = DIRECTION('',(0.674909328376,0.228023847125,-0.701785240379)); +#22818 = ORIENTED_EDGE('',*,*,#22819,.T.); +#22819 = EDGE_CURVE('',#22812,#16524,#22820,.T.); +#22820 = LINE('',#22821,#22822); +#22821 = CARTESIAN_POINT('',(68.381640655655,103.87085536419, + 122.37183810846)); +#22822 = VECTOR('',#22823,1.); +#22823 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22824 = PLANE('',#22825); +#22825 = AXIS2_PLACEMENT_3D('',#22826,#22827,#22828); +#22826 = CARTESIAN_POINT('',(67.968228655655,103.73118060978, + 122.80171280065)); +#22827 = DIRECTION('',(-0.737900669787,0.20855845213,-0.64187691466)); +#22828 = DIRECTION('',(-0.674909328376,-0.228023847125,0.701785240379)); +#22829 = ADVANCED_FACE('',(#22830),#22848,.T.); +#22830 = FACE_BOUND('',#22831,.T.); +#22831 = EDGE_LOOP('',(#22832,#22833,#22834,#22842)); +#22832 = ORIENTED_EDGE('',*,*,#16531,.T.); +#22833 = ORIENTED_EDGE('',*,*,#22819,.F.); +#22834 = ORIENTED_EDGE('',*,*,#22835,.T.); +#22835 = EDGE_CURVE('',#22812,#22836,#22838,.T.); +#22836 = VERTEX_POINT('',#22837); +#22837 = CARTESIAN_POINT('',(68.524956655655,104.08207064296, + 121.72178432217)); +#22838 = LINE('',#22839,#22840); +#22839 = CARTESIAN_POINT('',(68.381640655655,103.87085536419, + 122.37183810846)); +#22840 = VECTOR('',#22841,1.); +#22841 = DIRECTION('',(0.20521486642,0.302440168715,-0.930815128233)); +#22842 = ORIENTED_EDGE('',*,*,#22843,.T.); +#22843 = EDGE_CURVE('',#22836,#16532,#22844,.T.); +#22844 = LINE('',#22845,#22846); +#22845 = CARTESIAN_POINT('',(68.524956655655,104.08207064296, + 121.72178432217)); +#22846 = VECTOR('',#22847,1.); +#22847 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22848 = PLANE('',#22849); +#22849 = AXIS2_PLACEMENT_3D('',#22850,#22851,#22852); +#22850 = CARTESIAN_POINT('',(68.381640655655,103.87085536419, + 122.37183810846)); +#22851 = DIRECTION('',(-0.978716945087,6.341488122214E-02, + -0.195170935949)); +#22852 = DIRECTION('',(-0.20521486642,-0.302440168715,0.930815128233)); +#22853 = ADVANCED_FACE('',(#22854),#22872,.T.); +#22854 = FACE_BOUND('',#22855,.T.); +#22855 = EDGE_LOOP('',(#22856,#22857,#22858,#22866)); +#22856 = ORIENTED_EDGE('',*,*,#16539,.T.); +#22857 = ORIENTED_EDGE('',*,*,#22843,.F.); +#22858 = ORIENTED_EDGE('',*,*,#22859,.T.); +#22859 = EDGE_CURVE('',#22836,#22860,#22862,.T.); +#22860 = VERTEX_POINT('',#22861); +#22861 = CARTESIAN_POINT('',(68.524956655655,105.13133475719, + 118.49248143166)); +#22862 = LINE('',#22863,#22864); +#22863 = CARTESIAN_POINT('',(68.524956655655,104.08207064296, + 121.72178432217)); +#22864 = VECTOR('',#22865,1.); +#22865 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22866 = ORIENTED_EDGE('',*,*,#22867,.T.); +#22867 = EDGE_CURVE('',#22860,#16540,#22868,.T.); +#22868 = LINE('',#22869,#22870); +#22869 = CARTESIAN_POINT('',(68.524956655655,105.13133475719, + 118.49248143166)); +#22870 = VECTOR('',#22871,1.); +#22871 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22872 = PLANE('',#22873); +#22873 = AXIS2_PLACEMENT_3D('',#22874,#22875,#22876); +#22874 = CARTESIAN_POINT('',(68.524956655655,104.08207064296, + 121.72178432217)); +#22875 = DIRECTION('',(-1.,0.,0.)); +#22876 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#22877 = ADVANCED_FACE('',(#22878),#22889,.T.); +#22878 = FACE_BOUND('',#22879,.T.); +#22879 = EDGE_LOOP('',(#22880,#22881,#22882,#22888)); +#22880 = ORIENTED_EDGE('',*,*,#16547,.T.); +#22881 = ORIENTED_EDGE('',*,*,#22867,.F.); +#22882 = ORIENTED_EDGE('',*,*,#22883,.T.); +#22883 = EDGE_CURVE('',#22860,#22324,#22884,.T.); +#22884 = LINE('',#22885,#22886); +#22885 = CARTESIAN_POINT('',(68.524956655655,105.13133475719, + 118.49248143166)); +#22886 = VECTOR('',#22887,1.); +#22887 = DIRECTION('',(1.,0.,0.)); +#22888 = ORIENTED_EDGE('',*,*,#22323,.T.); +#22889 = PLANE('',#22890); +#22890 = AXIS2_PLACEMENT_3D('',#22891,#22892,#22893); +#22891 = CARTESIAN_POINT('',(68.524956655655,105.13133475719, + 118.49248143166)); +#22892 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#22893 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22894 = ADVANCED_FACE('',(#22895),#22921,.F.); +#22895 = FACE_BOUND('',#22896,.T.); +#22896 = EDGE_LOOP('',(#22897,#22898,#22899,#22900,#22901,#22902,#22903, + #22904,#22905,#22906,#22907,#22908,#22909,#22910,#22911,#22912, + #22913,#22914,#22915,#22916,#22917,#22918,#22919,#22920)); +#22897 = ORIENTED_EDGE('',*,*,#22331,.F.); +#22898 = ORIENTED_EDGE('',*,*,#22883,.F.); +#22899 = ORIENTED_EDGE('',*,*,#22859,.F.); +#22900 = ORIENTED_EDGE('',*,*,#22835,.F.); +#22901 = ORIENTED_EDGE('',*,*,#22811,.F.); +#22902 = ORIENTED_EDGE('',*,*,#22787,.F.); +#22903 = ORIENTED_EDGE('',*,*,#22763,.F.); +#22904 = ORIENTED_EDGE('',*,*,#22739,.F.); +#22905 = ORIENTED_EDGE('',*,*,#22715,.F.); +#22906 = ORIENTED_EDGE('',*,*,#22691,.F.); +#22907 = ORIENTED_EDGE('',*,*,#22667,.F.); +#22908 = ORIENTED_EDGE('',*,*,#22643,.F.); +#22909 = ORIENTED_EDGE('',*,*,#22619,.F.); +#22910 = ORIENTED_EDGE('',*,*,#22595,.F.); +#22911 = ORIENTED_EDGE('',*,*,#22571,.F.); +#22912 = ORIENTED_EDGE('',*,*,#22547,.F.); +#22913 = ORIENTED_EDGE('',*,*,#22523,.F.); +#22914 = ORIENTED_EDGE('',*,*,#22499,.F.); +#22915 = ORIENTED_EDGE('',*,*,#22475,.F.); +#22916 = ORIENTED_EDGE('',*,*,#22451,.F.); +#22917 = ORIENTED_EDGE('',*,*,#22427,.F.); +#22918 = ORIENTED_EDGE('',*,*,#22403,.F.); +#22919 = ORIENTED_EDGE('',*,*,#22379,.F.); +#22920 = ORIENTED_EDGE('',*,*,#22355,.F.); +#22921 = PLANE('',#22922); +#22922 = AXIS2_PLACEMENT_3D('',#22923,#22924,#22925); +#22923 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#22924 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22925 = DIRECTION('',(1.,0.,0.)); +#22926 = ADVANCED_FACE('',(#22927),#22961,.T.); +#22927 = FACE_BOUND('',#22928,.T.); +#22928 = EDGE_LOOP('',(#22929,#22939,#22947,#22955)); +#22929 = ORIENTED_EDGE('',*,*,#22930,.T.); +#22930 = EDGE_CURVE('',#22931,#22933,#22935,.T.); +#22931 = VERTEX_POINT('',#22932); +#22932 = CARTESIAN_POINT('',(75.023785655655,103.57218192967, + 120.05499244337)); +#22933 = VERTEX_POINT('',#22934); +#22934 = CARTESIAN_POINT('',(75.179008519227,103.26554016192, + 120.99873876379)); +#22935 = LINE('',#22936,#22937); +#22936 = CARTESIAN_POINT('',(75.179008519227,103.26554016192, + 120.99873876379)); +#22937 = VECTOR('',#22938,1.); +#22938 = DIRECTION('',(0.154545857009,-0.305304345645,0.93963015842)); +#22939 = ORIENTED_EDGE('',*,*,#22940,.F.); +#22940 = EDGE_CURVE('',#22941,#22933,#22943,.T.); +#22941 = VERTEX_POINT('',#22942); +#22942 = CARTESIAN_POINT('',(75.179008519227,104.21659667821, + 121.30775575816)); +#22943 = LINE('',#22944,#22945); +#22944 = CARTESIAN_POINT('',(75.179008519227,104.21659667821, + 121.30775575816)); +#22945 = VECTOR('',#22946,1.); +#22946 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22947 = ORIENTED_EDGE('',*,*,#22948,.T.); +#22948 = EDGE_CURVE('',#22941,#22949,#22951,.T.); +#22949 = VERTEX_POINT('',#22950); +#22950 = CARTESIAN_POINT('',(75.023785655655,104.52323844596, + 120.36400943774)); +#22951 = LINE('',#22952,#22953); +#22952 = CARTESIAN_POINT('',(75.179008519227,104.21659667821, + 121.30775575816)); +#22953 = VECTOR('',#22954,1.); +#22954 = DIRECTION('',(-0.154545857009,0.305304345645,-0.93963015842)); +#22955 = ORIENTED_EDGE('',*,*,#22956,.T.); +#22956 = EDGE_CURVE('',#22949,#22931,#22957,.T.); +#22957 = LINE('',#22958,#22959); +#22958 = CARTESIAN_POINT('',(75.023785655655,104.52323844596, + 120.36400943774)); +#22959 = VECTOR('',#22960,1.); +#22960 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22961 = PLANE('',#22962); +#22962 = AXIS2_PLACEMENT_3D('',#22963,#22964,#22965); +#22963 = CARTESIAN_POINT('',(75.179008519227,104.21659667821, + 121.30775575816)); +#22964 = DIRECTION('',(-0.987985616333,-4.775729622611E-02, + 0.146981844375)); +#22965 = DIRECTION('',(0.154545857009,-0.305304345645,0.93963015842)); +#22966 = ADVANCED_FACE('',(#22967),#22992,.T.); +#22967 = FACE_BOUND('',#22968,.T.); +#22968 = EDGE_LOOP('',(#22969,#22977,#22978,#22986)); +#22969 = ORIENTED_EDGE('',*,*,#22970,.T.); +#22970 = EDGE_CURVE('',#22971,#22931,#22973,.T.); +#22971 = VERTEX_POINT('',#22972); +#22972 = CARTESIAN_POINT('',(74.571788655655,103.76295727935, + 119.46784629035)); +#22973 = LINE('',#22974,#22975); +#22974 = CARTESIAN_POINT('',(75.023785655655,103.57218192967, + 120.05499244337)); +#22975 = VECTOR('',#22976,1.); +#22976 = DIRECTION('',(0.59073869853,-0.249334357932,0.76737224866)); +#22977 = ORIENTED_EDGE('',*,*,#22956,.F.); +#22978 = ORIENTED_EDGE('',*,*,#22979,.T.); +#22979 = EDGE_CURVE('',#22949,#22980,#22982,.T.); +#22980 = VERTEX_POINT('',#22981); +#22981 = CARTESIAN_POINT('',(74.571788655655,104.71401379565, + 119.77686328473)); +#22982 = LINE('',#22983,#22984); +#22983 = CARTESIAN_POINT('',(75.023785655655,104.52323844596, + 120.36400943774)); +#22984 = VECTOR('',#22985,1.); +#22985 = DIRECTION('',(-0.59073869853,0.249334357932,-0.76737224866)); +#22986 = ORIENTED_EDGE('',*,*,#22987,.T.); +#22987 = EDGE_CURVE('',#22980,#22971,#22988,.T.); +#22988 = LINE('',#22989,#22990); +#22989 = CARTESIAN_POINT('',(74.571788655655,104.71401379565, + 119.77686328473)); +#22990 = VECTOR('',#22991,1.); +#22991 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#22992 = PLANE('',#22993); +#22993 = AXIS2_PLACEMENT_3D('',#22994,#22995,#22996); +#22994 = CARTESIAN_POINT('',(75.023785655655,104.52323844596, + 120.36400943774)); +#22995 = DIRECTION('',(-0.806862931395,-0.182548297081,0.561825888664)); +#22996 = DIRECTION('',(0.59073869853,-0.249334357932,0.76737224866)); +#22997 = ADVANCED_FACE('',(#22998),#23023,.T.); +#22998 = FACE_BOUND('',#22999,.T.); +#22999 = EDGE_LOOP('',(#23000,#23008,#23009,#23017)); +#23000 = ORIENTED_EDGE('',*,*,#23001,.T.); +#23001 = EDGE_CURVE('',#23002,#22971,#23004,.T.); +#23002 = VERTEX_POINT('',#23003); +#23003 = CARTESIAN_POINT('',(73.882769655655,103.82768459703, + 119.26863609034)); +#23004 = LINE('',#23005,#23006); +#23005 = CARTESIAN_POINT('',(74.571788655655,103.76295727935, + 119.46784629035)); +#23006 = VECTOR('',#23007,1.); +#23007 = DIRECTION('',(0.95676644249,-8.98798515927E-02,0.276621739571) + ); +#23008 = ORIENTED_EDGE('',*,*,#22987,.F.); +#23009 = ORIENTED_EDGE('',*,*,#23010,.T.); +#23010 = EDGE_CURVE('',#22980,#23011,#23013,.T.); +#23011 = VERTEX_POINT('',#23012); +#23012 = CARTESIAN_POINT('',(73.882769655655,104.77874111332, + 119.57765308471)); +#23013 = LINE('',#23014,#23015); +#23014 = CARTESIAN_POINT('',(74.571788655655,104.71401379565, + 119.77686328473)); +#23015 = VECTOR('',#23016,1.); +#23016 = DIRECTION('',(-0.95676644249,8.98798515927E-02,-0.276621739571) + ); +#23017 = ORIENTED_EDGE('',*,*,#23018,.T.); +#23018 = EDGE_CURVE('',#23011,#23002,#23019,.T.); +#23019 = LINE('',#23020,#23021); +#23020 = CARTESIAN_POINT('',(73.882769655655,104.77874111332, + 119.57765308471)); +#23021 = VECTOR('',#23022,1.); +#23022 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23023 = PLANE('',#23024); +#23024 = AXIS2_PLACEMENT_3D('',#23025,#23026,#23027); +#23025 = CARTESIAN_POINT('',(74.571788655655,104.71401379565, + 119.77686328473)); +#23026 = DIRECTION('',(-0.290857309562,-0.295657090377,0.909938959702)); +#23027 = DIRECTION('',(0.95676644249,-8.98798515927E-02,0.276621739571) + ); +#23028 = ADVANCED_FACE('',(#23029),#23054,.T.); +#23029 = FACE_BOUND('',#23030,.T.); +#23030 = EDGE_LOOP('',(#23031,#23039,#23040,#23048)); +#23031 = ORIENTED_EDGE('',*,*,#23032,.T.); +#23032 = EDGE_CURVE('',#23033,#23002,#23035,.T.); +#23033 = VERTEX_POINT('',#23034); +#23034 = CARTESIAN_POINT('',(73.204773655655,103.76295727935, + 119.46784629035)); +#23035 = LINE('',#23036,#23037); +#23036 = CARTESIAN_POINT('',(73.882769655655,103.82768459703, + 119.26863609034)); +#23037 = VECTOR('',#23038,1.); +#23038 = DIRECTION('',(0.955442550391,9.121474681285E-02,-0.280730124614 + )); +#23039 = ORIENTED_EDGE('',*,*,#23018,.F.); +#23040 = ORIENTED_EDGE('',*,*,#23041,.T.); +#23041 = EDGE_CURVE('',#23011,#23042,#23044,.T.); +#23042 = VERTEX_POINT('',#23043); +#23043 = CARTESIAN_POINT('',(73.204773655655,104.71401379565, + 119.77686328473)); +#23044 = LINE('',#23045,#23046); +#23045 = CARTESIAN_POINT('',(73.882769655655,104.77874111332, + 119.57765308471)); +#23046 = VECTOR('',#23047,1.); +#23047 = DIRECTION('',(-0.955442550391,-9.121474681285E-02, + 0.280730124614)); +#23048 = ORIENTED_EDGE('',*,*,#23049,.T.); +#23049 = EDGE_CURVE('',#23042,#23033,#23050,.T.); +#23050 = LINE('',#23051,#23052); +#23051 = CARTESIAN_POINT('',(73.204773655655,104.71401379565, + 119.77686328473)); +#23052 = VECTOR('',#23053,1.); +#23053 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23054 = PLANE('',#23055); +#23055 = AXIS2_PLACEMENT_3D('',#23056,#23057,#23058); +#23056 = CARTESIAN_POINT('',(73.882769655655,104.77874111332, + 119.57765308471)); +#23057 = DIRECTION('',(0.295177121237,-0.29524798522,0.908679863495)); +#23058 = DIRECTION('',(0.955442550391,9.121474681285E-02,-0.280730124614 + )); +#23059 = ADVANCED_FACE('',(#23060),#23085,.T.); +#23060 = FACE_BOUND('',#23061,.T.); +#23061 = EDGE_LOOP('',(#23062,#23070,#23071,#23079)); +#23062 = ORIENTED_EDGE('',*,*,#23063,.T.); +#23063 = EDGE_CURVE('',#23064,#23033,#23066,.T.); +#23064 = VERTEX_POINT('',#23065); +#23065 = CARTESIAN_POINT('',(72.758288655655,103.57218192967, + 120.05499244337)); +#23066 = LINE('',#23067,#23068); +#23067 = CARTESIAN_POINT('',(73.204773655655,103.76295727935, + 119.46784629035)); +#23068 = VECTOR('',#23069,1.); +#23069 = DIRECTION('',(0.586018715895,0.250395702979,-0.770638732838)); +#23070 = ORIENTED_EDGE('',*,*,#23049,.F.); +#23071 = ORIENTED_EDGE('',*,*,#23072,.T.); +#23072 = EDGE_CURVE('',#23042,#23073,#23075,.T.); +#23073 = VERTEX_POINT('',#23074); +#23074 = CARTESIAN_POINT('',(72.758288655655,104.52323844596, + 120.36400943774)); +#23075 = LINE('',#23076,#23077); +#23076 = CARTESIAN_POINT('',(73.204773655655,104.71401379565, + 119.77686328473)); +#23077 = VECTOR('',#23078,1.); +#23078 = DIRECTION('',(-0.586018715895,-0.250395702979,0.770638732838)); +#23079 = ORIENTED_EDGE('',*,*,#23080,.T.); +#23080 = EDGE_CURVE('',#23073,#23064,#23081,.T.); +#23081 = LINE('',#23082,#23083); +#23082 = CARTESIAN_POINT('',(72.758288655655,104.52323844596, + 120.36400943774)); +#23083 = VECTOR('',#23084,1.); +#23084 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23085 = PLANE('',#23086); +#23086 = AXIS2_PLACEMENT_3D('',#23087,#23088,#23089); +#23087 = CARTESIAN_POINT('',(73.204773655655,104.71401379565, + 119.77686328473)); +#23088 = DIRECTION('',(0.810297516114,-0.181089742233,0.557336918423)); +#23089 = DIRECTION('',(0.586018715895,0.250395702979,-0.770638732838)); +#23090 = ADVANCED_FACE('',(#23091),#23116,.T.); +#23091 = FACE_BOUND('',#23092,.T.); +#23092 = EDGE_LOOP('',(#23093,#23101,#23102,#23110)); +#23093 = ORIENTED_EDGE('',*,*,#23094,.T.); +#23094 = EDGE_CURVE('',#23095,#23064,#23097,.T.); +#23095 = VERTEX_POINT('',#23096); +#23096 = CARTESIAN_POINT('',(72.597538962181,103.26557002872, + 120.99864684321)); +#23097 = LINE('',#23098,#23099); +#23098 = CARTESIAN_POINT('',(72.758288655655,103.57218192967, + 120.05499244337)); +#23099 = VECTOR('',#23100,1.); +#23100 = DIRECTION('',(0.159925407346,0.305039668171,-0.938815564915)); +#23101 = ORIENTED_EDGE('',*,*,#23080,.F.); +#23102 = ORIENTED_EDGE('',*,*,#23103,.T.); +#23103 = EDGE_CURVE('',#23073,#23104,#23106,.T.); +#23104 = VERTEX_POINT('',#23105); +#23105 = CARTESIAN_POINT('',(72.597538962181,104.21662654502, + 121.30766383759)); +#23106 = LINE('',#23107,#23108); +#23107 = CARTESIAN_POINT('',(72.758288655655,104.52323844596, + 120.36400943774)); +#23108 = VECTOR('',#23109,1.); +#23109 = DIRECTION('',(-0.159925407346,-0.305039668171,0.938815564915)); +#23110 = ORIENTED_EDGE('',*,*,#23111,.T.); +#23111 = EDGE_CURVE('',#23104,#23095,#23112,.T.); +#23112 = LINE('',#23113,#23114); +#23113 = CARTESIAN_POINT('',(72.597538962181,104.21662654502, + 121.30766383759)); +#23114 = VECTOR('',#23115,1.); +#23115 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23116 = PLANE('',#23117); +#23117 = AXIS2_PLACEMENT_3D('',#23118,#23119,#23120); +#23118 = CARTESIAN_POINT('',(72.758288655655,104.52323844596, + 120.36400943774)); +#23119 = DIRECTION('',(0.987129102035,-4.941966870227E-02,0.152098100778 + )); +#23120 = DIRECTION('',(0.159925407346,0.305039668171,-0.938815564915)); +#23121 = ADVANCED_FACE('',(#23122),#23147,.T.); +#23122 = FACE_BOUND('',#23123,.T.); +#23123 = EDGE_LOOP('',(#23124,#23132,#23133,#23141)); +#23124 = ORIENTED_EDGE('',*,*,#23125,.T.); +#23125 = EDGE_CURVE('',#23126,#23095,#23128,.T.); +#23126 = VERTEX_POINT('',#23127); +#23127 = CARTESIAN_POINT('',(72.758288655655,102.96238386185, + 121.93175791768)); +#23128 = LINE('',#23129,#23130); +#23129 = CARTESIAN_POINT('',(72.597538962181,103.26557002872, + 120.99864684321)); +#23130 = VECTOR('',#23131,1.); +#23131 = DIRECTION('',(-0.161685439999,0.304951056095,-0.938542844988)); +#23132 = ORIENTED_EDGE('',*,*,#23111,.F.); +#23133 = ORIENTED_EDGE('',*,*,#23134,.T.); +#23134 = EDGE_CURVE('',#23104,#23135,#23137,.T.); +#23135 = VERTEX_POINT('',#23136); +#23136 = CARTESIAN_POINT('',(72.758288655655,103.91344037815, + 122.24077491206)); +#23137 = LINE('',#23138,#23139); +#23138 = CARTESIAN_POINT('',(72.597538962181,104.21662654502, + 121.30766383759)); +#23139 = VECTOR('',#23140,1.); +#23140 = DIRECTION('',(0.161685439999,-0.304951056095,0.938542844988)); +#23141 = ORIENTED_EDGE('',*,*,#23142,.T.); +#23142 = EDGE_CURVE('',#23135,#23126,#23143,.T.); +#23143 = LINE('',#23144,#23145); +#23144 = CARTESIAN_POINT('',(72.758288655655,103.91344037815, + 122.24077491206)); +#23145 = VECTOR('',#23146,1.); +#23146 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23147 = PLANE('',#23148); +#23148 = AXIS2_PLACEMENT_3D('',#23149,#23150,#23151); +#23149 = CARTESIAN_POINT('',(72.597538962181,104.21662654502, + 121.30766383759)); +#23150 = DIRECTION('',(0.986842347334,4.996354870274E-02,-0.153771991301 + )); +#23151 = DIRECTION('',(-0.161685439999,0.304951056095,-0.938542844988)); +#23152 = ADVANCED_FACE('',(#23153),#23178,.T.); +#23153 = FACE_BOUND('',#23154,.T.); +#23154 = EDGE_LOOP('',(#23155,#23163,#23164,#23172)); +#23155 = ORIENTED_EDGE('',*,*,#23156,.T.); +#23156 = EDGE_CURVE('',#23157,#23126,#23159,.T.); +#23157 = VERTEX_POINT('',#23158); +#23158 = CARTESIAN_POINT('',(73.210285655655,102.77331181384, + 122.51366184718)); +#23159 = LINE('',#23160,#23161); +#23160 = CARTESIAN_POINT('',(72.758288655655,102.96238386185, + 121.93175791768)); +#23161 = VECTOR('',#23162,1.); +#23162 = DIRECTION('',(-0.594187045536,0.24855067976,-0.764960335251)); +#23163 = ORIENTED_EDGE('',*,*,#23142,.F.); +#23164 = ORIENTED_EDGE('',*,*,#23165,.T.); +#23165 = EDGE_CURVE('',#23135,#23166,#23168,.T.); +#23166 = VERTEX_POINT('',#23167); +#23167 = CARTESIAN_POINT('',(73.210285655655,103.72436833014, + 122.82267884156)); +#23168 = LINE('',#23169,#23170); +#23169 = CARTESIAN_POINT('',(72.758288655655,103.91344037815, + 122.24077491206)); +#23170 = VECTOR('',#23171,1.); +#23171 = DIRECTION('',(0.594187045536,-0.24855067976,0.764960335251)); +#23172 = ORIENTED_EDGE('',*,*,#23173,.T.); +#23173 = EDGE_CURVE('',#23166,#23157,#23174,.T.); +#23174 = LINE('',#23175,#23176); +#23175 = CARTESIAN_POINT('',(73.210285655655,103.72436833014, + 122.82267884156)); +#23176 = VECTOR('',#23177,1.); +#23177 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23178 = PLANE('',#23179); +#23179 = AXIS2_PLACEMENT_3D('',#23180,#23181,#23182); +#23180 = CARTESIAN_POINT('',(72.758288655655,103.91344037815, + 122.24077491206)); +#23181 = DIRECTION('',(0.804326895557,0.183613894908,-0.565105461555)); +#23182 = DIRECTION('',(-0.594187045536,0.24855067976,-0.764960335251)); +#23183 = ADVANCED_FACE('',(#23184),#23209,.T.); +#23184 = FACE_BOUND('',#23185,.T.); +#23185 = EDGE_LOOP('',(#23186,#23194,#23195,#23203)); +#23186 = ORIENTED_EDGE('',*,*,#23187,.T.); +#23187 = EDGE_CURVE('',#23188,#23157,#23190,.T.); +#23188 = VERTEX_POINT('',#23189); +#23189 = CARTESIAN_POINT('',(73.893793655655,102.7068811945, + 122.71811427071)); +#23190 = LINE('',#23191,#23192); +#23191 = CARTESIAN_POINT('',(73.210285655655,102.77331181384, + 122.51366184718)); +#23192 = VECTOR('',#23193,1.); +#23193 = DIRECTION('',(-0.953930941986,9.271321373283E-02, + -0.285341931584)); +#23194 = ORIENTED_EDGE('',*,*,#23173,.F.); +#23195 = ORIENTED_EDGE('',*,*,#23196,.T.); +#23196 = EDGE_CURVE('',#23166,#23197,#23199,.T.); +#23197 = VERTEX_POINT('',#23198); +#23198 = CARTESIAN_POINT('',(73.893793655655,103.65793771079, + 123.02713126509)); +#23199 = LINE('',#23200,#23201); +#23200 = CARTESIAN_POINT('',(73.210285655655,103.72436833014, + 122.82267884156)); +#23201 = VECTOR('',#23202,1.); +#23202 = DIRECTION('',(0.953930941986,-9.271321373283E-02,0.285341931584 + )); +#23203 = ORIENTED_EDGE('',*,*,#23204,.T.); +#23204 = EDGE_CURVE('',#23197,#23188,#23205,.T.); +#23205 = LINE('',#23206,#23207); +#23206 = CARTESIAN_POINT('',(73.893793655655,103.65793771079, + 123.02713126509)); +#23207 = VECTOR('',#23208,1.); +#23208 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23209 = PLANE('',#23210); +#23210 = AXIS2_PLACEMENT_3D('',#23211,#23212,#23213); +#23211 = CARTESIAN_POINT('',(73.210285655655,103.72436833014, + 122.82267884156)); +#23212 = DIRECTION('',(0.300026262052,0.294780872534,-0.907242238472)); +#23213 = DIRECTION('',(-0.953930941986,9.271321373283E-02, + -0.285341931584)); +#23214 = ADVANCED_FACE('',(#23215),#23240,.T.); +#23215 = FACE_BOUND('',#23216,.T.); +#23216 = EDGE_LOOP('',(#23217,#23225,#23226,#23234)); +#23217 = ORIENTED_EDGE('',*,*,#23218,.T.); +#23218 = EDGE_CURVE('',#23219,#23188,#23221,.T.); +#23219 = VERTEX_POINT('',#23220); +#23220 = CARTESIAN_POINT('',(74.571788655655,102.77331181384, + 122.51366184718)); +#23221 = LINE('',#23222,#23223); +#23222 = CARTESIAN_POINT('',(73.893793655655,102.7068811945, + 122.71811427071)); +#23223 = VECTOR('',#23224,1.); +#23224 = DIRECTION('',(-0.953230647579,-9.339847978361E-02, + 0.287450963627)); +#23225 = ORIENTED_EDGE('',*,*,#23204,.F.); +#23226 = ORIENTED_EDGE('',*,*,#23227,.T.); +#23227 = EDGE_CURVE('',#23197,#23228,#23230,.T.); +#23228 = VERTEX_POINT('',#23229); +#23229 = CARTESIAN_POINT('',(74.571788655655,103.72436833014, + 122.82267884156)); +#23230 = LINE('',#23231,#23232); +#23231 = CARTESIAN_POINT('',(73.893793655655,103.65793771079, + 123.02713126509)); +#23232 = VECTOR('',#23233,1.); +#23233 = DIRECTION('',(0.953230647579,9.339847978361E-02,-0.287450963627 + )); +#23234 = ORIENTED_EDGE('',*,*,#23235,.T.); +#23235 = EDGE_CURVE('',#23228,#23219,#23236,.T.); +#23236 = LINE('',#23237,#23238); +#23237 = CARTESIAN_POINT('',(74.571788655655,103.72436833014, + 122.82267884156)); +#23238 = VECTOR('',#23239,1.); +#23239 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23240 = PLANE('',#23241); +#23241 = AXIS2_PLACEMENT_3D('',#23242,#23243,#23244); +#23242 = CARTESIAN_POINT('',(73.893793655655,103.65793771079, + 123.02713126509)); +#23243 = DIRECTION('',(-0.302243829575,0.294564469661,-0.906576218912)); +#23244 = DIRECTION('',(-0.953230647579,-9.339847978361E-02, + 0.287450963627)); +#23245 = ADVANCED_FACE('',(#23246),#23271,.T.); +#23246 = FACE_BOUND('',#23247,.T.); +#23247 = EDGE_LOOP('',(#23248,#23256,#23257,#23265)); +#23248 = ORIENTED_EDGE('',*,*,#23249,.T.); +#23249 = EDGE_CURVE('',#23250,#23219,#23252,.T.); +#23250 = VERTEX_POINT('',#23251); +#23251 = CARTESIAN_POINT('',(75.018273655655,102.96238386185, + 121.93175791768)); +#23252 = LINE('',#23253,#23254); +#23253 = CARTESIAN_POINT('',(74.571788655655,102.77331181384, + 122.51366184718)); +#23254 = VECTOR('',#23255,1.); +#23255 = DIRECTION('',(-0.589468953641,-0.249621157043,0.768254925562)); +#23256 = ORIENTED_EDGE('',*,*,#23235,.F.); +#23257 = ORIENTED_EDGE('',*,*,#23258,.T.); +#23258 = EDGE_CURVE('',#23228,#23259,#23261,.T.); +#23259 = VERTEX_POINT('',#23260); +#23260 = CARTESIAN_POINT('',(75.018273655655,103.91344037815, + 122.24077491206)); +#23261 = LINE('',#23262,#23263); +#23262 = CARTESIAN_POINT('',(74.571788655655,103.72436833014, + 122.82267884156)); +#23263 = VECTOR('',#23264,1.); +#23264 = DIRECTION('',(0.589468953641,0.249621157043,-0.768254925562)); +#23265 = ORIENTED_EDGE('',*,*,#23266,.T.); +#23266 = EDGE_CURVE('',#23259,#23250,#23267,.T.); +#23267 = LINE('',#23268,#23269); +#23268 = CARTESIAN_POINT('',(75.018273655655,103.91344037815, + 122.24077491206)); +#23269 = VECTOR('',#23270,1.); +#23270 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23271 = PLANE('',#23272); +#23272 = AXIS2_PLACEMENT_3D('',#23273,#23274,#23275); +#23273 = CARTESIAN_POINT('',(74.571788655655,103.72436833014, + 122.82267884156)); +#23274 = DIRECTION('',(-0.807791032813,0.182155924332,-0.560618289514)); +#23275 = DIRECTION('',(-0.589468953641,-0.249621157043,0.768254925562)); +#23276 = ADVANCED_FACE('',(#23277),#23302,.T.); +#23277 = FACE_BOUND('',#23278,.T.); +#23278 = EDGE_LOOP('',(#23279,#23280,#23288,#23296)); +#23279 = ORIENTED_EDGE('',*,*,#16167,.T.); +#23280 = ORIENTED_EDGE('',*,*,#23281,.F.); +#23281 = EDGE_CURVE('',#23282,#16170,#23284,.T.); +#23282 = VERTEX_POINT('',#23283); +#23283 = CARTESIAN_POINT('',(76.725652655655,104.49385556505, + 120.45444064659)); +#23284 = LINE('',#23285,#23286); +#23285 = CARTESIAN_POINT('',(76.725652655655,104.49385556505, + 120.45444064659)); +#23286 = VECTOR('',#23287,1.); +#23287 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23288 = ORIENTED_EDGE('',*,*,#23289,.T.); +#23289 = EDGE_CURVE('',#23282,#23290,#23292,.T.); +#23290 = VERTEX_POINT('',#23291); +#23291 = CARTESIAN_POINT('',(76.815785154992,104.21661783513, + 121.30769064386)); +#23292 = LINE('',#23293,#23294); +#23293 = CARTESIAN_POINT('',(76.725652655655,104.49385556505, + 120.45444064659)); +#23294 = VECTOR('',#23295,1.); +#23295 = DIRECTION('',(9.996103639657E-02,-0.307469237125,0.946293009286 + )); +#23296 = ORIENTED_EDGE('',*,*,#23297,.T.); +#23297 = EDGE_CURVE('',#23290,#16168,#23298,.T.); +#23298 = LINE('',#23299,#23300); +#23299 = CARTESIAN_POINT('',(76.815785154992,104.21661783513, + 121.30769064386)); +#23300 = VECTOR('',#23301,1.); +#23301 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23302 = PLANE('',#23303); +#23303 = AXIS2_PLACEMENT_3D('',#23304,#23305,#23306); +#23304 = CARTESIAN_POINT('',(76.725652655655,104.49385556505, + 120.45444064659)); +#23305 = DIRECTION('',(0.994991352325,3.088965902187E-02, + -9.506859504057E-02)); +#23306 = DIRECTION('',(-9.996103639657E-02,0.307469237125, + -0.946293009286)); +#23307 = ADVANCED_FACE('',(#23308),#23326,.T.); +#23308 = FACE_BOUND('',#23309,.T.); +#23309 = EDGE_LOOP('',(#23310,#23311,#23312,#23320)); +#23310 = ORIENTED_EDGE('',*,*,#16177,.T.); +#23311 = ORIENTED_EDGE('',*,*,#23297,.F.); +#23312 = ORIENTED_EDGE('',*,*,#23313,.T.); +#23313 = EDGE_CURVE('',#23290,#23314,#23316,.T.); +#23314 = VERTEX_POINT('',#23315); +#23315 = CARTESIAN_POINT('',(76.724274655655,103.94111964837, + 122.15558687778)); +#23316 = LINE('',#23317,#23318); +#23317 = CARTESIAN_POINT('',(76.815785154992,104.21661783513, + 121.30769064386)); +#23318 = VECTOR('',#23319,1.); +#23319 = DIRECTION('',(-0.102107744814,-0.307401869238,0.946085672251)); +#23320 = ORIENTED_EDGE('',*,*,#23321,.T.); +#23321 = EDGE_CURVE('',#23314,#16178,#23322,.T.); +#23322 = LINE('',#23323,#23324); +#23323 = CARTESIAN_POINT('',(76.724274655655,103.94111964837, + 122.15558687778)); +#23324 = VECTOR('',#23325,1.); +#23325 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23326 = PLANE('',#23327); +#23327 = AXIS2_PLACEMENT_3D('',#23328,#23329,#23330); +#23328 = CARTESIAN_POINT('',(76.815785154992,104.21661783513, + 121.30769064386)); +#23329 = DIRECTION('',(0.994773345265,-3.155302840496E-02, + 9.711023606996E-02)); +#23330 = DIRECTION('',(0.102107744814,0.307401869238,-0.946085672251)); +#23331 = ADVANCED_FACE('',(#23332),#23350,.T.); +#23332 = FACE_BOUND('',#23333,.T.); +#23333 = EDGE_LOOP('',(#23334,#23335,#23336,#23344)); +#23334 = ORIENTED_EDGE('',*,*,#16185,.T.); +#23335 = ORIENTED_EDGE('',*,*,#23321,.F.); +#23336 = ORIENTED_EDGE('',*,*,#23337,.T.); +#23337 = EDGE_CURVE('',#23314,#23338,#23340,.T.); +#23338 = VERTEX_POINT('',#23339); +#23339 = CARTESIAN_POINT('',(76.451423655655,103.70903799705, + 122.86986075533)); +#23340 = LINE('',#23341,#23342); +#23341 = CARTESIAN_POINT('',(76.724274655655,103.94111964837, + 122.15558687778)); +#23342 = VECTOR('',#23343,1.); +#23343 = DIRECTION('',(-0.341465011551,-0.29044336927,0.893892776083)); +#23344 = ORIENTED_EDGE('',*,*,#23345,.T.); +#23345 = EDGE_CURVE('',#23338,#16186,#23346,.T.); +#23346 = LINE('',#23347,#23348); +#23347 = CARTESIAN_POINT('',(76.451423655655,103.70903799705, + 122.86986075533)); +#23348 = VECTOR('',#23349,1.); +#23349 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23350 = PLANE('',#23351); +#23351 = AXIS2_PLACEMENT_3D('',#23352,#23353,#23354); +#23352 = CARTESIAN_POINT('',(76.724274655655,103.94111964837, + 122.15558687778)); +#23353 = DIRECTION('',(0.939894486571,-0.105518491554,0.324752524323)); +#23354 = DIRECTION('',(0.341465011551,0.29044336927,-0.893892776083)); +#23355 = ADVANCED_FACE('',(#23356),#23374,.T.); +#23356 = FACE_BOUND('',#23357,.T.); +#23357 = EDGE_LOOP('',(#23358,#23359,#23360,#23368)); +#23358 = ORIENTED_EDGE('',*,*,#16193,.T.); +#23359 = ORIENTED_EDGE('',*,*,#23345,.F.); +#23360 = ORIENTED_EDGE('',*,*,#23361,.T.); +#23361 = EDGE_CURVE('',#23338,#23362,#23364,.T.); +#23362 = VERTEX_POINT('',#23363); +#23363 = CARTESIAN_POINT('',(76.014584655655,103.52081790889, + 123.44914262201)); +#23364 = LINE('',#23365,#23366); +#23365 = CARTESIAN_POINT('',(76.451423655655,103.70903799705, + 122.86986075533)); +#23366 = VECTOR('',#23367,1.); +#23367 = DIRECTION('',(-0.582803033664,-0.251111366826,0.772841319679)); +#23368 = ORIENTED_EDGE('',*,*,#23369,.T.); +#23369 = EDGE_CURVE('',#23362,#16194,#23370,.T.); +#23370 = LINE('',#23371,#23372); +#23371 = CARTESIAN_POINT('',(76.014584655655,103.52081790889, + 123.44914262201)); +#23372 = VECTOR('',#23373,1.); +#23373 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23374 = PLANE('',#23375); +#23375 = AXIS2_PLACEMENT_3D('',#23376,#23377,#23378); +#23376 = CARTESIAN_POINT('',(76.451423655655,103.70903799705, + 122.86986075533)); +#23377 = DIRECTION('',(0.812613452973,-0.180096041775,0.554278622882)); +#23378 = DIRECTION('',(0.582803033664,0.251111366826,-0.772841319679)); +#23379 = ADVANCED_FACE('',(#23380),#23398,.T.); +#23380 = FACE_BOUND('',#23381,.T.); +#23381 = EDGE_LOOP('',(#23382,#23383,#23384,#23392)); +#23382 = ORIENTED_EDGE('',*,*,#16201,.T.); +#23383 = ORIENTED_EDGE('',*,*,#23369,.F.); +#23384 = ORIENTED_EDGE('',*,*,#23385,.T.); +#23385 = EDGE_CURVE('',#23362,#23386,#23388,.T.); +#23386 = VERTEX_POINT('',#23387); +#23387 = CARTESIAN_POINT('',(75.431673655655,103.38199480532, + 123.87639620245)); +#23388 = LINE('',#23389,#23390); +#23389 = CARTESIAN_POINT('',(76.014584655655,103.52081790889, + 123.44914262201)); +#23390 = VECTOR('',#23391,1.); +#23391 = DIRECTION('',(-0.792066848469,-0.188634591111,0.580557575605)); +#23392 = ORIENTED_EDGE('',*,*,#23393,.T.); +#23393 = EDGE_CURVE('',#23386,#16202,#23394,.T.); +#23394 = LINE('',#23395,#23396); +#23395 = CARTESIAN_POINT('',(75.431673655655,103.38199480532, + 123.87639620245)); +#23396 = VECTOR('',#23397,1.); +#23397 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23398 = PLANE('',#23399); +#23399 = AXIS2_PLACEMENT_3D('',#23400,#23401,#23402); +#23400 = CARTESIAN_POINT('',(76.014584655655,103.52081790889, + 123.44914262201)); +#23401 = DIRECTION('',(0.610434359744,-0.244762116858,0.753300337578)); +#23402 = DIRECTION('',(0.792066848469,0.188634591111,-0.580557575605)); +#23403 = ADVANCED_FACE('',(#23404),#23422,.T.); +#23404 = FACE_BOUND('',#23405,.T.); +#23405 = EDGE_LOOP('',(#23406,#23407,#23408,#23416)); +#23406 = ORIENTED_EDGE('',*,*,#16209,.T.); +#23407 = ORIENTED_EDGE('',*,*,#23393,.F.); +#23408 = ORIENTED_EDGE('',*,*,#23409,.T.); +#23409 = EDGE_CURVE('',#23386,#23410,#23412,.T.); +#23410 = VERTEX_POINT('',#23411); +#23411 = CARTESIAN_POINT('',(74.719226655655,103.29640142412, + 124.13982554267)); +#23412 = LINE('',#23413,#23414); +#23413 = CARTESIAN_POINT('',(75.431673655655,103.38199480532, + 123.87639620245)); +#23414 = VECTOR('',#23415,1.); +#23415 = DIRECTION('',(-0.9320385725,-0.1119751123,0.344623959699)); +#23416 = ORIENTED_EDGE('',*,*,#23417,.T.); +#23417 = EDGE_CURVE('',#23410,#16210,#23418,.T.); +#23418 = LINE('',#23419,#23420); +#23419 = CARTESIAN_POINT('',(74.719226655655,103.29640142412, + 124.13982554267)); +#23420 = VECTOR('',#23421,1.); +#23421 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23422 = PLANE('',#23423); +#23423 = AXIS2_PLACEMENT_3D('',#23424,#23425,#23426); +#23424 = CARTESIAN_POINT('',(75.431673655655,103.38199480532, + 123.87639620245)); +#23425 = DIRECTION('',(0.362359075191,-0.288015758315,0.886421357814)); +#23426 = DIRECTION('',(0.9320385725,0.1119751123,-0.344623959699)); +#23427 = ADVANCED_FACE('',(#23428),#23446,.T.); +#23428 = FACE_BOUND('',#23429,.T.); +#23429 = EDGE_LOOP('',(#23430,#23431,#23432,#23440)); +#23430 = ORIENTED_EDGE('',*,*,#16217,.T.); +#23431 = ORIENTED_EDGE('',*,*,#23417,.F.); +#23432 = ORIENTED_EDGE('',*,*,#23433,.T.); +#23433 = EDGE_CURVE('',#23410,#23434,#23436,.T.); +#23434 = VERTEX_POINT('',#23435); +#23435 = CARTESIAN_POINT('',(73.893781655655,103.26787019405, + 124.22763563976)); +#23436 = LINE('',#23437,#23438); +#23437 = CARTESIAN_POINT('',(74.719226655655,103.29640142412, + 124.13982554267)); +#23438 = VECTOR('',#23439,1.); +#23439 = DIRECTION('',(-0.993802479084,-3.435044997367E-02, + 0.105719814379)); +#23440 = ORIENTED_EDGE('',*,*,#23441,.T.); +#23441 = EDGE_CURVE('',#23434,#16218,#23442,.T.); +#23442 = LINE('',#23443,#23444); +#23443 = CARTESIAN_POINT('',(73.893781655655,103.26787019405, + 124.22763563976)); +#23444 = VECTOR('',#23445,1.); +#23445 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23446 = PLANE('',#23447); +#23447 = AXIS2_PLACEMENT_3D('',#23448,#23449,#23450); +#23448 = CARTESIAN_POINT('',(74.719226655655,103.29640142412, + 124.13982554267)); +#23449 = DIRECTION('',(0.111160391173,-0.307101855089,0.945162323644)); +#23450 = DIRECTION('',(0.993802479084,3.435044997367E-02,-0.105719814379 + )); +#23451 = ADVANCED_FACE('',(#23452),#23470,.T.); +#23452 = FACE_BOUND('',#23453,.T.); +#23453 = EDGE_LOOP('',(#23454,#23455,#23456,#23464)); +#23454 = ORIENTED_EDGE('',*,*,#16225,.T.); +#23455 = ORIENTED_EDGE('',*,*,#23441,.F.); +#23456 = ORIENTED_EDGE('',*,*,#23457,.T.); +#23457 = EDGE_CURVE('',#23434,#23458,#23460,.T.); +#23458 = VERTEX_POINT('',#23459); +#23459 = CARTESIAN_POINT('',(73.064201655655,103.29640142412, + 124.13982554267)); +#23460 = LINE('',#23461,#23462); +#23461 = CARTESIAN_POINT('',(73.893781655655,103.26787019405, + 124.22763563976)); +#23462 = VECTOR('',#23463,1.); +#23463 = DIRECTION('',(-0.99386354147,3.41813319553E-02,-0.105199322638) + ); +#23464 = ORIENTED_EDGE('',*,*,#23465,.T.); +#23465 = EDGE_CURVE('',#23458,#16226,#23466,.T.); +#23466 = LINE('',#23467,#23468); +#23467 = CARTESIAN_POINT('',(73.064201655655,103.29640142412, + 124.13982554267)); +#23468 = VECTOR('',#23469,1.); +#23469 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23470 = PLANE('',#23471); +#23471 = AXIS2_PLACEMENT_3D('',#23472,#23473,#23474); +#23472 = CARTESIAN_POINT('',(73.893781655655,103.26787019405, + 124.22763563976)); +#23473 = DIRECTION('',(-0.110613113769,-0.307120724404,0.945220397423)); +#23474 = DIRECTION('',(0.99386354147,-3.41813319553E-02,0.105199322638) + ); +#23475 = ADVANCED_FACE('',(#23476),#23494,.T.); +#23476 = FACE_BOUND('',#23477,.T.); +#23477 = EDGE_LOOP('',(#23478,#23479,#23480,#23488)); +#23478 = ORIENTED_EDGE('',*,*,#16233,.T.); +#23479 = ORIENTED_EDGE('',*,*,#23465,.F.); +#23480 = ORIENTED_EDGE('',*,*,#23481,.T.); +#23481 = EDGE_CURVE('',#23458,#23482,#23484,.T.); +#23482 = VERTEX_POINT('',#23483); +#23483 = CARTESIAN_POINT('',(72.350377655655,103.38199480532, + 123.87639620245)); +#23484 = LINE('',#23485,#23486); +#23485 = CARTESIAN_POINT('',(73.064201655655,103.29640142412, + 124.13982554267)); +#23486 = VECTOR('',#23487,1.); +#23487 = DIRECTION('',(-0.932274512057,0.11178739815,-0.344046234951)); +#23488 = ORIENTED_EDGE('',*,*,#23489,.T.); +#23489 = EDGE_CURVE('',#23482,#16234,#23490,.T.); +#23490 = LINE('',#23491,#23492); +#23491 = CARTESIAN_POINT('',(72.350377655655,103.38199480532, + 123.87639620245)); +#23492 = VECTOR('',#23493,1.); +#23493 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23494 = PLANE('',#23495); +#23495 = AXIS2_PLACEMENT_3D('',#23496,#23497,#23498); +#23496 = CARTESIAN_POINT('',(73.064201655655,103.29640142412, + 124.13982554267)); +#23497 = DIRECTION('',(-0.361751619442,-0.288088667648,0.886645749668)); +#23498 = DIRECTION('',(0.932274512057,-0.11178739815,0.344046234951)); +#23499 = ADVANCED_FACE('',(#23500),#23518,.T.); +#23500 = FACE_BOUND('',#23501,.T.); +#23501 = EDGE_LOOP('',(#23502,#23503,#23504,#23512)); +#23502 = ORIENTED_EDGE('',*,*,#16241,.T.); +#23503 = ORIENTED_EDGE('',*,*,#23489,.F.); +#23504 = ORIENTED_EDGE('',*,*,#23505,.T.); +#23505 = EDGE_CURVE('',#23482,#23506,#23508,.T.); +#23506 = VERTEX_POINT('',#23507); +#23507 = CARTESIAN_POINT('',(71.763332655655,103.51954043264, + 123.45307428965)); +#23508 = LINE('',#23509,#23510); +#23509 = CARTESIAN_POINT('',(72.350377655655,103.38199480532, + 123.87639620245)); +#23510 = VECTOR('',#23511,1.); +#23511 = DIRECTION('',(-0.796846461935,0.186702461448,-0.574611091949)); +#23512 = ORIENTED_EDGE('',*,*,#23513,.T.); +#23513 = EDGE_CURVE('',#23506,#16242,#23514,.T.); +#23514 = LINE('',#23515,#23516); +#23515 = CARTESIAN_POINT('',(71.763332655655,103.51954043264, + 123.45307428965)); +#23516 = VECTOR('',#23517,1.); +#23517 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23518 = PLANE('',#23519); +#23519 = AXIS2_PLACEMENT_3D('',#23520,#23521,#23522); +#23520 = CARTESIAN_POINT('',(72.350377655655,103.38199480532, + 123.87639620245)); +#23521 = DIRECTION('',(-0.604181856813,-0.246239098645,0.75784602011)); +#23522 = DIRECTION('',(0.796846461935,-0.186702461448,0.574611091949)); +#23523 = ADVANCED_FACE('',(#23524),#23542,.T.); +#23524 = FACE_BOUND('',#23525,.T.); +#23525 = EDGE_LOOP('',(#23526,#23527,#23528,#23536)); +#23526 = ORIENTED_EDGE('',*,*,#16249,.T.); +#23527 = ORIENTED_EDGE('',*,*,#23513,.F.); +#23528 = ORIENTED_EDGE('',*,*,#23529,.T.); +#23529 = EDGE_CURVE('',#23506,#23530,#23532,.T.); +#23530 = VERTEX_POINT('',#23531); +#23531 = CARTESIAN_POINT('',(71.325115655655,103.70733469538, + 122.87510297885)); +#23532 = LINE('',#23533,#23534); +#23533 = CARTESIAN_POINT('',(71.763332655655,103.51954043264, + 123.45307428965)); +#23534 = VECTOR('',#23535,1.); +#23535 = DIRECTION('',(-0.584886659293,0.250648329404,-0.771416237027)); +#23536 = ORIENTED_EDGE('',*,*,#23537,.T.); +#23537 = EDGE_CURVE('',#23530,#16250,#23538,.T.); +#23538 = LINE('',#23539,#23540); +#23539 = CARTESIAN_POINT('',(71.325115655655,103.70733469538, + 122.87510297885)); +#23540 = VECTOR('',#23541,1.); +#23541 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23542 = PLANE('',#23543); +#23543 = AXIS2_PLACEMENT_3D('',#23544,#23545,#23546); +#23544 = CARTESIAN_POINT('',(71.763332655655,103.51954043264, + 123.45307428965)); +#23545 = DIRECTION('',(-0.811115032398,-0.180739917505,0.556260268615)); +#23546 = DIRECTION('',(0.584886659293,-0.250648329404,0.771416237027)); +#23547 = ADVANCED_FACE('',(#23548),#23566,.T.); +#23548 = FACE_BOUND('',#23549,.T.); +#23549 = EDGE_LOOP('',(#23550,#23551,#23552,#23560)); +#23550 = ORIENTED_EDGE('',*,*,#16257,.T.); +#23551 = ORIENTED_EDGE('',*,*,#23537,.F.); +#23552 = ORIENTED_EDGE('',*,*,#23553,.T.); +#23553 = EDGE_CURVE('',#23530,#23554,#23556,.T.); +#23554 = VERTEX_POINT('',#23555); +#23555 = CARTESIAN_POINT('',(71.052263655655,103.93984217211, + 122.15951854542)); +#23556 = LINE('',#23557,#23558); +#23557 = CARTESIAN_POINT('',(71.325115655655,103.70733469538, + 122.87510297885)); +#23558 = VECTOR('',#23559,1.); +#23559 = DIRECTION('',(-0.340913481115,0.290505230967,-0.894083166811)); +#23560 = ORIENTED_EDGE('',*,*,#23561,.T.); +#23561 = EDGE_CURVE('',#23554,#16258,#23562,.T.); +#23562 = LINE('',#23563,#23564); +#23563 = CARTESIAN_POINT('',(71.052263655655,103.93984217211, + 122.15951854542)); +#23564 = VECTOR('',#23565,1.); +#23565 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23566 = PLANE('',#23567); +#23567 = AXIS2_PLACEMENT_3D('',#23568,#23569,#23570); +#23568 = CARTESIAN_POINT('',(71.325115655655,103.70733469538, + 122.87510297885)); +#23569 = DIRECTION('',(-0.940094675229,-0.105348059276,0.324227987707)); +#23570 = DIRECTION('',(0.340913481115,-0.290505230967,0.894083166811)); +#23571 = ADVANCED_FACE('',(#23572),#23590,.T.); +#23572 = FACE_BOUND('',#23573,.T.); +#23573 = EDGE_LOOP('',(#23574,#23575,#23576,#23584)); +#23574 = ORIENTED_EDGE('',*,*,#16265,.T.); +#23575 = ORIENTED_EDGE('',*,*,#23561,.F.); +#23576 = ORIENTED_EDGE('',*,*,#23577,.T.); +#23577 = EDGE_CURVE('',#23554,#23578,#23580,.T.); +#23578 = VERTEX_POINT('',#23579); +#23579 = CARTESIAN_POINT('',(70.960752455951,104.21663085534, + 121.30765057178)); +#23580 = LINE('',#23581,#23582); +#23581 = CARTESIAN_POINT('',(71.052263655655,103.93984217211, + 122.15951854542)); +#23582 = VECTOR('',#23583,1.); +#23583 = DIRECTION('',(-0.101637377799,0.307416753997,-0.946131482827)); +#23584 = ORIENTED_EDGE('',*,*,#23585,.T.); +#23585 = EDGE_CURVE('',#23578,#16266,#23586,.T.); +#23586 = LINE('',#23587,#23588); +#23587 = CARTESIAN_POINT('',(70.960752455951,104.21663085534, + 121.30765057178)); +#23588 = VECTOR('',#23589,1.); +#23589 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23590 = PLANE('',#23591); +#23591 = AXIS2_PLACEMENT_3D('',#23592,#23593,#23594); +#23592 = CARTESIAN_POINT('',(71.052263655655,103.93984217211, + 122.15951854542)); +#23593 = DIRECTION('',(-0.994821513355,-3.140767700349E-02, + 9.666289045456E-02)); +#23594 = DIRECTION('',(0.101637377799,-0.307416753997,0.946131482827)); +#23595 = ADVANCED_FACE('',(#23596),#23614,.T.); +#23596 = FACE_BOUND('',#23597,.T.); +#23597 = EDGE_LOOP('',(#23598,#23599,#23600,#23608)); +#23598 = ORIENTED_EDGE('',*,*,#16273,.T.); +#23599 = ORIENTED_EDGE('',*,*,#23585,.F.); +#23600 = ORIENTED_EDGE('',*,*,#23601,.T.); +#23601 = EDGE_CURVE('',#23578,#23602,#23604,.T.); +#23602 = VERTEX_POINT('',#23603); +#23603 = CARTESIAN_POINT('',(71.052263655655,104.49513335033, + 120.4505080279)); +#23604 = LINE('',#23605,#23606); +#23605 = CARTESIAN_POINT('',(70.960752455951,104.21663085534, + 121.30765057178)); +#23606 = VECTOR('',#23607,1.); +#23607 = DIRECTION('',(0.101018337181,0.307436237697,-0.94619144749)); +#23608 = ORIENTED_EDGE('',*,*,#23609,.T.); +#23609 = EDGE_CURVE('',#23602,#16274,#23610,.T.); +#23610 = LINE('',#23611,#23612); +#23611 = CARTESIAN_POINT('',(71.052263655655,104.49513335033, + 120.4505080279)); +#23612 = VECTOR('',#23613,1.); +#23613 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23614 = PLANE('',#23615); +#23615 = AXIS2_PLACEMENT_3D('',#23616,#23617,#23618); +#23616 = CARTESIAN_POINT('',(70.960752455951,104.21663085534, + 121.30765057178)); +#23617 = DIRECTION('',(-0.994884563934,3.121638293241E-02, + -9.607414784125E-02)); +#23618 = DIRECTION('',(-0.101018337181,-0.307436237697,0.94619144749)); +#23619 = ADVANCED_FACE('',(#23620),#23638,.T.); +#23620 = FACE_BOUND('',#23621,.T.); +#23621 = EDGE_LOOP('',(#23622,#23623,#23624,#23632)); +#23622 = ORIENTED_EDGE('',*,*,#16281,.T.); +#23623 = ORIENTED_EDGE('',*,*,#23609,.F.); +#23624 = ORIENTED_EDGE('',*,*,#23625,.T.); +#23625 = EDGE_CURVE('',#23602,#23626,#23628,.T.); +#23626 = VERTEX_POINT('',#23627); +#23627 = CARTESIAN_POINT('',(71.325115655655,104.72934381972, + 119.72968232201)); +#23628 = LINE('',#23629,#23630); +#23629 = CARTESIAN_POINT('',(71.052263655655,104.49513335033, + 120.4505080279)); +#23630 = VECTOR('',#23631,1.); +#23631 = DIRECTION('',(0.338719951823,0.290750146268,-0.8948369386)); +#23632 = ORIENTED_EDGE('',*,*,#23633,.T.); +#23633 = EDGE_CURVE('',#23626,#16282,#23634,.T.); +#23634 = LINE('',#23635,#23636); +#23635 = CARTESIAN_POINT('',(71.325115655655,104.72934381972, + 119.72968232201)); +#23636 = VECTOR('',#23637,1.); +#23637 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23638 = PLANE('',#23639); +#23639 = AXIS2_PLACEMENT_3D('',#23640,#23641,#23642); +#23640 = CARTESIAN_POINT('',(71.052263655655,104.49513335033, + 120.4505080279)); +#23641 = DIRECTION('',(-0.940887237791,0.104670221447,-0.32214181738)); +#23642 = DIRECTION('',(-0.338719951823,-0.290750146268,0.8948369386)); +#23643 = ADVANCED_FACE('',(#23644),#23662,.T.); +#23644 = FACE_BOUND('',#23645,.T.); +#23645 = EDGE_LOOP('',(#23646,#23647,#23648,#23656)); +#23646 = ORIENTED_EDGE('',*,*,#16289,.T.); +#23647 = ORIENTED_EDGE('',*,*,#23633,.F.); +#23648 = ORIENTED_EDGE('',*,*,#23649,.T.); +#23649 = EDGE_CURVE('',#23626,#23650,#23652,.T.); +#23650 = VERTEX_POINT('',#23651); +#23651 = CARTESIAN_POINT('',(71.757819655655,104.91756421689, + 119.15039950428)); +#23652 = LINE('',#23653,#23654); +#23653 = CARTESIAN_POINT('',(71.325115655655,104.72934381972, + 119.72968232201)); +#23654 = VECTOR('',#23655,1.); +#23655 = DIRECTION('',(0.579141922607,0.251918916146,-0.775326700925)); +#23656 = ORIENTED_EDGE('',*,*,#23657,.T.); +#23657 = EDGE_CURVE('',#23650,#16290,#23658,.T.); +#23658 = LINE('',#23659,#23660); +#23659 = CARTESIAN_POINT('',(71.757819655655,104.91756421689, + 119.15039950428)); +#23660 = VECTOR('',#23661,1.); +#23661 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23662 = PLANE('',#23663); +#23663 = AXIS2_PLACEMENT_3D('',#23664,#23665,#23666); +#23664 = CARTESIAN_POINT('',(71.325115655655,104.72934381972, + 119.72968232201)); +#23665 = DIRECTION('',(-0.815226737466,0.178964696241,-0.550796699355)); +#23666 = DIRECTION('',(-0.579141922607,-0.251918916146,0.775326700925)); +#23667 = ADVANCED_FACE('',(#23668),#23686,.T.); +#23668 = FACE_BOUND('',#23669,.T.); +#23669 = EDGE_LOOP('',(#23670,#23671,#23672,#23680)); +#23670 = ORIENTED_EDGE('',*,*,#16297,.T.); +#23671 = ORIENTED_EDGE('',*,*,#23657,.F.); +#23672 = ORIENTED_EDGE('',*,*,#23673,.T.); +#23673 = EDGE_CURVE('',#23650,#23674,#23676,.T.); +#23674 = VERTEX_POINT('',#23675); +#23675 = CARTESIAN_POINT('',(72.339352655655,105.05638732046, + 118.72314592384)); +#23676 = LINE('',#23677,#23678); +#23677 = CARTESIAN_POINT('',(71.757819655655,104.91756421689, + 119.15039950428)); +#23678 = VECTOR('',#23679,1.); +#23679 = DIRECTION('',(0.791367564695,0.188914646969,-0.581419498907)); +#23680 = ORIENTED_EDGE('',*,*,#23681,.T.); +#23681 = EDGE_CURVE('',#23674,#16298,#23682,.T.); +#23682 = LINE('',#23683,#23684); +#23683 = CARTESIAN_POINT('',(72.339352655655,105.05638732046, + 118.72314592384)); +#23684 = VECTOR('',#23685,1.); +#23685 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23686 = PLANE('',#23687); +#23687 = AXIS2_PLACEMENT_3D('',#23688,#23689,#23690); +#23688 = CARTESIAN_POINT('',(71.757819655655,104.91756421689, + 119.15039950428)); +#23689 = DIRECTION('',(-0.611340639536,0.244546026288,-0.752635279188)); +#23690 = DIRECTION('',(-0.791367564695,-0.188914646969,0.581419498907)); +#23691 = ADVANCED_FACE('',(#23692),#23710,.T.); +#23692 = FACE_BOUND('',#23693,.T.); +#23693 = EDGE_LOOP('',(#23694,#23695,#23696,#23704)); +#23694 = ORIENTED_EDGE('',*,*,#16305,.T.); +#23695 = ORIENTED_EDGE('',*,*,#23681,.F.); +#23696 = ORIENTED_EDGE('',*,*,#23697,.T.); +#23697 = EDGE_CURVE('',#23674,#23698,#23700,.T.); +#23698 = VERTEX_POINT('',#23699); +#23699 = CARTESIAN_POINT('',(73.054555655655,105.14070322541, + 118.46364825125)); +#23700 = LINE('',#23701,#23702); +#23701 = CARTESIAN_POINT('',(72.339352655655,105.05638732046, + 118.72314592384)); +#23702 = VECTOR('',#23703,1.); +#23703 = DIRECTION('',(0.934316521564,0.110147388958,-0.338998805658)); +#23704 = ORIENTED_EDGE('',*,*,#23705,.T.); +#23705 = EDGE_CURVE('',#23698,#16306,#23706,.T.); +#23706 = LINE('',#23707,#23708); +#23707 = CARTESIAN_POINT('',(73.054555655655,105.14070322541, + 118.46364825125)); +#23708 = VECTOR('',#23709,1.); +#23709 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23710 = PLANE('',#23711); +#23711 = AXIS2_PLACEMENT_3D('',#23712,#23713,#23714); +#23712 = CARTESIAN_POINT('',(72.339352655655,105.05638732046, + 118.72314592384)); +#23713 = DIRECTION('',(-0.356444438211,0.288719683289,-0.888587816116)); +#23714 = DIRECTION('',(-0.934316521564,-0.110147388958,0.338998805658)); +#23715 = ADVANCED_FACE('',(#23716),#23734,.T.); +#23716 = FACE_BOUND('',#23717,.T.); +#23717 = EDGE_LOOP('',(#23718,#23719,#23720,#23728)); +#23718 = ORIENTED_EDGE('',*,*,#16313,.T.); +#23719 = ORIENTED_EDGE('',*,*,#23705,.F.); +#23720 = ORIENTED_EDGE('',*,*,#23721,.T.); +#23721 = EDGE_CURVE('',#23698,#23722,#23724,.T.); +#23722 = VERTEX_POINT('',#23723); +#23723 = CARTESIAN_POINT('',(73.888269655655,105.16880832105, + 118.3771496611)); +#23724 = LINE('',#23725,#23726); +#23725 = CARTESIAN_POINT('',(73.054555655655,105.14070322541, + 118.46364825125)); +#23726 = VECTOR('',#23727,1.); +#23727 = DIRECTION('',(0.994102256074,3.351189854231E-02,-0.103139018443 + )); +#23728 = ORIENTED_EDGE('',*,*,#23729,.T.); +#23729 = EDGE_CURVE('',#23722,#16314,#23730,.T.); +#23730 = LINE('',#23731,#23732); +#23731 = CARTESIAN_POINT('',(73.888269655655,105.16880832105, + 118.3771496611)); +#23732 = VECTOR('',#23733,1.); +#23733 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23734 = PLANE('',#23735); +#23735 = AXIS2_PLACEMENT_3D('',#23736,#23737,#23738); +#23736 = CARTESIAN_POINT('',(73.054555655655,105.14070322541, + 118.46364825125)); +#23737 = DIRECTION('',(-0.108446781738,0.307194491273,-0.945447428503)); +#23738 = DIRECTION('',(-0.994102256074,-3.351189854231E-02, + 0.103139018443)); +#23739 = ADVANCED_FACE('',(#23740),#23758,.T.); +#23740 = FACE_BOUND('',#23741,.T.); +#23741 = EDGE_LOOP('',(#23742,#23743,#23744,#23752)); +#23742 = ORIENTED_EDGE('',*,*,#16321,.T.); +#23743 = ORIENTED_EDGE('',*,*,#23729,.F.); +#23744 = ORIENTED_EDGE('',*,*,#23745,.T.); +#23745 = EDGE_CURVE('',#23722,#23746,#23748,.T.); +#23746 = VERTEX_POINT('',#23747); +#23747 = CARTESIAN_POINT('',(74.726117655655,105.14027739999, + 118.46495880713)); +#23748 = LINE('',#23749,#23750); +#23749 = CARTESIAN_POINT('',(73.888269655655,105.16880832105, + 118.3771496611)); +#23750 = VECTOR('',#23751,1.); +#23751 = DIRECTION('',(0.993983098413,-3.384773051016E-02,0.104172602962 + )); +#23752 = ORIENTED_EDGE('',*,*,#23753,.T.); +#23753 = EDGE_CURVE('',#23746,#16322,#23754,.T.); +#23754 = LINE('',#23755,#23756); +#23755 = CARTESIAN_POINT('',(74.726117655655,105.14027739999, + 118.46495880713)); +#23756 = VECTOR('',#23757,1.); +#23757 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23758 = PLANE('',#23759); +#23759 = AXIS2_PLACEMENT_3D('',#23760,#23761,#23762); +#23760 = CARTESIAN_POINT('',(73.888269655655,105.16880832105, + 118.3771496611)); +#23761 = DIRECTION('',(0.109533556815,0.307157669531,-0.945334102833)); +#23762 = DIRECTION('',(-0.993983098413,3.384773051016E-02, + -0.104172602962)); +#23763 = ADVANCED_FACE('',(#23764),#23782,.T.); +#23764 = FACE_BOUND('',#23765,.T.); +#23765 = EDGE_LOOP('',(#23766,#23767,#23768,#23776)); +#23766 = ORIENTED_EDGE('',*,*,#16329,.T.); +#23767 = ORIENTED_EDGE('',*,*,#23753,.F.); +#23768 = ORIENTED_EDGE('',*,*,#23769,.T.); +#23769 = EDGE_CURVE('',#23746,#23770,#23772,.T.); +#23770 = VERTEX_POINT('',#23771); +#23771 = CARTESIAN_POINT('',(75.442698655655,105.05468401879, + 118.72838814736)); +#23772 = LINE('',#23773,#23774); +#23773 = CARTESIAN_POINT('',(74.726117655655,105.14027739999, + 118.46495880713)); +#23774 = VECTOR('',#23775,1.); +#23775 = DIRECTION('',(0.932743355133,-0.111413305071,0.342894894841)); +#23776 = ORIENTED_EDGE('',*,*,#23777,.T.); +#23777 = EDGE_CURVE('',#23770,#16330,#23778,.T.); +#23778 = LINE('',#23779,#23780); +#23779 = CARTESIAN_POINT('',(75.442698655655,105.05468401879, + 118.72838814736)); +#23780 = VECTOR('',#23781,1.); +#23781 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23782 = PLANE('',#23783); +#23783 = AXIS2_PLACEMENT_3D('',#23784,#23785,#23786); +#23784 = CARTESIAN_POINT('',(74.726117655655,105.14027739999, + 118.46495880713)); +#23785 = DIRECTION('',(0.360541028809,0.288233548127,-0.887091645931)); +#23786 = DIRECTION('',(-0.932743355133,0.111413305071,-0.342894894841)); +#23787 = ADVANCED_FACE('',(#23788),#23806,.T.); +#23788 = FACE_BOUND('',#23789,.T.); +#23789 = EDGE_LOOP('',(#23790,#23791,#23792,#23800)); +#23790 = ORIENTED_EDGE('',*,*,#16337,.T.); +#23791 = ORIENTED_EDGE('',*,*,#23777,.F.); +#23792 = ORIENTED_EDGE('',*,*,#23793,.T.); +#23793 = EDGE_CURVE('',#23770,#23794,#23796,.T.); +#23794 = VERTEX_POINT('',#23795); +#23795 = CARTESIAN_POINT('',(76.024230655655,104.91586091522, + 119.15564172779)); +#23796 = LINE('',#23797,#23798); +#23797 = CARTESIAN_POINT('',(75.442698655655,105.05468401879, + 118.72838814736)); +#23798 = VECTOR('',#23799,1.); +#23799 = DIRECTION('',(0.791367056101,-0.188914850414,0.581420125048)); +#23800 = ORIENTED_EDGE('',*,*,#23801,.T.); +#23801 = EDGE_CURVE('',#23794,#16338,#23802,.T.); +#23802 = LINE('',#23803,#23804); +#23803 = CARTESIAN_POINT('',(76.024230655655,104.91586091522, + 119.15564172779)); +#23804 = VECTOR('',#23805,1.); +#23805 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23806 = PLANE('',#23807); +#23807 = AXIS2_PLACEMENT_3D('',#23808,#23809,#23810); +#23808 = CARTESIAN_POINT('',(75.442698655655,105.05468401879, + 118.72838814736)); +#23809 = DIRECTION('',(0.611341297899,0.244545869124,-0.752634795487)); +#23810 = DIRECTION('',(-0.791367056101,0.188914850414,-0.581420125048)); +#23811 = ADVANCED_FACE('',(#23812),#23830,.T.); +#23812 = FACE_BOUND('',#23813,.T.); +#23813 = EDGE_LOOP('',(#23814,#23815,#23816,#23824)); +#23814 = ORIENTED_EDGE('',*,*,#16345,.T.); +#23815 = ORIENTED_EDGE('',*,*,#23801,.F.); +#23816 = ORIENTED_EDGE('',*,*,#23817,.T.); +#23817 = EDGE_CURVE('',#23794,#23818,#23820,.T.); +#23818 = VERTEX_POINT('',#23819); +#23819 = CARTESIAN_POINT('',(76.456935655655,104.72764051805, + 119.73492454553)); +#23820 = LINE('',#23821,#23822); +#23821 = CARTESIAN_POINT('',(76.024230655655,104.91586091522, + 119.15564172779)); +#23822 = VECTOR('',#23823,1.); +#23823 = DIRECTION('',(0.579142812116,-0.251918720874,0.77532609994)); +#23824 = ORIENTED_EDGE('',*,*,#23825,.T.); +#23825 = EDGE_CURVE('',#23818,#16346,#23826,.T.); +#23826 = LINE('',#23827,#23828); +#23827 = CARTESIAN_POINT('',(76.456935655655,104.72764051805, + 119.73492454553)); +#23828 = VECTOR('',#23829,1.); +#23829 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23830 = PLANE('',#23831); +#23831 = AXIS2_PLACEMENT_3D('',#23832,#23833,#23834); +#23832 = CARTESIAN_POINT('',(76.024230655655,104.91586091522, + 119.15564172779)); +#23833 = DIRECTION('',(0.815226105552,0.178964971114,-0.550797545329)); +#23834 = DIRECTION('',(-0.579142812116,0.251918720874,-0.77532609994)); +#23835 = ADVANCED_FACE('',(#23836),#23847,.T.); +#23836 = FACE_BOUND('',#23837,.T.); +#23837 = EDGE_LOOP('',(#23838,#23839,#23840,#23846)); +#23838 = ORIENTED_EDGE('',*,*,#16353,.T.); +#23839 = ORIENTED_EDGE('',*,*,#23825,.F.); +#23840 = ORIENTED_EDGE('',*,*,#23841,.T.); +#23841 = EDGE_CURVE('',#23818,#23282,#23842,.T.); +#23842 = LINE('',#23843,#23844); +#23843 = CARTESIAN_POINT('',(76.456935655655,104.72764051805, + 119.73492454553)); +#23844 = VECTOR('',#23845,1.); +#23845 = DIRECTION('',(0.334703990143,-0.291193920005,0.896202733724)); +#23846 = ORIENTED_EDGE('',*,*,#23281,.T.); +#23847 = PLANE('',#23848); +#23848 = AXIS2_PLACEMENT_3D('',#23849,#23850,#23851); +#23849 = CARTESIAN_POINT('',(76.456935655655,104.72764051805, + 119.73492454553)); +#23850 = DIRECTION('',(0.94232331977,0.103429221039,-0.318322410855)); +#23851 = DIRECTION('',(-0.334703990143,0.291193920005,-0.896202733724)); +#23852 = ADVANCED_FACE('',(#23853),#23869,.T.); +#23853 = FACE_BOUND('',#23854,.T.); +#23854 = EDGE_LOOP('',(#23855,#23861,#23862,#23868)); +#23855 = ORIENTED_EDGE('',*,*,#23856,.T.); +#23856 = EDGE_CURVE('',#22933,#23250,#23857,.T.); +#23857 = LINE('',#23858,#23859); +#23858 = CARTESIAN_POINT('',(75.018273655655,102.96238386185, + 121.93175791768)); +#23859 = VECTOR('',#23860,1.); +#23860 = DIRECTION('',(-0.161686425027,-0.304951006223,0.938542691499)); +#23861 = ORIENTED_EDGE('',*,*,#23266,.F.); +#23862 = ORIENTED_EDGE('',*,*,#23863,.T.); +#23863 = EDGE_CURVE('',#23259,#22941,#23864,.T.); +#23864 = LINE('',#23865,#23866); +#23865 = CARTESIAN_POINT('',(75.018273655655,103.91344037815, + 122.24077491206)); +#23866 = VECTOR('',#23867,1.); +#23867 = DIRECTION('',(0.161686425027,0.304951006223,-0.938542691499)); +#23868 = ORIENTED_EDGE('',*,*,#22940,.T.); +#23869 = PLANE('',#23870); +#23870 = AXIS2_PLACEMENT_3D('',#23871,#23872,#23873); +#23871 = CARTESIAN_POINT('',(75.018273655655,103.91344037815, + 122.24077491206)); +#23872 = DIRECTION('',(-0.986842185946,4.996385309293E-02, + -0.153772928118)); +#23873 = DIRECTION('',(-0.161686425027,-0.304951006223,0.938542691499)); +#23874 = ADVANCED_FACE('',(#23875,#23901),#23915,.T.); +#23875 = FACE_BOUND('',#23876,.T.); +#23876 = EDGE_LOOP('',(#23877,#23878,#23879,#23880,#23881,#23882,#23883, + #23884,#23885,#23886,#23887,#23888,#23889,#23890,#23891,#23892, + #23893,#23894,#23895,#23896,#23897,#23898,#23899,#23900)); +#23877 = ORIENTED_EDGE('',*,*,#23289,.F.); +#23878 = ORIENTED_EDGE('',*,*,#23841,.F.); +#23879 = ORIENTED_EDGE('',*,*,#23817,.F.); +#23880 = ORIENTED_EDGE('',*,*,#23793,.F.); +#23881 = ORIENTED_EDGE('',*,*,#23769,.F.); +#23882 = ORIENTED_EDGE('',*,*,#23745,.F.); +#23883 = ORIENTED_EDGE('',*,*,#23721,.F.); +#23884 = ORIENTED_EDGE('',*,*,#23697,.F.); +#23885 = ORIENTED_EDGE('',*,*,#23673,.F.); +#23886 = ORIENTED_EDGE('',*,*,#23649,.F.); +#23887 = ORIENTED_EDGE('',*,*,#23625,.F.); +#23888 = ORIENTED_EDGE('',*,*,#23601,.F.); +#23889 = ORIENTED_EDGE('',*,*,#23577,.F.); +#23890 = ORIENTED_EDGE('',*,*,#23553,.F.); +#23891 = ORIENTED_EDGE('',*,*,#23529,.F.); +#23892 = ORIENTED_EDGE('',*,*,#23505,.F.); +#23893 = ORIENTED_EDGE('',*,*,#23481,.F.); +#23894 = ORIENTED_EDGE('',*,*,#23457,.F.); +#23895 = ORIENTED_EDGE('',*,*,#23433,.F.); +#23896 = ORIENTED_EDGE('',*,*,#23409,.F.); +#23897 = ORIENTED_EDGE('',*,*,#23385,.F.); +#23898 = ORIENTED_EDGE('',*,*,#23361,.F.); +#23899 = ORIENTED_EDGE('',*,*,#23337,.F.); +#23900 = ORIENTED_EDGE('',*,*,#23313,.F.); +#23901 = FACE_BOUND('',#23902,.T.); +#23902 = EDGE_LOOP('',(#23903,#23904,#23905,#23906,#23907,#23908,#23909, + #23910,#23911,#23912,#23913,#23914)); +#23903 = ORIENTED_EDGE('',*,*,#22948,.F.); +#23904 = ORIENTED_EDGE('',*,*,#23863,.F.); +#23905 = ORIENTED_EDGE('',*,*,#23258,.F.); +#23906 = ORIENTED_EDGE('',*,*,#23227,.F.); +#23907 = ORIENTED_EDGE('',*,*,#23196,.F.); +#23908 = ORIENTED_EDGE('',*,*,#23165,.F.); +#23909 = ORIENTED_EDGE('',*,*,#23134,.F.); +#23910 = ORIENTED_EDGE('',*,*,#23103,.F.); +#23911 = ORIENTED_EDGE('',*,*,#23072,.F.); +#23912 = ORIENTED_EDGE('',*,*,#23041,.F.); +#23913 = ORIENTED_EDGE('',*,*,#23010,.F.); +#23914 = ORIENTED_EDGE('',*,*,#22979,.F.); +#23915 = PLANE('',#23916); +#23916 = AXIS2_PLACEMENT_3D('',#23917,#23918,#23919); +#23917 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#23918 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#23919 = DIRECTION('',(-1.,0.,0.)); +#23920 = ADVANCED_FACE('',(#23921),#23946,.T.); +#23921 = FACE_BOUND('',#23922,.T.); +#23922 = EDGE_LOOP('',(#23923,#23924,#23932,#23940)); +#23923 = ORIENTED_EDGE('',*,*,#15861,.T.); +#23924 = ORIENTED_EDGE('',*,*,#23925,.F.); +#23925 = EDGE_CURVE('',#23926,#15864,#23928,.T.); +#23926 = VERTEX_POINT('',#23927); +#23927 = CARTESIAN_POINT('',(86.345749655655,105.13133475719, + 118.49248143166)); +#23928 = LINE('',#23929,#23930); +#23929 = CARTESIAN_POINT('',(86.345749655655,105.13133475719, + 118.49248143166)); +#23930 = VECTOR('',#23931,1.); +#23931 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23932 = ORIENTED_EDGE('',*,*,#23933,.T.); +#23933 = EDGE_CURVE('',#23926,#23934,#23936,.T.); +#23934 = VERTEX_POINT('',#23935); +#23935 = CARTESIAN_POINT('',(86.345749655655,103.30534283085, + 124.11230672237)); +#23936 = LINE('',#23937,#23938); +#23937 = CARTESIAN_POINT('',(86.345749655655,105.13133475719, + 118.49248143166)); +#23938 = VECTOR('',#23939,1.); +#23939 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#23940 = ORIENTED_EDGE('',*,*,#23941,.T.); +#23941 = EDGE_CURVE('',#23934,#15862,#23942,.T.); +#23942 = LINE('',#23943,#23944); +#23943 = CARTESIAN_POINT('',(86.345749655655,103.30534283085, + 124.11230672237)); +#23944 = VECTOR('',#23945,1.); +#23945 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23946 = PLANE('',#23947); +#23947 = AXIS2_PLACEMENT_3D('',#23948,#23949,#23950); +#23948 = CARTESIAN_POINT('',(86.345749655655,105.13133475719, + 118.49248143166)); +#23949 = DIRECTION('',(1.,0.,0.)); +#23950 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#23951 = ADVANCED_FACE('',(#23952),#23970,.T.); +#23952 = FACE_BOUND('',#23953,.T.); +#23953 = EDGE_LOOP('',(#23954,#23955,#23956,#23964)); +#23954 = ORIENTED_EDGE('',*,*,#15871,.T.); +#23955 = ORIENTED_EDGE('',*,*,#23941,.F.); +#23956 = ORIENTED_EDGE('',*,*,#23957,.T.); +#23957 = EDGE_CURVE('',#23934,#23958,#23960,.T.); +#23958 = VERTEX_POINT('',#23959); +#23959 = CARTESIAN_POINT('',(84.736199655655,103.30534283085, + 124.11230672237)); +#23960 = LINE('',#23961,#23962); +#23961 = CARTESIAN_POINT('',(86.345749655655,103.30534283085, + 124.11230672237)); +#23962 = VECTOR('',#23963,1.); +#23963 = DIRECTION('',(-1.,0.,0.)); +#23964 = ORIENTED_EDGE('',*,*,#23965,.T.); +#23965 = EDGE_CURVE('',#23958,#15872,#23966,.T.); +#23966 = LINE('',#23967,#23968); +#23967 = CARTESIAN_POINT('',(84.736199655655,103.30534283085, + 124.11230672237)); +#23968 = VECTOR('',#23969,1.); +#23969 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23970 = PLANE('',#23971); +#23971 = AXIS2_PLACEMENT_3D('',#23972,#23973,#23974); +#23972 = CARTESIAN_POINT('',(86.345749655655,103.30534283085, + 124.11230672237)); +#23973 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#23974 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#23975 = ADVANCED_FACE('',(#23976),#23994,.T.); +#23976 = FACE_BOUND('',#23977,.T.); +#23977 = EDGE_LOOP('',(#23978,#23979,#23980,#23988)); +#23978 = ORIENTED_EDGE('',*,*,#15879,.T.); +#23979 = ORIENTED_EDGE('',*,*,#23965,.F.); +#23980 = ORIENTED_EDGE('',*,*,#23981,.T.); +#23981 = EDGE_CURVE('',#23958,#23982,#23984,.T.); +#23982 = VERTEX_POINT('',#23983); +#23983 = CARTESIAN_POINT('',(84.736199655655,103.61194578447, + 123.16867985958)); +#23984 = LINE('',#23985,#23986); +#23985 = CARTESIAN_POINT('',(84.736199655655,103.30534283085, + 124.11230672237)); +#23986 = VECTOR('',#23987,1.); +#23987 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#23988 = ORIENTED_EDGE('',*,*,#23989,.T.); +#23989 = EDGE_CURVE('',#23982,#15880,#23990,.T.); +#23990 = LINE('',#23991,#23992); +#23991 = CARTESIAN_POINT('',(84.736199655655,103.61194578447, + 123.16867985958)); +#23992 = VECTOR('',#23993,1.); +#23993 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#23994 = PLANE('',#23995); +#23995 = AXIS2_PLACEMENT_3D('',#23996,#23997,#23998); +#23996 = CARTESIAN_POINT('',(84.736199655655,103.30534283085, + 124.11230672237)); +#23997 = DIRECTION('',(-1.,0.,0.)); +#23998 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#23999 = ADVANCED_FACE('',(#24000),#24018,.T.); +#24000 = FACE_BOUND('',#24001,.T.); +#24001 = EDGE_LOOP('',(#24002,#24003,#24004,#24012)); +#24002 = ORIENTED_EDGE('',*,*,#15887,.T.); +#24003 = ORIENTED_EDGE('',*,*,#23989,.F.); +#24004 = ORIENTED_EDGE('',*,*,#24005,.T.); +#24005 = EDGE_CURVE('',#23982,#24006,#24008,.T.); +#24006 = VERTEX_POINT('',#24007); +#24007 = CARTESIAN_POINT('',(84.703129655655,103.61194578447, + 123.16867985958)); +#24008 = LINE('',#24009,#24010); +#24009 = CARTESIAN_POINT('',(84.736199655655,103.61194578447, + 123.16867985958)); +#24010 = VECTOR('',#24011,1.); +#24011 = DIRECTION('',(-1.,0.,0.)); +#24012 = ORIENTED_EDGE('',*,*,#24013,.T.); +#24013 = EDGE_CURVE('',#24006,#15888,#24014,.T.); +#24014 = LINE('',#24015,#24016); +#24015 = CARTESIAN_POINT('',(84.703129655655,103.61194578447, + 123.16867985958)); +#24016 = VECTOR('',#24017,1.); +#24017 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24018 = PLANE('',#24019); +#24019 = AXIS2_PLACEMENT_3D('',#24020,#24021,#24022); +#24020 = CARTESIAN_POINT('',(84.736199655655,103.61194578447, + 123.16867985958)); +#24021 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24022 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#24023 = ADVANCED_FACE('',(#24024),#24042,.T.); +#24024 = FACE_BOUND('',#24025,.T.); +#24025 = EDGE_LOOP('',(#24026,#24027,#24028,#24036)); +#24026 = ORIENTED_EDGE('',*,*,#15895,.T.); +#24027 = ORIENTED_EDGE('',*,*,#24013,.F.); +#24028 = ORIENTED_EDGE('',*,*,#24029,.T.); +#24029 = EDGE_CURVE('',#24006,#24030,#24032,.T.); +#24030 = VERTEX_POINT('',#24031); +#24031 = CARTESIAN_POINT('',(84.457838655655,103.47099355381, + 123.60248621941)); +#24032 = LINE('',#24033,#24034); +#24033 = CARTESIAN_POINT('',(84.703129655655,103.61194578447, + 123.16867985958)); +#24034 = VECTOR('',#24035,1.); +#24035 = DIRECTION('',(-0.473623751299,-0.272159697012,0.837621418976)); +#24036 = ORIENTED_EDGE('',*,*,#24037,.T.); +#24037 = EDGE_CURVE('',#24030,#15896,#24038,.T.); +#24038 = LINE('',#24039,#24040); +#24039 = CARTESIAN_POINT('',(84.457838655655,103.47099355381, + 123.60248621941)); +#24040 = VECTOR('',#24041,1.); +#24041 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24042 = PLANE('',#24043); +#24043 = AXIS2_PLACEMENT_3D('',#24044,#24045,#24046); +#24044 = CARTESIAN_POINT('',(84.703129655655,103.61194578447, + 123.16867985958)); +#24045 = DIRECTION('',(0.880727280266,-0.146357788091,0.450442954945)); +#24046 = DIRECTION('',(0.473623751299,0.272159697012,-0.837621418976)); +#24047 = ADVANCED_FACE('',(#24048),#24066,.T.); +#24048 = FACE_BOUND('',#24049,.T.); +#24049 = EDGE_LOOP('',(#24050,#24051,#24052,#24060)); +#24050 = ORIENTED_EDGE('',*,*,#15903,.T.); +#24051 = ORIENTED_EDGE('',*,*,#24037,.F.); +#24052 = ORIENTED_EDGE('',*,*,#24053,.T.); +#24053 = EDGE_CURVE('',#24030,#24054,#24056,.T.); +#24054 = VERTEX_POINT('',#24055); +#24055 = CARTESIAN_POINT('',(84.085767655655,103.36155333115, + 123.939308591)); +#24056 = LINE('',#24057,#24058); +#24057 = CARTESIAN_POINT('',(84.457838655655,103.47099355381, + 123.60248621941)); +#24058 = VECTOR('',#24059,1.); +#24059 = DIRECTION('',(-0.724329754096,-0.213052910782,0.65570943606)); +#24060 = ORIENTED_EDGE('',*,*,#24061,.T.); +#24061 = EDGE_CURVE('',#24054,#15904,#24062,.T.); +#24062 = LINE('',#24063,#24064); +#24063 = CARTESIAN_POINT('',(84.085767655655,103.36155333115, + 123.939308591)); +#24064 = VECTOR('',#24065,1.); +#24065 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24066 = PLANE('',#24067); +#24067 = AXIS2_PLACEMENT_3D('',#24068,#24069,#24070); +#24068 = CARTESIAN_POINT('',(84.457838655655,103.47099355381, + 123.60248621941)); +#24069 = DIRECTION('',(0.689453702094,-0.223830203547,0.68887853258)); +#24070 = DIRECTION('',(0.724329754096,0.213052910782,-0.65570943606)); +#24071 = ADVANCED_FACE('',(#24072),#24090,.T.); +#24072 = FACE_BOUND('',#24073,.T.); +#24073 = EDGE_LOOP('',(#24074,#24075,#24076,#24084)); +#24074 = ORIENTED_EDGE('',*,*,#15911,.T.); +#24075 = ORIENTED_EDGE('',*,*,#24061,.F.); +#24076 = ORIENTED_EDGE('',*,*,#24077,.T.); +#24077 = EDGE_CURVE('',#24054,#24078,#24080,.T.); +#24078 = VERTEX_POINT('',#24079); +#24079 = CARTESIAN_POINT('',(83.606210655655,103.29128997402, + 124.1555569685)); +#24080 = LINE('',#24081,#24082); +#24081 = CARTESIAN_POINT('',(84.085767655655,103.36155333115, + 123.939308591)); +#24082 = VECTOR('',#24083,1.); +#24083 = DIRECTION('',(-0.903578557705,-0.132389815799,0.407453956574)); +#24084 = ORIENTED_EDGE('',*,*,#24085,.T.); +#24085 = EDGE_CURVE('',#24078,#15912,#24086,.T.); +#24086 = LINE('',#24087,#24088); +#24087 = CARTESIAN_POINT('',(83.606210655655,103.29128997402, + 124.1555569685)); +#24088 = VECTOR('',#24089,1.); +#24089 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24090 = PLANE('',#24091); +#24091 = AXIS2_PLACEMENT_3D('',#24092,#24093,#24094); +#24092 = CARTESIAN_POINT('',(84.085767655655,103.36155333115, + 123.939308591)); +#24093 = DIRECTION('',(0.428422443454,-0.279221130084,0.85935427529)); +#24094 = DIRECTION('',(0.903578557705,0.132389815799,-0.407453956574)); +#24095 = ADVANCED_FACE('',(#24096),#24114,.T.); +#24096 = FACE_BOUND('',#24097,.T.); +#24097 = EDGE_LOOP('',(#24098,#24099,#24100,#24108)); +#24098 = ORIENTED_EDGE('',*,*,#15919,.T.); +#24099 = ORIENTED_EDGE('',*,*,#24085,.F.); +#24100 = ORIENTED_EDGE('',*,*,#24101,.T.); +#24101 = EDGE_CURVE('',#24078,#24102,#24104,.T.); +#24102 = VERTEX_POINT('',#24103); +#24103 = CARTESIAN_POINT('',(83.049482655655,103.26786895798, + 124.22763944399)); +#24104 = LINE('',#24105,#24106); +#24105 = CARTESIAN_POINT('',(83.606210655655,103.29128997402, + 124.1555569685)); +#24106 = VECTOR('',#24107,1.); +#24107 = DIRECTION('',(-0.990860035637,-4.168453676794E-02, + 0.128291812565)); +#24108 = ORIENTED_EDGE('',*,*,#24109,.T.); +#24109 = EDGE_CURVE('',#24102,#15920,#24110,.T.); +#24110 = LINE('',#24111,#24112); +#24111 = CARTESIAN_POINT('',(83.049482655655,103.26786895798, + 124.22763944399)); +#24112 = VECTOR('',#24113,1.); +#24113 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24114 = PLANE('',#24115); +#24115 = AXIS2_PLACEMENT_3D('',#24116,#24117,#24118); +#24116 = CARTESIAN_POINT('',(83.606210655655,103.29128997402, + 124.1555569685)); +#24117 = DIRECTION('',(0.134893994592,-0.306192590059,0.942363893629)); +#24118 = DIRECTION('',(0.990860035637,4.168453676794E-02,-0.128291812565 + )); +#24119 = ADVANCED_FACE('',(#24120),#24138,.T.); +#24120 = FACE_BOUND('',#24121,.T.); +#24121 = EDGE_LOOP('',(#24122,#24123,#24124,#24132)); +#24122 = ORIENTED_EDGE('',*,*,#15927,.T.); +#24123 = ORIENTED_EDGE('',*,*,#24109,.F.); +#24124 = ORIENTED_EDGE('',*,*,#24125,.T.); +#24125 = EDGE_CURVE('',#24102,#24126,#24128,.T.); +#24126 = VERTEX_POINT('',#24127); +#24127 = CARTESIAN_POINT('',(82.305340655655,103.31215634656, + 124.09133687724)); +#24128 = LINE('',#24129,#24130); +#24129 = CARTESIAN_POINT('',(83.049482655655,103.26786895798, + 124.22763944399)); +#24130 = VECTOR('',#24131,1.); +#24131 = DIRECTION('',(-0.981954341807,5.8440718984E-02,-0.179862038718) + ); +#24132 = ORIENTED_EDGE('',*,*,#24133,.T.); +#24133 = EDGE_CURVE('',#24126,#15928,#24134,.T.); +#24134 = LINE('',#24135,#24136); +#24135 = CARTESIAN_POINT('',(82.305340655655,103.31215634656, + 124.09133687724)); +#24136 = VECTOR('',#24137,1.); +#24137 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24138 = PLANE('',#24139); +#24139 = AXIS2_PLACEMENT_3D('',#24140,#24141,#24142); +#24140 = CARTESIAN_POINT('',(83.049482655655,103.26786895798, + 124.22763944399)); +#24141 = DIRECTION('',(-0.189118139286,-0.303440579319,0.93389407548)); +#24142 = DIRECTION('',(0.981954341807,-5.8440718984E-02,0.179862038718) + ); +#24143 = ADVANCED_FACE('',(#24144),#24162,.T.); +#24144 = FACE_BOUND('',#24145,.T.); +#24145 = EDGE_LOOP('',(#24146,#24147,#24148,#24156)); +#24146 = ORIENTED_EDGE('',*,*,#15935,.T.); +#24147 = ORIENTED_EDGE('',*,*,#24133,.F.); +#24148 = ORIENTED_EDGE('',*,*,#24149,.T.); +#24149 = EDGE_CURVE('',#24126,#24150,#24152,.T.); +#24150 = VERTEX_POINT('',#24151); +#24151 = CARTESIAN_POINT('',(81.748612655655,103.43990737122, + 123.69815965178)); +#24152 = LINE('',#24153,#24154); +#24153 = CARTESIAN_POINT('',(82.305340655655,103.31215634656, + 124.09133687724)); +#24154 = VECTOR('',#24155,1.); +#24155 = DIRECTION('',(-0.802853161901,0.18422876896,-0.566997849302)); +#24156 = ORIENTED_EDGE('',*,*,#24157,.T.); +#24157 = EDGE_CURVE('',#24150,#15936,#24158,.T.); +#24158 = LINE('',#24159,#24160); +#24159 = CARTESIAN_POINT('',(81.748612655655,103.43990737122, + 123.69815965178)); +#24160 = VECTOR('',#24161,1.); +#24161 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24162 = PLANE('',#24163); +#24163 = AXIS2_PLACEMENT_3D('',#24164,#24165,#24166); +#24164 = CARTESIAN_POINT('',(82.305340655655,103.31215634656, + 124.09133687724)); +#24165 = DIRECTION('',(-0.596176819766,-0.248095271015,0.763558731254)); +#24166 = DIRECTION('',(0.802853161901,-0.18422876896,0.566997849302)); +#24167 = ADVANCED_FACE('',(#24168),#24186,.T.); +#24168 = FACE_BOUND('',#24169,.T.); +#24169 = EDGE_LOOP('',(#24170,#24171,#24172,#24180)); +#24170 = ORIENTED_EDGE('',*,*,#15943,.T.); +#24171 = ORIENTED_EDGE('',*,*,#24157,.F.); +#24172 = ORIENTED_EDGE('',*,*,#24173,.T.); +#24173 = EDGE_CURVE('',#24150,#24174,#24176,.T.); +#24174 = VERTEX_POINT('',#24175); +#24175 = CARTESIAN_POINT('',(81.423395655655,103.64430944331, + 123.06907475957)); +#24176 = LINE('',#24177,#24178); +#24177 = CARTESIAN_POINT('',(81.748612655655,103.43990737122, + 123.69815965178)); +#24178 = VECTOR('',#24179,1.); +#24179 = DIRECTION('',(-0.441220561133,0.277311447252,-0.853476875877)); +#24180 = ORIENTED_EDGE('',*,*,#24181,.T.); +#24181 = EDGE_CURVE('',#24174,#15944,#24182,.T.); +#24182 = LINE('',#24183,#24184); +#24183 = CARTESIAN_POINT('',(81.423395655655,103.64430944331, + 123.06907475957)); +#24184 = VECTOR('',#24185,1.); +#24185 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24186 = PLANE('',#24187); +#24187 = AXIS2_PLACEMENT_3D('',#24188,#24189,#24190); +#24188 = CARTESIAN_POINT('',(81.748612655655,103.43990737122, + 123.69815965178)); +#24189 = DIRECTION('',(-0.897398694246,-0.136344651658,0.419625689789)); +#24190 = DIRECTION('',(0.441220561133,-0.277311447252,0.853476875877)); +#24191 = ADVANCED_FACE('',(#24192),#24210,.T.); +#24192 = FACE_BOUND('',#24193,.T.); +#24193 = EDGE_LOOP('',(#24194,#24195,#24196,#24204)); +#24194 = ORIENTED_EDGE('',*,*,#15951,.T.); +#24195 = ORIENTED_EDGE('',*,*,#24181,.F.); +#24196 = ORIENTED_EDGE('',*,*,#24197,.T.); +#24197 = EDGE_CURVE('',#24174,#24198,#24200,.T.); +#24198 = VERTEX_POINT('',#24199); +#24199 = CARTESIAN_POINT('',(81.390325655655,103.64430944331, + 123.06907475957)); +#24200 = LINE('',#24201,#24202); +#24201 = CARTESIAN_POINT('',(81.423395655655,103.64430944331, + 123.06907475957)); +#24202 = VECTOR('',#24203,1.); +#24203 = DIRECTION('',(-1.,0.,0.)); +#24204 = ORIENTED_EDGE('',*,*,#24205,.T.); +#24205 = EDGE_CURVE('',#24198,#15952,#24206,.T.); +#24206 = LINE('',#24207,#24208); +#24207 = CARTESIAN_POINT('',(81.390325655655,103.64430944331, + 123.06907475957)); +#24208 = VECTOR('',#24209,1.); +#24209 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24210 = PLANE('',#24211); +#24211 = AXIS2_PLACEMENT_3D('',#24212,#24213,#24214); +#24212 = CARTESIAN_POINT('',(81.423395655655,103.64430944331, + 123.06907475957)); +#24213 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24214 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#24215 = ADVANCED_FACE('',(#24216),#24234,.T.); +#24216 = FACE_BOUND('',#24217,.T.); +#24217 = EDGE_LOOP('',(#24218,#24219,#24220,#24228)); +#24218 = ORIENTED_EDGE('',*,*,#15959,.T.); +#24219 = ORIENTED_EDGE('',*,*,#24205,.F.); +#24220 = ORIENTED_EDGE('',*,*,#24221,.T.); +#24221 = EDGE_CURVE('',#24198,#24222,#24224,.T.); +#24222 = VERTEX_POINT('',#24223); +#24223 = CARTESIAN_POINT('',(80.993450655655,103.44501758526, + 123.68243203017)); +#24224 = LINE('',#24225,#24226); +#24225 = CARTESIAN_POINT('',(81.390325655655,103.64430944331, + 123.06907475957)); +#24226 = VECTOR('',#24227,1.); +#24227 = DIRECTION('',(-0.524097351985,-0.263176907274,0.809975234881)); +#24228 = ORIENTED_EDGE('',*,*,#24229,.T.); +#24229 = EDGE_CURVE('',#24222,#15960,#24230,.T.); +#24230 = LINE('',#24231,#24232); +#24231 = CARTESIAN_POINT('',(80.993450655655,103.44501758526, + 123.68243203017)); +#24232 = VECTOR('',#24233,1.); +#24233 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24234 = PLANE('',#24235); +#24235 = AXIS2_PLACEMENT_3D('',#24236,#24237,#24238); +#24236 = CARTESIAN_POINT('',(81.390325655655,103.64430944331, + 123.06907475957)); +#24237 = DIRECTION('',(0.851658362046,-0.16195498847,0.498446201778)); +#24238 = DIRECTION('',(0.524097351985,0.263176907274,-0.809975234881)); +#24239 = ADVANCED_FACE('',(#24240),#24258,.T.); +#24240 = FACE_BOUND('',#24241,.T.); +#24241 = EDGE_LOOP('',(#24242,#24243,#24244,#24252)); +#24242 = ORIENTED_EDGE('',*,*,#15967,.T.); +#24243 = ORIENTED_EDGE('',*,*,#24229,.F.); +#24244 = ORIENTED_EDGE('',*,*,#24245,.T.); +#24245 = EDGE_CURVE('',#24222,#24246,#24248,.T.); +#24246 = VERTEX_POINT('',#24247); +#24247 = CARTESIAN_POINT('',(80.359551655655,103.31385964823, + 124.08609465372)); +#24248 = LINE('',#24249,#24250); +#24249 = CARTESIAN_POINT('',(80.993450655655,103.44501758526, + 123.68243203017)); +#24250 = VECTOR('',#24251,1.); +#24251 = DIRECTION('',(-0.830937439537,-0.17192650622,0.529135377796)); +#24252 = ORIENTED_EDGE('',*,*,#24253,.T.); +#24253 = EDGE_CURVE('',#24246,#15968,#24254,.T.); +#24254 = LINE('',#24255,#24256); +#24255 = CARTESIAN_POINT('',(80.359551655655,103.31385964823, + 124.08609465372)); +#24256 = VECTOR('',#24257,1.); +#24257 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24258 = PLANE('',#24259); +#24259 = AXIS2_PLACEMENT_3D('',#24260,#24261,#24262); +#24260 = CARTESIAN_POINT('',(80.993450655655,103.44501758526, + 123.68243203017)); +#24261 = DIRECTION('',(0.556365861261,-0.256773790079,0.790268466505)); +#24262 = DIRECTION('',(0.830937439537,0.17192650622,-0.529135377796)); +#24263 = ADVANCED_FACE('',(#24264),#24282,.T.); +#24264 = FACE_BOUND('',#24265,.T.); +#24265 = EDGE_LOOP('',(#24266,#24267,#24268,#24276)); +#24266 = ORIENTED_EDGE('',*,*,#15975,.T.); +#24267 = ORIENTED_EDGE('',*,*,#24253,.F.); +#24268 = ORIENTED_EDGE('',*,*,#24269,.T.); +#24269 = EDGE_CURVE('',#24246,#24270,#24272,.T.); +#24270 = VERTEX_POINT('',#24271); +#24271 = CARTESIAN_POINT('',(79.554776655655,103.26786895798, + 124.22763944399)); +#24272 = LINE('',#24273,#24274); +#24273 = CARTESIAN_POINT('',(80.359551655655,103.31385964823, + 124.08609465372)); +#24274 = VECTOR('',#24275,1.); +#24275 = DIRECTION('',(-0.983326474847,-5.619441871958E-02, + 0.172948637374)); +#24276 = ORIENTED_EDGE('',*,*,#24277,.T.); +#24277 = EDGE_CURVE('',#24270,#15976,#24278,.T.); +#24278 = LINE('',#24279,#24280); +#24279 = CARTESIAN_POINT('',(79.554776655655,103.26786895798, + 124.22763944399)); +#24280 = VECTOR('',#24281,1.); +#24281 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24282 = PLANE('',#24283); +#24283 = AXIS2_PLACEMENT_3D('',#24284,#24285,#24286); +#24284 = CARTESIAN_POINT('',(80.359551655655,103.31385964823, + 124.08609465372)); +#24285 = DIRECTION('',(0.181848958933,-0.303864591747,0.935199051549)); +#24286 = DIRECTION('',(0.983326474847,5.619441871958E-02,-0.172948637374 + )); +#24287 = ADVANCED_FACE('',(#24288),#24306,.T.); +#24288 = FACE_BOUND('',#24289,.T.); +#24289 = EDGE_LOOP('',(#24290,#24291,#24292,#24300)); +#24290 = ORIENTED_EDGE('',*,*,#15983,.T.); +#24291 = ORIENTED_EDGE('',*,*,#24277,.F.); +#24292 = ORIENTED_EDGE('',*,*,#24293,.T.); +#24293 = EDGE_CURVE('',#24270,#24294,#24296,.T.); +#24294 = VERTEX_POINT('',#24295); +#24295 = CARTESIAN_POINT('',(78.540539655655,103.3445200054, + 123.99173177723)); +#24296 = LINE('',#24297,#24298); +#24297 = CARTESIAN_POINT('',(79.554776655655,103.26786895798, + 124.22763944399)); +#24298 = VECTOR('',#24299,1.); +#24299 = DIRECTION('',(-0.971371739417,7.341150171134E-02, + -0.225937370256)); +#24300 = ORIENTED_EDGE('',*,*,#24301,.T.); +#24301 = EDGE_CURVE('',#24294,#15984,#24302,.T.); +#24302 = LINE('',#24303,#24304); +#24303 = CARTESIAN_POINT('',(78.540539655655,103.3445200054, + 123.99173177723)); +#24304 = VECTOR('',#24305,1.); +#24305 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24306 = PLANE('',#24307); +#24307 = AXIS2_PLACEMENT_3D('',#24308,#24309,#24310); +#24308 = CARTESIAN_POINT('',(79.554776655655,103.26786895798, + 124.22763944399)); +#24309 = DIRECTION('',(-0.237564609868,-0.300170375335,0.923829422518)); +#24310 = DIRECTION('',(0.971371739417,-7.341150171134E-02,0.225937370256 + )); +#24311 = ADVANCED_FACE('',(#24312),#24330,.T.); +#24312 = FACE_BOUND('',#24313,.T.); +#24313 = EDGE_LOOP('',(#24314,#24315,#24316,#24324)); +#24314 = ORIENTED_EDGE('',*,*,#15991,.T.); +#24315 = ORIENTED_EDGE('',*,*,#24301,.F.); +#24316 = ORIENTED_EDGE('',*,*,#24317,.T.); +#24317 = EDGE_CURVE('',#24294,#24318,#24320,.T.); +#24318 = VERTEX_POINT('',#24319); +#24319 = CARTESIAN_POINT('',(77.862544655655,103.55914219654, + 123.33119259286)); +#24320 = LINE('',#24321,#24322); +#24321 = CARTESIAN_POINT('',(78.540539655655,103.3445200054, + 123.99173177723)); +#24322 = VECTOR('',#24323,1.); +#24323 = DIRECTION('',(-0.698536448447,0.221124673714,-0.680551767954)); +#24324 = ORIENTED_EDGE('',*,*,#24325,.T.); +#24325 = EDGE_CURVE('',#24318,#15992,#24326,.T.); +#24326 = LINE('',#24327,#24328); +#24327 = CARTESIAN_POINT('',(77.862544655655,103.55914219654, + 123.33119259286)); +#24328 = VECTOR('',#24329,1.); +#24329 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24330 = PLANE('',#24331); +#24331 = AXIS2_PLACEMENT_3D('',#24332,#24333,#24334); +#24332 = CARTESIAN_POINT('',(78.540539655655,103.3445200054, + 123.99173177723)); +#24333 = DIRECTION('',(-0.715574475642,-0.215859633761,0.664347641166)); +#24334 = DIRECTION('',(0.698536448447,-0.221124673714,0.680551767954)); +#24335 = ADVANCED_FACE('',(#24336),#24354,.T.); +#24336 = FACE_BOUND('',#24337,.T.); +#24337 = EDGE_LOOP('',(#24338,#24339,#24340,#24348)); +#24338 = ORIENTED_EDGE('',*,*,#15999,.T.); +#24339 = ORIENTED_EDGE('',*,*,#24325,.F.); +#24340 = ORIENTED_EDGE('',*,*,#24341,.T.); +#24341 = EDGE_CURVE('',#24318,#24342,#24344,.T.); +#24342 = VERTEX_POINT('',#24343); +#24343 = CARTESIAN_POINT('',(77.620009655655,103.88277878492, + 122.33514159278)); +#24344 = LINE('',#24345,#24346); +#24345 = CARTESIAN_POINT('',(77.862544655655,103.55914219654, + 123.33119259286)); +#24346 = VECTOR('',#24347,1.); +#24347 = DIRECTION('',(-0.225608442089,0.301049937152,-0.926536435441)); +#24348 = ORIENTED_EDGE('',*,*,#24349,.T.); +#24349 = EDGE_CURVE('',#24342,#16000,#24350,.T.); +#24350 = LINE('',#24351,#24352); +#24351 = CARTESIAN_POINT('',(77.620009655655,103.88277878492, + 122.33514159278)); +#24352 = VECTOR('',#24353,1.); +#24353 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24354 = PLANE('',#24355); +#24355 = AXIS2_PLACEMENT_3D('',#24356,#24357,#24358); +#24356 = CARTESIAN_POINT('',(77.862544655655,103.55914219654, + 123.33119259286)); +#24357 = DIRECTION('',(-0.974218061246,-6.971684267999E-02,0.21456637898 + )); +#24358 = DIRECTION('',(0.225608442089,-0.301049937152,0.926536435441)); +#24359 = ADVANCED_FACE('',(#24360),#24378,.T.); +#24360 = FACE_BOUND('',#24361,.T.); +#24361 = EDGE_LOOP('',(#24362,#24363,#24364,#24372)); +#24362 = ORIENTED_EDGE('',*,*,#16007,.T.); +#24363 = ORIENTED_EDGE('',*,*,#24349,.F.); +#24364 = ORIENTED_EDGE('',*,*,#24365,.T.); +#24365 = EDGE_CURVE('',#24342,#24366,#24368,.T.); +#24366 = VERTEX_POINT('',#24367); +#24367 = CARTESIAN_POINT('',(77.620009655655,105.13133475719, + 118.49248143166)); +#24368 = LINE('',#24369,#24370); +#24369 = CARTESIAN_POINT('',(77.620009655655,103.88277878492, + 122.33514159278)); +#24370 = VECTOR('',#24371,1.); +#24371 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24372 = ORIENTED_EDGE('',*,*,#24373,.T.); +#24373 = EDGE_CURVE('',#24366,#16008,#24374,.T.); +#24374 = LINE('',#24375,#24376); +#24375 = CARTESIAN_POINT('',(77.620009655655,105.13133475719, + 118.49248143166)); +#24376 = VECTOR('',#24377,1.); +#24377 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24378 = PLANE('',#24379); +#24379 = AXIS2_PLACEMENT_3D('',#24380,#24381,#24382); +#24380 = CARTESIAN_POINT('',(77.620009655655,103.88277878492, + 122.33514159278)); +#24381 = DIRECTION('',(-1.,0.,0.)); +#24382 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#24383 = ADVANCED_FACE('',(#24384),#24402,.T.); +#24384 = FACE_BOUND('',#24385,.T.); +#24385 = EDGE_LOOP('',(#24386,#24387,#24388,#24396)); +#24386 = ORIENTED_EDGE('',*,*,#16015,.T.); +#24387 = ORIENTED_EDGE('',*,*,#24373,.F.); +#24388 = ORIENTED_EDGE('',*,*,#24389,.T.); +#24389 = EDGE_CURVE('',#24366,#24390,#24392,.T.); +#24390 = VERTEX_POINT('',#24391); +#24391 = CARTESIAN_POINT('',(79.229559655655,105.13133475719, + 118.49248143166)); +#24392 = LINE('',#24393,#24394); +#24393 = CARTESIAN_POINT('',(77.620009655655,105.13133475719, + 118.49248143166)); +#24394 = VECTOR('',#24395,1.); +#24395 = DIRECTION('',(1.,0.,0.)); +#24396 = ORIENTED_EDGE('',*,*,#24397,.T.); +#24397 = EDGE_CURVE('',#24390,#16016,#24398,.T.); +#24398 = LINE('',#24399,#24400); +#24399 = CARTESIAN_POINT('',(79.229559655655,105.13133475719, + 118.49248143166)); +#24400 = VECTOR('',#24401,1.); +#24401 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24402 = PLANE('',#24403); +#24403 = AXIS2_PLACEMENT_3D('',#24404,#24405,#24406); +#24404 = CARTESIAN_POINT('',(77.620009655655,105.13133475719, + 118.49248143166)); +#24405 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24406 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24407 = ADVANCED_FACE('',(#24408),#24426,.T.); +#24408 = FACE_BOUND('',#24409,.T.); +#24409 = EDGE_LOOP('',(#24410,#24411,#24412,#24420)); +#24410 = ORIENTED_EDGE('',*,*,#16023,.T.); +#24411 = ORIENTED_EDGE('',*,*,#24397,.F.); +#24412 = ORIENTED_EDGE('',*,*,#24413,.T.); +#24413 = EDGE_CURVE('',#24390,#24414,#24416,.T.); +#24414 = VERTEX_POINT('',#24415); +#24415 = CARTESIAN_POINT('',(79.229559655655,104.00712320623, + 121.95244881435)); +#24416 = LINE('',#24417,#24418); +#24417 = CARTESIAN_POINT('',(79.229559655655,105.13133475719, + 118.49248143166)); +#24418 = VECTOR('',#24419,1.); +#24419 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24420 = ORIENTED_EDGE('',*,*,#24421,.T.); +#24421 = EDGE_CURVE('',#24414,#16024,#24422,.T.); +#24422 = LINE('',#24423,#24424); +#24423 = CARTESIAN_POINT('',(79.229559655655,104.00712320623, + 121.95244881435)); +#24424 = VECTOR('',#24425,1.); +#24425 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24426 = PLANE('',#24427); +#24427 = AXIS2_PLACEMENT_3D('',#24428,#24429,#24430); +#24428 = CARTESIAN_POINT('',(79.229559655655,105.13133475719, + 118.49248143166)); +#24429 = DIRECTION('',(1.,0.,0.)); +#24430 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#24431 = ADVANCED_FACE('',(#24432),#24450,.T.); +#24432 = FACE_BOUND('',#24433,.T.); +#24433 = EDGE_LOOP('',(#24434,#24435,#24436,#24444)); +#24434 = ORIENTED_EDGE('',*,*,#16031,.T.); +#24435 = ORIENTED_EDGE('',*,*,#24421,.F.); +#24436 = ORIENTED_EDGE('',*,*,#24437,.T.); +#24437 = EDGE_CURVE('',#24414,#24438,#24440,.T.); +#24438 = VERTEX_POINT('',#24439); +#24439 = CARTESIAN_POINT('',(79.345314655655,103.82827158629, + 122.50289750063)); +#24440 = LINE('',#24441,#24442); +#24441 = CARTESIAN_POINT('',(79.229559655655,104.00712320623, + 121.95244881435)); +#24442 = VECTOR('',#24443,1.); +#24443 = DIRECTION('',(0.196115809324,-0.303016113281,0.932587703342)); +#24444 = ORIENTED_EDGE('',*,*,#24445,.T.); +#24445 = EDGE_CURVE('',#24438,#16032,#24446,.T.); +#24446 = LINE('',#24447,#24448); +#24447 = CARTESIAN_POINT('',(79.345314655655,103.82827158629, + 122.50289750063)); +#24448 = VECTOR('',#24449,1.); +#24449 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24450 = PLANE('',#24451); +#24451 = AXIS2_PLACEMENT_3D('',#24452,#24453,#24454); +#24452 = CARTESIAN_POINT('',(79.229559655655,104.00712320623, + 121.95244881435)); +#24453 = DIRECTION('',(0.980580740854,6.060311794683E-02,-0.186517218406 + )); +#24454 = DIRECTION('',(-0.196115809324,0.303016113281,-0.932587703342)); +#24455 = ADVANCED_FACE('',(#24456),#24474,.T.); +#24456 = FACE_BOUND('',#24457,.T.); +#24457 = EDGE_LOOP('',(#24458,#24459,#24460,#24468)); +#24458 = ORIENTED_EDGE('',*,*,#16039,.T.); +#24459 = ORIENTED_EDGE('',*,*,#24445,.F.); +#24460 = ORIENTED_EDGE('',*,*,#24461,.T.); +#24461 = EDGE_CURVE('',#24438,#24462,#24464,.T.); +#24462 = VERTEX_POINT('',#24463); +#24463 = CARTESIAN_POINT('',(79.670532655655,103.71755357836, + 122.84365249091)); +#24464 = LINE('',#24465,#24466); +#24465 = CARTESIAN_POINT('',(79.345314655655,103.82827158629, + 122.50289750063)); +#24466 = VECTOR('',#24467,1.); +#24467 = DIRECTION('',(0.672105610214,-0.228813270737,0.704214836434)); +#24468 = ORIENTED_EDGE('',*,*,#24469,.T.); +#24469 = EDGE_CURVE('',#24462,#16040,#24470,.T.); +#24470 = LINE('',#24471,#24472); +#24471 = CARTESIAN_POINT('',(79.670532655655,103.71755357836, + 122.84365249091)); +#24472 = VECTOR('',#24473,1.); +#24473 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24474 = PLANE('',#24475); +#24475 = AXIS2_PLACEMENT_3D('',#24476,#24477,#24478); +#24476 = CARTESIAN_POINT('',(79.345314655655,103.82827158629, + 122.50289750063)); +#24477 = DIRECTION('',(0.740455298259,0.207692055571,-0.639210420232)); +#24478 = DIRECTION('',(-0.672105610214,0.228813270737,-0.704214836434)); +#24479 = ADVANCED_FACE('',(#24480),#24498,.T.); +#24480 = FACE_BOUND('',#24481,.T.); +#24481 = EDGE_LOOP('',(#24482,#24483,#24484,#24492)); +#24482 = ORIENTED_EDGE('',*,*,#16047,.T.); +#24483 = ORIENTED_EDGE('',*,*,#24469,.F.); +#24484 = ORIENTED_EDGE('',*,*,#24485,.T.); +#24485 = EDGE_CURVE('',#24462,#24486,#24488,.T.); +#24486 = VERTEX_POINT('',#24487); +#24487 = CARTESIAN_POINT('',(80.194187655655,103.68008001451, + 122.95898426147)); +#24488 = LINE('',#24489,#24490); +#24489 = CARTESIAN_POINT('',(79.670532655655,103.71755357836, + 122.84365249091)); +#24490 = VECTOR('',#24491,1.); +#24491 = DIRECTION('',(0.974218265698,-6.971656986024E-02,0.214565539327 + )); +#24492 = ORIENTED_EDGE('',*,*,#24493,.T.); +#24493 = EDGE_CURVE('',#24486,#16048,#24494,.T.); +#24494 = LINE('',#24495,#24496); +#24495 = CARTESIAN_POINT('',(80.194187655655,103.68008001451, + 122.95898426147)); +#24496 = VECTOR('',#24497,1.); +#24497 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24498 = PLANE('',#24499); +#24499 = AXIS2_PLACEMENT_3D('',#24500,#24501,#24502); +#24500 = CARTESIAN_POINT('',(79.670532655655,103.71755357836, + 122.84365249091)); +#24501 = DIRECTION('',(0.225607559226,0.301050000331,-0.926536629886)); +#24502 = DIRECTION('',(-0.974218265698,6.971656986024E-02, + -0.214565539327)); +#24503 = ADVANCED_FACE('',(#24504),#24522,.T.); +#24504 = FACE_BOUND('',#24505,.T.); +#24505 = EDGE_LOOP('',(#24506,#24507,#24508,#24516)); +#24506 = ORIENTED_EDGE('',*,*,#16055,.T.); +#24507 = ORIENTED_EDGE('',*,*,#24493,.F.); +#24508 = ORIENTED_EDGE('',*,*,#24509,.T.); +#24509 = EDGE_CURVE('',#24486,#24510,#24512,.T.); +#24510 = VERTEX_POINT('',#24511); +#24511 = CARTESIAN_POINT('',(80.728866655655,103.7226637924, + 122.8279248693)); +#24512 = LINE('',#24513,#24514); +#24513 = CARTESIAN_POINT('',(80.194187655655,103.68008001451, + 122.95898426147)); +#24514 = VECTOR('',#24515,1.); +#24515 = DIRECTION('',(0.96835513441,7.712332065616E-02,-0.237361174316) + ); +#24516 = ORIENTED_EDGE('',*,*,#24517,.T.); +#24517 = EDGE_CURVE('',#24510,#16056,#24518,.T.); +#24518 = LINE('',#24519,#24520); +#24519 = CARTESIAN_POINT('',(80.728866655655,103.7226637924, + 122.8279248693)); +#24520 = VECTOR('',#24521,1.); +#24521 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24522 = PLANE('',#24523); +#24523 = AXIS2_PLACEMENT_3D('',#24524,#24525,#24526); +#24524 = CARTESIAN_POINT('',(80.194187655655,103.68008001451, + 122.95898426147)); +#24525 = DIRECTION('',(-0.249576308294,0.299238193123,-0.920960460669)); +#24526 = DIRECTION('',(-0.96835513441,-7.712332065616E-02,0.237361174316 + )); +#24527 = ADVANCED_FACE('',(#24528),#24546,.T.); +#24528 = FACE_BOUND('',#24529,.T.); +#24529 = EDGE_LOOP('',(#24530,#24531,#24532,#24540)); +#24530 = ORIENTED_EDGE('',*,*,#16063,.T.); +#24531 = ORIENTED_EDGE('',*,*,#24517,.F.); +#24532 = ORIENTED_EDGE('',*,*,#24533,.T.); +#24533 = EDGE_CURVE('',#24510,#24534,#24536,.T.); +#24534 = VERTEX_POINT('',#24535); +#24535 = CARTESIAN_POINT('',(81.081644655655,103.8418983087, + 122.46095876143)); +#24536 = LINE('',#24537,#24538); +#24537 = CARTESIAN_POINT('',(80.728866655655,103.7226637924, + 122.8279248693)); +#24538 = VECTOR('',#24539,1.); +#24539 = DIRECTION('',(0.674769140011,0.228063462067,-0.701907162635)); +#24540 = ORIENTED_EDGE('',*,*,#24541,.T.); +#24541 = EDGE_CURVE('',#24534,#16064,#24542,.T.); +#24542 = LINE('',#24543,#24544); +#24543 = CARTESIAN_POINT('',(81.081644655655,103.8418983087, + 122.46095876143)); +#24544 = VECTOR('',#24545,1.); +#24545 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24546 = PLANE('',#24547); +#24547 = AXIS2_PLACEMENT_3D('',#24548,#24549,#24550); +#24548 = CARTESIAN_POINT('',(80.728866655655,103.7226637924, + 122.8279248693)); +#24549 = DIRECTION('',(-0.738028866433,0.208515131543,-0.641743587603)); +#24550 = DIRECTION('',(-0.674769140011,-0.228063462067,0.701907162635)); +#24551 = ADVANCED_FACE('',(#24552),#24570,.T.); +#24552 = FACE_BOUND('',#24553,.T.); +#24553 = EDGE_LOOP('',(#24554,#24555,#24556,#24564)); +#24554 = ORIENTED_EDGE('',*,*,#16071,.T.); +#24555 = ORIENTED_EDGE('',*,*,#24541,.F.); +#24556 = ORIENTED_EDGE('',*,*,#24557,.T.); +#24557 = EDGE_CURVE('',#24534,#24558,#24560,.T.); +#24558 = VERTEX_POINT('',#24559); +#24559 = CARTESIAN_POINT('',(81.208424655655,104.02074992863, + 121.91051007515)); +#24560 = LINE('',#24561,#24562); +#24561 = CARTESIAN_POINT('',(81.081644655655,103.8418983087, + 122.46095876143)); +#24562 = VECTOR('',#24563,1.); +#24563 = DIRECTION('',(0.213975117346,0.301859886129,-0.929029202072)); +#24564 = ORIENTED_EDGE('',*,*,#24565,.T.); +#24565 = EDGE_CURVE('',#24558,#16072,#24566,.T.); +#24566 = LINE('',#24567,#24568); +#24567 = CARTESIAN_POINT('',(81.208424655655,104.02074992863, + 121.91051007515)); +#24568 = VECTOR('',#24569,1.); +#24569 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24570 = PLANE('',#24571); +#24571 = AXIS2_PLACEMENT_3D('',#24572,#24573,#24574); +#24572 = CARTESIAN_POINT('',(81.081644655655,103.8418983087, + 122.46095876143)); +#24573 = DIRECTION('',(-0.976839111193,6.61219476333E-02,-0.203502429677 + )); +#24574 = DIRECTION('',(-0.213975117346,-0.301859886129,0.929029202072)); +#24575 = ADVANCED_FACE('',(#24576),#24594,.T.); +#24576 = FACE_BOUND('',#24577,.T.); +#24577 = EDGE_LOOP('',(#24578,#24579,#24580,#24588)); +#24578 = ORIENTED_EDGE('',*,*,#16079,.T.); +#24579 = ORIENTED_EDGE('',*,*,#24565,.F.); +#24580 = ORIENTED_EDGE('',*,*,#24581,.T.); +#24581 = EDGE_CURVE('',#24558,#24582,#24584,.T.); +#24582 = VERTEX_POINT('',#24583); +#24583 = CARTESIAN_POINT('',(81.208424655655,105.13133475719, + 118.49248143166)); +#24584 = LINE('',#24585,#24586); +#24585 = CARTESIAN_POINT('',(81.208424655655,104.02074992863, + 121.91051007515)); +#24586 = VECTOR('',#24587,1.); +#24587 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24588 = ORIENTED_EDGE('',*,*,#24589,.T.); +#24589 = EDGE_CURVE('',#24582,#16080,#24590,.T.); +#24590 = LINE('',#24591,#24592); +#24591 = CARTESIAN_POINT('',(81.208424655655,105.13133475719, + 118.49248143166)); +#24592 = VECTOR('',#24593,1.); +#24593 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24594 = PLANE('',#24595); +#24595 = AXIS2_PLACEMENT_3D('',#24596,#24597,#24598); +#24596 = CARTESIAN_POINT('',(81.208424655655,104.02074992863, + 121.91051007515)); +#24597 = DIRECTION('',(-1.,0.,0.)); +#24598 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#24599 = ADVANCED_FACE('',(#24600),#24618,.T.); +#24600 = FACE_BOUND('',#24601,.T.); +#24601 = EDGE_LOOP('',(#24602,#24603,#24604,#24612)); +#24602 = ORIENTED_EDGE('',*,*,#16087,.T.); +#24603 = ORIENTED_EDGE('',*,*,#24589,.F.); +#24604 = ORIENTED_EDGE('',*,*,#24605,.T.); +#24605 = EDGE_CURVE('',#24582,#24606,#24608,.T.); +#24606 = VERTEX_POINT('',#24607); +#24607 = CARTESIAN_POINT('',(82.757340655655,105.13133475719, + 118.49248143166)); +#24608 = LINE('',#24609,#24610); +#24609 = CARTESIAN_POINT('',(81.208424655655,105.13133475719, + 118.49248143166)); +#24610 = VECTOR('',#24611,1.); +#24611 = DIRECTION('',(1.,0.,0.)); +#24612 = ORIENTED_EDGE('',*,*,#24613,.T.); +#24613 = EDGE_CURVE('',#24606,#16088,#24614,.T.); +#24614 = LINE('',#24615,#24616); +#24615 = CARTESIAN_POINT('',(82.757340655655,105.13133475719, + 118.49248143166)); +#24616 = VECTOR('',#24617,1.); +#24617 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24618 = PLANE('',#24619); +#24619 = AXIS2_PLACEMENT_3D('',#24620,#24621,#24622); +#24620 = CARTESIAN_POINT('',(81.208424655655,105.13133475719, + 118.49248143166)); +#24621 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24622 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24623 = ADVANCED_FACE('',(#24624),#24642,.T.); +#24624 = FACE_BOUND('',#24625,.T.); +#24625 = EDGE_LOOP('',(#24626,#24627,#24628,#24636)); +#24626 = ORIENTED_EDGE('',*,*,#16095,.T.); +#24627 = ORIENTED_EDGE('',*,*,#24613,.F.); +#24628 = ORIENTED_EDGE('',*,*,#24629,.T.); +#24629 = EDGE_CURVE('',#24606,#24630,#24632,.T.); +#24630 = VERTEX_POINT('',#24631); +#24631 = CARTESIAN_POINT('',(82.757340655655,103.99179318216, + 121.99962977707)); +#24632 = LINE('',#24633,#24634); +#24633 = CARTESIAN_POINT('',(82.757340655655,105.13133475719, + 118.49248143166)); +#24634 = VECTOR('',#24635,1.); +#24635 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24636 = ORIENTED_EDGE('',*,*,#24637,.T.); +#24637 = EDGE_CURVE('',#24630,#16096,#24638,.T.); +#24638 = LINE('',#24639,#24640); +#24639 = CARTESIAN_POINT('',(82.757340655655,103.99179318216, + 121.99962977707)); +#24640 = VECTOR('',#24641,1.); +#24641 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24642 = PLANE('',#24643); +#24643 = AXIS2_PLACEMENT_3D('',#24644,#24645,#24646); +#24644 = CARTESIAN_POINT('',(82.757340655655,105.13133475719, + 118.49248143166)); +#24645 = DIRECTION('',(1.,0.,0.)); +#24646 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#24647 = ADVANCED_FACE('',(#24648),#24666,.T.); +#24648 = FACE_BOUND('',#24649,.T.); +#24649 = EDGE_LOOP('',(#24650,#24651,#24652,#24660)); +#24650 = ORIENTED_EDGE('',*,*,#16103,.T.); +#24651 = ORIENTED_EDGE('',*,*,#24637,.F.); +#24652 = ORIENTED_EDGE('',*,*,#24653,.T.); +#24653 = EDGE_CURVE('',#24630,#24654,#24656,.T.); +#24654 = VERTEX_POINT('',#24655); +#24655 = CARTESIAN_POINT('',(82.873096655655,103.82316137226, + 122.51862512224)); +#24656 = LINE('',#24657,#24658); +#24657 = CARTESIAN_POINT('',(82.757340655655,103.99179318216, + 121.99962977707)); +#24658 = VECTOR('',#24659,1.); +#24659 = DIRECTION('',(0.207505248005,-0.302290900986,0.930355729402)); +#24660 = ORIENTED_EDGE('',*,*,#24661,.T.); +#24661 = EDGE_CURVE('',#24654,#16104,#24662,.T.); +#24662 = LINE('',#24663,#24664); +#24663 = CARTESIAN_POINT('',(82.873096655655,103.82316137226, + 122.51862512224)); +#24664 = VECTOR('',#24665,1.); +#24665 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24666 = PLANE('',#24667); +#24667 = AXIS2_PLACEMENT_3D('',#24668,#24669,#24670); +#24668 = CARTESIAN_POINT('',(82.757340655655,103.99179318216, + 121.99962977707)); +#24669 = DIRECTION('',(0.97823390457,6.412264805558E-02,-0.197349218281) + ); +#24670 = DIRECTION('',(-0.207505248005,0.302290900986,-0.930355729402)); +#24671 = ADVANCED_FACE('',(#24672),#24690,.T.); +#24672 = FACE_BOUND('',#24673,.T.); +#24673 = EDGE_LOOP('',(#24674,#24675,#24676,#24684)); +#24674 = ORIENTED_EDGE('',*,*,#16111,.T.); +#24675 = ORIENTED_EDGE('',*,*,#24661,.F.); +#24676 = ORIENTED_EDGE('',*,*,#24677,.T.); +#24677 = EDGE_CURVE('',#24654,#24678,#24680,.T.); +#24678 = VERTEX_POINT('',#24679); +#24679 = CARTESIAN_POINT('',(83.203825655655,103.71755357836, + 122.84365249091)); +#24680 = LINE('',#24681,#24682); +#24681 = CARTESIAN_POINT('',(82.873096655655,103.82316137226, + 122.51862512224)); +#24682 = VECTOR('',#24683,1.); +#24683 = DIRECTION('',(0.695420691969,-0.222060493964,0.68343192653)); +#24684 = ORIENTED_EDGE('',*,*,#24685,.T.); +#24685 = EDGE_CURVE('',#24678,#16112,#24686,.T.); +#24686 = LINE('',#24687,#24688); +#24687 = CARTESIAN_POINT('',(83.203825655655,103.71755357836, + 122.84365249091)); +#24688 = VECTOR('',#24689,1.); +#24689 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24690 = PLANE('',#24691); +#24691 = AXIS2_PLACEMENT_3D('',#24692,#24693,#24694); +#24692 = CARTESIAN_POINT('',(82.873096655655,103.82316137226, + 122.51862512224)); +#24693 = DIRECTION('',(0.718602853585,0.214896812059,-0.661384380664)); +#24694 = DIRECTION('',(-0.695420691969,0.222060493964,-0.68343192653)); +#24695 = ADVANCED_FACE('',(#24696),#24714,.T.); +#24696 = FACE_BOUND('',#24697,.T.); +#24697 = EDGE_LOOP('',(#24698,#24699,#24700,#24708)); +#24698 = ORIENTED_EDGE('',*,*,#16119,.T.); +#24699 = ORIENTED_EDGE('',*,*,#24685,.F.); +#24700 = ORIENTED_EDGE('',*,*,#24701,.T.); +#24701 = EDGE_CURVE('',#24678,#24702,#24704,.T.); +#24702 = VERTEX_POINT('',#24703); +#24703 = CARTESIAN_POINT('',(83.710944655655,103.68008001451, + 122.95898426147)); +#24704 = LINE('',#24705,#24706); +#24705 = CARTESIAN_POINT('',(83.203825655655,103.71755357836, + 122.84365249091)); +#24706 = VECTOR('',#24707,1.); +#24707 = DIRECTION('',(0.972579146281,-7.186874627855E-02,0.221189257259 + )); +#24708 = ORIENTED_EDGE('',*,*,#24709,.T.); +#24709 = EDGE_CURVE('',#24702,#16120,#24710,.T.); +#24710 = LINE('',#24711,#24712); +#24711 = CARTESIAN_POINT('',(83.710944655655,103.68008001451, + 122.95898426147)); +#24712 = VECTOR('',#24713,1.); +#24713 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24714 = PLANE('',#24715); +#24715 = AXIS2_PLACEMENT_3D('',#24716,#24717,#24718); +#24716 = CARTESIAN_POINT('',(83.203825655655,103.71755357836, + 122.84365249091)); +#24717 = DIRECTION('',(0.232572148415,0.300543484576,-0.924977734684)); +#24718 = DIRECTION('',(-0.972579146281,7.186874627855E-02, + -0.221189257259)); +#24719 = ADVANCED_FACE('',(#24720),#24738,.T.); +#24720 = FACE_BOUND('',#24721,.T.); +#24721 = EDGE_LOOP('',(#24722,#24723,#24724,#24732)); +#24722 = ORIENTED_EDGE('',*,*,#16127,.T.); +#24723 = ORIENTED_EDGE('',*,*,#24709,.F.); +#24724 = ORIENTED_EDGE('',*,*,#24725,.T.); +#24725 = EDGE_CURVE('',#24702,#24726,#24728,.T.); +#24726 = VERTEX_POINT('',#24727); +#24727 = CARTESIAN_POINT('',(84.245623655655,103.72436709407, + 122.82268264578)); +#24728 = LINE('',#24729,#24730); +#24729 = CARTESIAN_POINT('',(83.710944655655,103.68008001451, + 122.95898426147)); +#24730 = VECTOR('',#24731,1.); +#24731 = DIRECTION('',(0.96590360547,8.000510554625E-02,-0.24623039623) + ); +#24732 = ORIENTED_EDGE('',*,*,#24733,.T.); +#24733 = EDGE_CURVE('',#24726,#16128,#24734,.T.); +#24734 = LINE('',#24735,#24736); +#24735 = CARTESIAN_POINT('',(84.245623655655,103.72436709407, + 122.82268264578)); +#24736 = VECTOR('',#24737,1.); +#24737 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24738 = PLANE('',#24739); +#24739 = AXIS2_PLACEMENT_3D('',#24740,#24741,#24742); +#24740 = CARTESIAN_POINT('',(83.710944655655,103.68008001451, + 122.95898426147)); +#24741 = DIRECTION('',(-0.258901960095,0.298480629018,-0.918628918095)); +#24742 = DIRECTION('',(-0.96590360547,-8.000510554625E-02,0.24623039623) + ); +#24743 = ADVANCED_FACE('',(#24744),#24762,.T.); +#24744 = FACE_BOUND('',#24745,.T.); +#24745 = EDGE_LOOP('',(#24746,#24747,#24748,#24756)); +#24746 = ORIENTED_EDGE('',*,*,#16135,.T.); +#24747 = ORIENTED_EDGE('',*,*,#24733,.F.); +#24748 = ORIENTED_EDGE('',*,*,#24749,.T.); +#24749 = EDGE_CURVE('',#24726,#24750,#24752,.T.); +#24750 = VERTEX_POINT('',#24751); +#24751 = CARTESIAN_POINT('',(84.609426655655,103.84700821371, + 122.44523209088)); +#24752 = LINE('',#24753,#24754); +#24753 = CARTESIAN_POINT('',(84.245623655655,103.72436709407, + 122.82268264578)); +#24754 = VECTOR('',#24755,1.); +#24755 = DIRECTION('',(0.675725553709,0.22779289472,-0.701074441967)); +#24756 = ORIENTED_EDGE('',*,*,#24757,.T.); +#24757 = EDGE_CURVE('',#24750,#16136,#24758,.T.); +#24758 = LINE('',#24759,#24760); +#24759 = CARTESIAN_POINT('',(84.609426655655,103.84700821371, + 122.44523209088)); +#24760 = VECTOR('',#24761,1.); +#24761 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24762 = PLANE('',#24763); +#24763 = AXIS2_PLACEMENT_3D('',#24764,#24765,#24766); +#24764 = CARTESIAN_POINT('',(84.245623655655,103.72436709407, + 122.82268264578)); +#24765 = DIRECTION('',(-0.737153292107,0.20881067963,-0.642653191082)); +#24766 = DIRECTION('',(-0.675725553709,-0.22779289472,0.701074441967)); +#24767 = ADVANCED_FACE('',(#24768),#24786,.T.); +#24768 = FACE_BOUND('',#24769,.T.); +#24769 = EDGE_LOOP('',(#24770,#24771,#24772,#24780)); +#24770 = ORIENTED_EDGE('',*,*,#16143,.T.); +#24771 = ORIENTED_EDGE('',*,*,#24757,.F.); +#24772 = ORIENTED_EDGE('',*,*,#24773,.T.); +#24773 = EDGE_CURVE('',#24750,#24774,#24776,.T.); +#24774 = VERTEX_POINT('',#24775); +#24775 = CARTESIAN_POINT('',(84.736205655655,104.02926674601, + 121.88429800651)); +#24776 = LINE('',#24777,#24778); +#24777 = CARTESIAN_POINT('',(84.609426655655,103.84700821371, + 122.44523209088)); +#24778 = VECTOR('',#24779,1.); +#24779 = DIRECTION('',(0.210152005839,0.302116250672,-0.929818211008)); +#24780 = ORIENTED_EDGE('',*,*,#24781,.T.); +#24781 = EDGE_CURVE('',#24774,#16144,#24782,.T.); +#24782 = LINE('',#24783,#24784); +#24783 = CARTESIAN_POINT('',(84.736205655655,104.02926674601, + 121.88429800651)); +#24784 = VECTOR('',#24785,1.); +#24785 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24786 = PLANE('',#24787); +#24787 = AXIS2_PLACEMENT_3D('',#24788,#24789,#24790); +#24788 = CARTESIAN_POINT('',(84.609426655655,103.84700821371, + 122.44523209088)); +#24789 = DIRECTION('',(-0.977668724283,6.494054120627E-02, + -0.199866434566)); +#24790 = DIRECTION('',(-0.210152005839,-0.302116250672,0.929818211008)); +#24791 = ADVANCED_FACE('',(#24792),#24810,.T.); +#24792 = FACE_BOUND('',#24793,.T.); +#24793 = EDGE_LOOP('',(#24794,#24795,#24796,#24804)); +#24794 = ORIENTED_EDGE('',*,*,#16151,.T.); +#24795 = ORIENTED_EDGE('',*,*,#24781,.F.); +#24796 = ORIENTED_EDGE('',*,*,#24797,.T.); +#24797 = EDGE_CURVE('',#24774,#24798,#24800,.T.); +#24798 = VERTEX_POINT('',#24799); +#24799 = CARTESIAN_POINT('',(84.736205655655,105.13133475719, + 118.49248143166)); +#24800 = LINE('',#24801,#24802); +#24801 = CARTESIAN_POINT('',(84.736205655655,104.02926674601, + 121.88429800651)); +#24802 = VECTOR('',#24803,1.); +#24803 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24804 = ORIENTED_EDGE('',*,*,#24805,.T.); +#24805 = EDGE_CURVE('',#24798,#16152,#24806,.T.); +#24806 = LINE('',#24807,#24808); +#24807 = CARTESIAN_POINT('',(84.736205655655,105.13133475719, + 118.49248143166)); +#24808 = VECTOR('',#24809,1.); +#24809 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24810 = PLANE('',#24811); +#24811 = AXIS2_PLACEMENT_3D('',#24812,#24813,#24814); +#24812 = CARTESIAN_POINT('',(84.736205655655,104.02926674601, + 121.88429800651)); +#24813 = DIRECTION('',(-1.,0.,0.)); +#24814 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#24815 = ADVANCED_FACE('',(#24816),#24827,.T.); +#24816 = FACE_BOUND('',#24817,.T.); +#24817 = EDGE_LOOP('',(#24818,#24819,#24820,#24826)); +#24818 = ORIENTED_EDGE('',*,*,#16159,.T.); +#24819 = ORIENTED_EDGE('',*,*,#24805,.F.); +#24820 = ORIENTED_EDGE('',*,*,#24821,.T.); +#24821 = EDGE_CURVE('',#24798,#23926,#24822,.T.); +#24822 = LINE('',#24823,#24824); +#24823 = CARTESIAN_POINT('',(84.736205655655,105.13133475719, + 118.49248143166)); +#24824 = VECTOR('',#24825,1.); +#24825 = DIRECTION('',(1.,0.,0.)); +#24826 = ORIENTED_EDGE('',*,*,#23925,.T.); +#24827 = PLANE('',#24828); +#24828 = AXIS2_PLACEMENT_3D('',#24829,#24830,#24831); +#24829 = CARTESIAN_POINT('',(84.736205655655,105.13133475719, + 118.49248143166)); +#24830 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24831 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24832 = ADVANCED_FACE('',(#24833),#24873,.F.); +#24833 = FACE_BOUND('',#24834,.T.); +#24834 = EDGE_LOOP('',(#24835,#24836,#24837,#24838,#24839,#24840,#24841, + #24842,#24843,#24844,#24845,#24846,#24847,#24848,#24849,#24850, + #24851,#24852,#24853,#24854,#24855,#24856,#24857,#24858,#24859, + #24860,#24861,#24862,#24863,#24864,#24865,#24866,#24867,#24868, + #24869,#24870,#24871,#24872)); +#24835 = ORIENTED_EDGE('',*,*,#23933,.F.); +#24836 = ORIENTED_EDGE('',*,*,#24821,.F.); +#24837 = ORIENTED_EDGE('',*,*,#24797,.F.); +#24838 = ORIENTED_EDGE('',*,*,#24773,.F.); +#24839 = ORIENTED_EDGE('',*,*,#24749,.F.); +#24840 = ORIENTED_EDGE('',*,*,#24725,.F.); +#24841 = ORIENTED_EDGE('',*,*,#24701,.F.); +#24842 = ORIENTED_EDGE('',*,*,#24677,.F.); +#24843 = ORIENTED_EDGE('',*,*,#24653,.F.); +#24844 = ORIENTED_EDGE('',*,*,#24629,.F.); +#24845 = ORIENTED_EDGE('',*,*,#24605,.F.); +#24846 = ORIENTED_EDGE('',*,*,#24581,.F.); +#24847 = ORIENTED_EDGE('',*,*,#24557,.F.); +#24848 = ORIENTED_EDGE('',*,*,#24533,.F.); +#24849 = ORIENTED_EDGE('',*,*,#24509,.F.); +#24850 = ORIENTED_EDGE('',*,*,#24485,.F.); +#24851 = ORIENTED_EDGE('',*,*,#24461,.F.); +#24852 = ORIENTED_EDGE('',*,*,#24437,.F.); +#24853 = ORIENTED_EDGE('',*,*,#24413,.F.); +#24854 = ORIENTED_EDGE('',*,*,#24389,.F.); +#24855 = ORIENTED_EDGE('',*,*,#24365,.F.); +#24856 = ORIENTED_EDGE('',*,*,#24341,.F.); +#24857 = ORIENTED_EDGE('',*,*,#24317,.F.); +#24858 = ORIENTED_EDGE('',*,*,#24293,.F.); +#24859 = ORIENTED_EDGE('',*,*,#24269,.F.); +#24860 = ORIENTED_EDGE('',*,*,#24245,.F.); +#24861 = ORIENTED_EDGE('',*,*,#24221,.F.); +#24862 = ORIENTED_EDGE('',*,*,#24197,.F.); +#24863 = ORIENTED_EDGE('',*,*,#24173,.F.); +#24864 = ORIENTED_EDGE('',*,*,#24149,.F.); +#24865 = ORIENTED_EDGE('',*,*,#24125,.F.); +#24866 = ORIENTED_EDGE('',*,*,#24101,.F.); +#24867 = ORIENTED_EDGE('',*,*,#24077,.F.); +#24868 = ORIENTED_EDGE('',*,*,#24053,.F.); +#24869 = ORIENTED_EDGE('',*,*,#24029,.F.); +#24870 = ORIENTED_EDGE('',*,*,#24005,.F.); +#24871 = ORIENTED_EDGE('',*,*,#23981,.F.); +#24872 = ORIENTED_EDGE('',*,*,#23957,.F.); +#24873 = PLANE('',#24874); +#24874 = AXIS2_PLACEMENT_3D('',#24875,#24876,#24877); +#24875 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#24876 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24877 = DIRECTION('',(1.,0.,0.)); +#24878 = ADVANCED_FACE('',(#24879),#24904,.T.); +#24879 = FACE_BOUND('',#24880,.T.); +#24880 = EDGE_LOOP('',(#24881,#24882,#24890,#24898)); +#24881 = ORIENTED_EDGE('',*,*,#15715,.T.); +#24882 = ORIENTED_EDGE('',*,*,#24883,.F.); +#24883 = EDGE_CURVE('',#24884,#15718,#24886,.T.); +#24884 = VERTEX_POINT('',#24885); +#24885 = CARTESIAN_POINT('',(90.452305655655,105.13133475719, + 118.49248143166)); +#24886 = LINE('',#24887,#24888); +#24887 = CARTESIAN_POINT('',(90.452305655655,105.13133475719, + 118.49248143166)); +#24888 = VECTOR('',#24889,1.); +#24889 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24890 = ORIENTED_EDGE('',*,*,#24891,.T.); +#24891 = EDGE_CURVE('',#24884,#24892,#24894,.T.); +#24892 = VERTEX_POINT('',#24893); +#24893 = CARTESIAN_POINT('',(90.452305655655,103.30534283085, + 124.11230672237)); +#24894 = LINE('',#24895,#24896); +#24895 = CARTESIAN_POINT('',(90.452305655655,105.13133475719, + 118.49248143166)); +#24896 = VECTOR('',#24897,1.); +#24897 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24898 = ORIENTED_EDGE('',*,*,#24899,.T.); +#24899 = EDGE_CURVE('',#24892,#15716,#24900,.T.); +#24900 = LINE('',#24901,#24902); +#24901 = CARTESIAN_POINT('',(90.452305655655,103.30534283085, + 124.11230672237)); +#24902 = VECTOR('',#24903,1.); +#24903 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24904 = PLANE('',#24905); +#24905 = AXIS2_PLACEMENT_3D('',#24906,#24907,#24908); +#24906 = CARTESIAN_POINT('',(90.452305655655,105.13133475719, + 118.49248143166)); +#24907 = DIRECTION('',(1.,0.,0.)); +#24908 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#24909 = ADVANCED_FACE('',(#24910),#24928,.T.); +#24910 = FACE_BOUND('',#24911,.T.); +#24911 = EDGE_LOOP('',(#24912,#24913,#24914,#24922)); +#24912 = ORIENTED_EDGE('',*,*,#15725,.T.); +#24913 = ORIENTED_EDGE('',*,*,#24899,.F.); +#24914 = ORIENTED_EDGE('',*,*,#24915,.T.); +#24915 = EDGE_CURVE('',#24892,#24916,#24918,.T.); +#24916 = VERTEX_POINT('',#24917); +#24917 = CARTESIAN_POINT('',(88.842755655655,103.30534283085, + 124.11230672237)); +#24918 = LINE('',#24919,#24920); +#24919 = CARTESIAN_POINT('',(90.452305655655,103.30534283085, + 124.11230672237)); +#24920 = VECTOR('',#24921,1.); +#24921 = DIRECTION('',(-1.,0.,0.)); +#24922 = ORIENTED_EDGE('',*,*,#24923,.T.); +#24923 = EDGE_CURVE('',#24916,#15726,#24924,.T.); +#24924 = LINE('',#24925,#24926); +#24925 = CARTESIAN_POINT('',(88.842755655655,103.30534283085, + 124.11230672237)); +#24926 = VECTOR('',#24927,1.); +#24927 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24928 = PLANE('',#24929); +#24929 = AXIS2_PLACEMENT_3D('',#24930,#24931,#24932); +#24930 = CARTESIAN_POINT('',(90.452305655655,103.30534283085, + 124.11230672237)); +#24931 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24932 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#24933 = ADVANCED_FACE('',(#24934),#24952,.T.); +#24934 = FACE_BOUND('',#24935,.T.); +#24935 = EDGE_LOOP('',(#24936,#24937,#24938,#24946)); +#24936 = ORIENTED_EDGE('',*,*,#15733,.T.); +#24937 = ORIENTED_EDGE('',*,*,#24923,.F.); +#24938 = ORIENTED_EDGE('',*,*,#24939,.T.); +#24939 = EDGE_CURVE('',#24916,#24940,#24942,.T.); +#24940 = VERTEX_POINT('',#24941); +#24941 = CARTESIAN_POINT('',(88.842755655655,103.62386951421, + 123.13198239284)); +#24942 = LINE('',#24943,#24944); +#24943 = CARTESIAN_POINT('',(88.842755655655,103.30534283085, + 124.11230672237)); +#24944 = VECTOR('',#24945,1.); +#24945 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#24946 = ORIENTED_EDGE('',*,*,#24947,.T.); +#24947 = EDGE_CURVE('',#24940,#15734,#24948,.T.); +#24948 = LINE('',#24949,#24950); +#24949 = CARTESIAN_POINT('',(88.842755655655,103.62386951421, + 123.13198239284)); +#24950 = VECTOR('',#24951,1.); +#24951 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24952 = PLANE('',#24953); +#24953 = AXIS2_PLACEMENT_3D('',#24954,#24955,#24956); +#24954 = CARTESIAN_POINT('',(88.842755655655,103.30534283085, + 124.11230672237)); +#24955 = DIRECTION('',(-1.,0.,0.)); +#24956 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#24957 = ADVANCED_FACE('',(#24958),#24976,.T.); +#24958 = FACE_BOUND('',#24959,.T.); +#24959 = EDGE_LOOP('',(#24960,#24961,#24962,#24970)); +#24960 = ORIENTED_EDGE('',*,*,#15741,.T.); +#24961 = ORIENTED_EDGE('',*,*,#24947,.F.); +#24962 = ORIENTED_EDGE('',*,*,#24963,.T.); +#24963 = EDGE_CURVE('',#24940,#24964,#24966,.T.); +#24964 = VERTEX_POINT('',#24965); +#24965 = CARTESIAN_POINT('',(88.809685655655,103.62386951421, + 123.13198239284)); +#24966 = LINE('',#24967,#24968); +#24967 = CARTESIAN_POINT('',(88.842755655655,103.62386951421, + 123.13198239284)); +#24968 = VECTOR('',#24969,1.); +#24969 = DIRECTION('',(-1.,0.,0.)); +#24970 = ORIENTED_EDGE('',*,*,#24971,.T.); +#24971 = EDGE_CURVE('',#24964,#15742,#24972,.T.); +#24972 = LINE('',#24973,#24974); +#24973 = CARTESIAN_POINT('',(88.809685655655,103.62386951421, + 123.13198239284)); +#24974 = VECTOR('',#24975,1.); +#24975 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#24976 = PLANE('',#24977); +#24977 = AXIS2_PLACEMENT_3D('',#24978,#24979,#24980); +#24978 = CARTESIAN_POINT('',(88.842755655655,103.62386951421, + 123.13198239284)); +#24979 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#24980 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#24981 = ADVANCED_FACE('',(#24982),#25000,.T.); +#24982 = FACE_BOUND('',#24983,.T.); +#24983 = EDGE_LOOP('',(#24984,#24985,#24986,#24994)); +#24984 = ORIENTED_EDGE('',*,*,#15749,.T.); +#24985 = ORIENTED_EDGE('',*,*,#24971,.F.); +#24986 = ORIENTED_EDGE('',*,*,#24987,.T.); +#24987 = EDGE_CURVE('',#24964,#24988,#24990,.T.); +#24988 = VERTEX_POINT('',#24989); +#24989 = CARTESIAN_POINT('',(88.623649655655,103.47397464075, + 123.5933113772)); +#24990 = LINE('',#24991,#24992); +#24991 = CARTESIAN_POINT('',(88.809685655655,103.62386951421, + 123.13198239284)); +#24992 = VECTOR('',#24993,1.); +#24993 = DIRECTION('',(-0.358091243978,-0.288525025822,0.887988722035)); +#24994 = ORIENTED_EDGE('',*,*,#24995,.T.); +#24995 = EDGE_CURVE('',#24988,#15750,#24996,.T.); +#24996 = LINE('',#24997,#24998); +#24997 = CARTESIAN_POINT('',(88.623649655655,103.47397464075, + 123.5933113772)); +#24998 = VECTOR('',#24999,1.); +#24999 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25000 = PLANE('',#25001); +#25001 = AXIS2_PLACEMENT_3D('',#25002,#25003,#25004); +#25002 = CARTESIAN_POINT('',(88.809685655655,103.62386951421, + 123.13198239284)); +#25003 = DIRECTION('',(0.933686596769,-0.110656279926,0.340565011014)); +#25004 = DIRECTION('',(0.358091243978,0.288525025822,-0.887988722035)); +#25005 = ADVANCED_FACE('',(#25006),#25024,.T.); +#25006 = FACE_BOUND('',#25007,.T.); +#25007 = EDGE_LOOP('',(#25008,#25009,#25010,#25018)); +#25008 = ORIENTED_EDGE('',*,*,#15757,.T.); +#25009 = ORIENTED_EDGE('',*,*,#24995,.F.); +#25010 = ORIENTED_EDGE('',*,*,#25011,.T.); +#25011 = EDGE_CURVE('',#24988,#25012,#25014,.T.); +#25012 = VERTEX_POINT('',#25013); +#25013 = CARTESIAN_POINT('',(88.330127655655,103.36155333115, + 123.939308591)); +#25014 = LINE('',#25015,#25016); +#25015 = CARTESIAN_POINT('',(88.623649655655,103.47397464075, + 123.5933113772)); +#25016 = VECTOR('',#25017,1.); +#25017 = DIRECTION('',(-0.62792416733,-0.240500055272,0.740183060801)); +#25018 = ORIENTED_EDGE('',*,*,#25019,.T.); +#25019 = EDGE_CURVE('',#25012,#15758,#25020,.T.); +#25020 = LINE('',#25021,#25022); +#25021 = CARTESIAN_POINT('',(88.330127655655,103.36155333115, + 123.939308591)); +#25022 = VECTOR('',#25023,1.); +#25023 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25024 = PLANE('',#25025); +#25025 = AXIS2_PLACEMENT_3D('',#25026,#25027,#25028); +#25026 = CARTESIAN_POINT('',(88.623649655655,103.47397464075, + 123.5933113772)); +#25027 = DIRECTION('',(0.778274527453,-0.194039238884,0.597191371078)); +#25028 = DIRECTION('',(0.62792416733,0.240500055272,-0.740183060801)); +#25029 = ADVANCED_FACE('',(#25030),#25048,.T.); +#25030 = FACE_BOUND('',#25031,.T.); +#25031 = EDGE_LOOP('',(#25032,#25033,#25034,#25042)); +#25032 = ORIENTED_EDGE('',*,*,#15765,.T.); +#25033 = ORIENTED_EDGE('',*,*,#25019,.F.); +#25034 = ORIENTED_EDGE('',*,*,#25035,.T.); +#25035 = EDGE_CURVE('',#25012,#25036,#25038,.T.); +#25036 = VERTEX_POINT('',#25037); +#25037 = CARTESIAN_POINT('',(87.940142655655,103.29128997402, + 124.1555569685)); +#25038 = LINE('',#25039,#25040); +#25039 = CARTESIAN_POINT('',(88.330127655655,103.36155333115, + 123.939308591)); +#25040 = VECTOR('',#25041,1.); +#25041 = DIRECTION('',(-0.863889031207,-0.155646354399,0.479030222556)); +#25042 = ORIENTED_EDGE('',*,*,#25043,.T.); +#25043 = EDGE_CURVE('',#25036,#15766,#25044,.T.); +#25044 = LINE('',#25045,#25046); +#25045 = CARTESIAN_POINT('',(87.940142655655,103.29128997402, + 124.1555569685)); +#25046 = VECTOR('',#25047,1.); +#25047 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25048 = PLANE('',#25049); +#25049 = AXIS2_PLACEMENT_3D('',#25050,#25051,#25052); +#25050 = CARTESIAN_POINT('',(88.330127655655,103.36155333115, + 123.939308591)); +#25051 = DIRECTION('',(0.503682183286,-0.266956391897,0.821607292486)); +#25052 = DIRECTION('',(0.863889031207,0.155646354399,-0.479030222556)); +#25053 = ADVANCED_FACE('',(#25054),#25072,.T.); +#25054 = FACE_BOUND('',#25055,.T.); +#25055 = EDGE_LOOP('',(#25056,#25057,#25058,#25066)); +#25056 = ORIENTED_EDGE('',*,*,#15773,.T.); +#25057 = ORIENTED_EDGE('',*,*,#25043,.F.); +#25058 = ORIENTED_EDGE('',*,*,#25059,.T.); +#25059 = EDGE_CURVE('',#25036,#25060,#25062,.T.); +#25060 = VERTEX_POINT('',#25061); +#25061 = CARTESIAN_POINT('',(87.464719655655,103.26786895798, + 124.22763944399)); +#25062 = LINE('',#25063,#25064); +#25063 = CARTESIAN_POINT('',(87.940142655655,103.29128997402, + 124.1555569685)); +#25064 = VECTOR('',#25065,1.); +#25065 = DIRECTION('',(-0.987529808161,-4.864920602204E-02, + 0.149726860471)); +#25066 = ORIENTED_EDGE('',*,*,#25067,.T.); +#25067 = EDGE_CURVE('',#25060,#15774,#25068,.T.); +#25068 = LINE('',#25069,#25070); +#25069 = CARTESIAN_POINT('',(87.464719655655,103.26786895798, + 124.22763944399)); +#25070 = VECTOR('',#25071,1.); +#25071 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25072 = PLANE('',#25073); +#25073 = AXIS2_PLACEMENT_3D('',#25074,#25075,#25076); +#25074 = CARTESIAN_POINT('',(87.940142655655,103.29128997402, + 124.1555569685)); +#25075 = DIRECTION('',(0.157432137739,-0.305163493174,0.939196659087)); +#25076 = DIRECTION('',(0.987529808161,4.864920602204E-02,-0.149726860471 + )); +#25077 = ADVANCED_FACE('',(#25078),#25096,.T.); +#25078 = FACE_BOUND('',#25079,.T.); +#25079 = EDGE_LOOP('',(#25080,#25081,#25082,#25090)); +#25080 = ORIENTED_EDGE('',*,*,#15781,.T.); +#25081 = ORIENTED_EDGE('',*,*,#25067,.F.); +#25082 = ORIENTED_EDGE('',*,*,#25083,.T.); +#25083 = EDGE_CURVE('',#25060,#25084,#25086,.T.); +#25084 = VERTEX_POINT('',#25085); +#25085 = CARTESIAN_POINT('',(87.211159655655,103.27298009907, + 124.21190896921)); +#25086 = LINE('',#25087,#25088); +#25087 = CARTESIAN_POINT('',(87.464719655655,103.26786895798, + 124.22763944399)); +#25088 = VECTOR('',#25089,1.); +#25089 = DIRECTION('',(-0.997879216918,2.011477151526E-02, + -6.190690114657E-02)); +#25090 = ORIENTED_EDGE('',*,*,#25091,.T.); +#25091 = EDGE_CURVE('',#25084,#15782,#25092,.T.); +#25092 = LINE('',#25093,#25094); +#25093 = CARTESIAN_POINT('',(87.211159655655,103.27298009907, + 124.21190896921)); +#25094 = VECTOR('',#25095,1.); +#25095 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25096 = PLANE('',#25097); +#25097 = AXIS2_PLACEMENT_3D('',#25098,#25099,#25100); +#25098 = CARTESIAN_POINT('',(87.464719655655,103.26786895798, + 124.22763944399)); +#25099 = DIRECTION('',(-6.509276797527E-02,-0.308361636361, + 0.949039531726)); +#25100 = DIRECTION('',(0.997879216918,-2.011477151526E-02, + 6.190690114657E-02)); +#25101 = ADVANCED_FACE('',(#25102),#25120,.T.); +#25102 = FACE_BOUND('',#25103,.T.); +#25103 = EDGE_LOOP('',(#25104,#25105,#25106,#25114)); +#25104 = ORIENTED_EDGE('',*,*,#15789,.T.); +#25105 = ORIENTED_EDGE('',*,*,#25091,.F.); +#25106 = ORIENTED_EDGE('',*,*,#25107,.T.); +#25107 = EDGE_CURVE('',#25084,#25108,#25110,.T.); +#25108 = VERTEX_POINT('',#25109); +#25109 = CARTESIAN_POINT('',(87.001697655655,103.28660774852, + 124.16996737684)); +#25110 = LINE('',#25111,#25112); +#25111 = CARTESIAN_POINT('',(87.211159655655,103.27298009907, + 124.21190896921)); +#25112 = VECTOR('',#25113,1.); +#25113 = DIRECTION('',(-0.978547207411,6.366452299116E-02, + -0.195939254312)); +#25114 = ORIENTED_EDGE('',*,*,#25115,.T.); +#25115 = EDGE_CURVE('',#25108,#15790,#25116,.T.); +#25116 = LINE('',#25117,#25118); +#25117 = CARTESIAN_POINT('',(87.001697655655,103.28660774852, + 124.16996737684)); +#25118 = VECTOR('',#25119,1.); +#25119 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25120 = PLANE('',#25121); +#25121 = AXIS2_PLACEMENT_3D('',#25122,#25123,#25124); +#25122 = CARTESIAN_POINT('',(87.211159655655,103.27298009907, + 124.21190896921)); +#25123 = DIRECTION('',(-0.206022724154,-0.302387716888,0.930653698111)); +#25124 = DIRECTION('',(0.978547207411,-6.366452299116E-02,0.195939254312 + )); +#25125 = ADVANCED_FACE('',(#25126),#25144,.T.); +#25126 = FACE_BOUND('',#25127,.T.); +#25127 = EDGE_LOOP('',(#25128,#25129,#25130,#25138)); +#25128 = ORIENTED_EDGE('',*,*,#15797,.T.); +#25129 = ORIENTED_EDGE('',*,*,#25115,.F.); +#25130 = ORIENTED_EDGE('',*,*,#25131,.T.); +#25131 = EDGE_CURVE('',#25108,#25132,#25134,.T.); +#25132 = VERTEX_POINT('',#25133); +#25133 = CARTESIAN_POINT('',(87.001697655655,103.72436709407, + 122.82268264578)); +#25134 = LINE('',#25135,#25136); +#25135 = CARTESIAN_POINT('',(87.001697655655,103.28660774852, + 124.16996737684)); +#25136 = VECTOR('',#25137,1.); +#25137 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25138 = ORIENTED_EDGE('',*,*,#25139,.T.); +#25139 = EDGE_CURVE('',#25132,#15798,#25140,.T.); +#25140 = LINE('',#25141,#25142); +#25141 = CARTESIAN_POINT('',(87.001697655655,103.72436709407, + 122.82268264578)); +#25142 = VECTOR('',#25143,1.); +#25143 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25144 = PLANE('',#25145); +#25145 = AXIS2_PLACEMENT_3D('',#25146,#25147,#25148); +#25146 = CARTESIAN_POINT('',(87.001697655655,103.28660774852, + 124.16996737684)); +#25147 = DIRECTION('',(-1.,0.,0.)); +#25148 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#25149 = ADVANCED_FACE('',(#25150),#25168,.T.); +#25150 = FACE_BOUND('',#25151,.T.); +#25151 = EDGE_LOOP('',(#25152,#25153,#25154,#25162)); +#25152 = ORIENTED_EDGE('',*,*,#15805,.T.); +#25153 = ORIENTED_EDGE('',*,*,#25139,.F.); +#25154 = ORIENTED_EDGE('',*,*,#25155,.T.); +#25155 = EDGE_CURVE('',#25132,#25156,#25158,.T.); +#25156 = VERTEX_POINT('',#25157); +#25157 = CARTESIAN_POINT('',(87.255257655655,103.7056313937, + 122.88034520236)); +#25158 = LINE('',#25159,#25160); +#25159 = CARTESIAN_POINT('',(87.001697655655,103.72436709407, + 122.82268264578)); +#25160 = VECTOR('',#25161,1.); +#25161 = DIRECTION('',(0.97258228659,-7.186468806479E-02,0.221176767361) + ); +#25162 = ORIENTED_EDGE('',*,*,#25163,.T.); +#25163 = EDGE_CURVE('',#25156,#15806,#25164,.T.); +#25164 = LINE('',#25165,#25166); +#25165 = CARTESIAN_POINT('',(87.255257655655,103.7056313937, + 122.88034520236)); +#25166 = VECTOR('',#25167,1.); +#25167 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25168 = PLANE('',#25169); +#25169 = AXIS2_PLACEMENT_3D('',#25170,#25171,#25172); +#25170 = CARTESIAN_POINT('',(87.001697655655,103.72436709407, + 122.82268264578)); +#25171 = DIRECTION('',(0.232559015759,0.300544454984,-0.924980721295)); +#25172 = DIRECTION('',(-0.97258228659,7.186468806479E-02,-0.221176767361 + )); +#25173 = ADVANCED_FACE('',(#25174),#25192,.T.); +#25174 = FACE_BOUND('',#25175,.T.); +#25175 = EDGE_LOOP('',(#25176,#25177,#25178,#25186)); +#25176 = ORIENTED_EDGE('',*,*,#15813,.T.); +#25177 = ORIENTED_EDGE('',*,*,#25163,.F.); +#25178 = ORIENTED_EDGE('',*,*,#25179,.T.); +#25179 = EDGE_CURVE('',#25156,#25180,#25182,.T.); +#25180 = VERTEX_POINT('',#25181); +#25181 = CARTESIAN_POINT('',(87.585986655655,103.69711488534, + 122.90655631995)); +#25182 = LINE('',#25183,#25184); +#25183 = CARTESIAN_POINT('',(87.255257655655,103.7056313937, + 122.88034520236)); +#25184 = VECTOR('',#25185,1.); +#25185 = DIRECTION('',(0.996545945267,-2.56617710541E-02, + 7.897881030797E-02)); +#25186 = ORIENTED_EDGE('',*,*,#25187,.T.); +#25187 = EDGE_CURVE('',#25180,#15814,#25188,.T.); +#25188 = LINE('',#25189,#25190); +#25189 = CARTESIAN_POINT('',(87.585986655655,103.69711488534, + 122.90655631995)); +#25190 = VECTOR('',#25191,1.); +#25191 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25192 = PLANE('',#25193); +#25193 = AXIS2_PLACEMENT_3D('',#25194,#25195,#25196); +#25194 = CARTESIAN_POINT('',(87.255257655655,103.7056313937, + 122.88034520236)); +#25195 = DIRECTION('',(8.304323555411E-02,0.307949632763,-0.947771515034 + )); +#25196 = DIRECTION('',(-0.996545945267,2.56617710541E-02, + -7.897881030797E-02)); +#25197 = ADVANCED_FACE('',(#25198),#25216,.T.); +#25198 = FACE_BOUND('',#25199,.T.); +#25199 = EDGE_LOOP('',(#25200,#25201,#25202,#25210)); +#25200 = ORIENTED_EDGE('',*,*,#15821,.T.); +#25201 = ORIENTED_EDGE('',*,*,#25187,.F.); +#25202 = ORIENTED_EDGE('',*,*,#25203,.T.); +#25203 = EDGE_CURVE('',#25180,#25204,#25206,.T.); +#25204 = VERTEX_POINT('',#25205); +#25205 = CARTESIAN_POINT('',(88.263981655655,103.74480887727, + 122.75976930617)); +#25206 = LINE('',#25207,#25208); +#25207 = CARTESIAN_POINT('',(87.585986655655,103.69711488534, + 122.90655631995)); +#25208 = VECTOR('',#25209,1.); +#25209 = DIRECTION('',(0.975054714484,6.859084754722E-02,-0.211100922297 + )); +#25210 = ORIENTED_EDGE('',*,*,#25211,.T.); +#25211 = EDGE_CURVE('',#25204,#15822,#25212,.T.); +#25212 = LINE('',#25213,#25214); +#25213 = CARTESIAN_POINT('',(88.263981655655,103.74480887727, + 122.75976930617)); +#25214 = VECTOR('',#25215,1.); +#25215 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25216 = PLANE('',#25217); +#25217 = AXIS2_PLACEMENT_3D('',#25218,#25219,#25220); +#25218 = CARTESIAN_POINT('',(87.585986655655,103.69711488534, + 122.90655631995)); +#25219 = DIRECTION('',(-0.221964645297,0.301308477221,-0.927332139955)); +#25220 = DIRECTION('',(-0.975054714484,-6.859084754722E-02, + 0.211100922297)); +#25221 = ADVANCED_FACE('',(#25222),#25240,.T.); +#25222 = FACE_BOUND('',#25223,.T.); +#25223 = EDGE_LOOP('',(#25224,#25225,#25226,#25234)); +#25224 = ORIENTED_EDGE('',*,*,#15829,.T.); +#25225 = ORIENTED_EDGE('',*,*,#25211,.F.); +#25226 = ORIENTED_EDGE('',*,*,#25227,.T.); +#25227 = EDGE_CURVE('',#25204,#25228,#25230,.T.); +#25228 = VERTEX_POINT('',#25229); +#25229 = CARTESIAN_POINT('',(88.693930655655,103.88448363167, + 122.32989461398)); +#25230 = LINE('',#25231,#25232); +#25231 = CARTESIAN_POINT('',(88.263981655655,103.74480887727, + 122.75976930617)); +#25232 = VECTOR('',#25233,1.); +#25233 = DIRECTION('',(0.689214299668,0.223900597605,-0.689095183212)); +#25234 = ORIENTED_EDGE('',*,*,#25235,.T.); +#25235 = EDGE_CURVE('',#25228,#15830,#25236,.T.); +#25236 = LINE('',#25237,#25238); +#25237 = CARTESIAN_POINT('',(88.693930655655,103.88448363167, + 122.32989461398)); +#25238 = VECTOR('',#25239,1.); +#25239 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25240 = PLANE('',#25241); +#25241 = AXIS2_PLACEMENT_3D('',#25242,#25243,#25244); +#25242 = CARTESIAN_POINT('',(88.263981655655,103.74480887727, + 122.75976930617)); +#25243 = DIRECTION('',(-0.724557554052,0.212978931364,-0.655481750823)); +#25244 = DIRECTION('',(-0.689214299668,-0.223900597605,0.689095183212)); +#25245 = ADVANCED_FACE('',(#25246),#25264,.T.); +#25246 = FACE_BOUND('',#25247,.T.); +#25247 = EDGE_LOOP('',(#25248,#25249,#25250,#25258)); +#25248 = ORIENTED_EDGE('',*,*,#15837,.T.); +#25249 = ORIENTED_EDGE('',*,*,#25235,.F.); +#25250 = ORIENTED_EDGE('',*,*,#25251,.T.); +#25251 = EDGE_CURVE('',#25228,#25252,#25254,.T.); +#25252 = VERTEX_POINT('',#25253); +#25253 = CARTESIAN_POINT('',(88.842758655655,104.10932594187, + 121.63790113744)); +#25254 = LINE('',#25255,#25256); +#25255 = CARTESIAN_POINT('',(88.693930655655,103.88448363167, + 122.32989461398)); +#25256 = VECTOR('',#25257,1.); +#25257 = DIRECTION('',(0.200395854297,0.302748587854,-0.931764344742)); +#25258 = ORIENTED_EDGE('',*,*,#25259,.T.); +#25259 = EDGE_CURVE('',#25252,#15838,#25260,.T.); +#25260 = LINE('',#25261,#25262); +#25261 = CARTESIAN_POINT('',(88.842758655655,104.10932594187, + 121.63790113744)); +#25262 = VECTOR('',#25263,1.); +#25263 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25264 = PLANE('',#25265); +#25265 = AXIS2_PLACEMENT_3D('',#25266,#25267,#25268); +#25266 = CARTESIAN_POINT('',(88.693930655655,103.88448363167, + 122.32989461398)); +#25267 = DIRECTION('',(-0.979715010388,6.19257245802E-02,-0.190587783068 + )); +#25268 = DIRECTION('',(-0.200395854297,-0.302748587854,0.931764344742)); +#25269 = ADVANCED_FACE('',(#25270),#25288,.T.); +#25270 = FACE_BOUND('',#25271,.T.); +#25271 = EDGE_LOOP('',(#25272,#25273,#25274,#25282)); +#25272 = ORIENTED_EDGE('',*,*,#15845,.T.); +#25273 = ORIENTED_EDGE('',*,*,#25259,.F.); +#25274 = ORIENTED_EDGE('',*,*,#25275,.T.); +#25275 = EDGE_CURVE('',#25252,#25276,#25278,.T.); +#25276 = VERTEX_POINT('',#25277); +#25277 = CARTESIAN_POINT('',(88.842758655655,105.13133630228, + 118.49247667638)); +#25278 = LINE('',#25279,#25280); +#25279 = CARTESIAN_POINT('',(88.842758655655,104.10932594187, + 121.63790113744)); +#25280 = VECTOR('',#25281,1.); +#25281 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25282 = ORIENTED_EDGE('',*,*,#25283,.T.); +#25283 = EDGE_CURVE('',#25276,#15846,#25284,.T.); +#25284 = LINE('',#25285,#25286); +#25285 = CARTESIAN_POINT('',(88.842758655655,105.13133630228, + 118.49247667638)); +#25286 = VECTOR('',#25287,1.); +#25287 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25288 = PLANE('',#25289); +#25289 = AXIS2_PLACEMENT_3D('',#25290,#25291,#25292); +#25290 = CARTESIAN_POINT('',(88.842758655655,104.10932594187, + 121.63790113744)); +#25291 = DIRECTION('',(-1.,0.,0.)); +#25292 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#25293 = ADVANCED_FACE('',(#25294),#25305,.T.); +#25294 = FACE_BOUND('',#25295,.T.); +#25295 = EDGE_LOOP('',(#25296,#25297,#25298,#25304)); +#25296 = ORIENTED_EDGE('',*,*,#15853,.T.); +#25297 = ORIENTED_EDGE('',*,*,#25283,.F.); +#25298 = ORIENTED_EDGE('',*,*,#25299,.T.); +#25299 = EDGE_CURVE('',#25276,#24884,#25300,.T.); +#25300 = LINE('',#25301,#25302); +#25301 = CARTESIAN_POINT('',(88.842758655655,105.13133630228, + 118.49247667638)); +#25302 = VECTOR('',#25303,1.); +#25303 = DIRECTION('',(0.999999999995,-9.599501987063E-07, + 2.954422923066E-06)); +#25304 = ORIENTED_EDGE('',*,*,#24883,.T.); +#25305 = PLANE('',#25306); +#25306 = AXIS2_PLACEMENT_3D('',#25307,#25308,#25309); +#25307 = CARTESIAN_POINT('',(88.842758655655,105.13133630228, + 118.49247667638)); +#25308 = DIRECTION('',(3.106464098028E-06,0.309016994373,-0.951056516291 + )); +#25309 = DIRECTION('',(-0.999999999995,9.599501987048E-07, + -2.954422923067E-06)); +#25310 = ADVANCED_FACE('',(#25311),#25331,.F.); +#25311 = FACE_BOUND('',#25312,.T.); +#25312 = EDGE_LOOP('',(#25313,#25314,#25315,#25316,#25317,#25318,#25319, + #25320,#25321,#25322,#25323,#25324,#25325,#25326,#25327,#25328, + #25329,#25330)); +#25313 = ORIENTED_EDGE('',*,*,#24891,.F.); +#25314 = ORIENTED_EDGE('',*,*,#25299,.F.); +#25315 = ORIENTED_EDGE('',*,*,#25275,.F.); +#25316 = ORIENTED_EDGE('',*,*,#25251,.F.); +#25317 = ORIENTED_EDGE('',*,*,#25227,.F.); +#25318 = ORIENTED_EDGE('',*,*,#25203,.F.); +#25319 = ORIENTED_EDGE('',*,*,#25179,.F.); +#25320 = ORIENTED_EDGE('',*,*,#25155,.F.); +#25321 = ORIENTED_EDGE('',*,*,#25131,.F.); +#25322 = ORIENTED_EDGE('',*,*,#25107,.F.); +#25323 = ORIENTED_EDGE('',*,*,#25083,.F.); +#25324 = ORIENTED_EDGE('',*,*,#25059,.F.); +#25325 = ORIENTED_EDGE('',*,*,#25035,.F.); +#25326 = ORIENTED_EDGE('',*,*,#25011,.F.); +#25327 = ORIENTED_EDGE('',*,*,#24987,.F.); +#25328 = ORIENTED_EDGE('',*,*,#24963,.F.); +#25329 = ORIENTED_EDGE('',*,*,#24939,.F.); +#25330 = ORIENTED_EDGE('',*,*,#24915,.F.); +#25331 = PLANE('',#25332); +#25332 = AXIS2_PLACEMENT_3D('',#25333,#25334,#25335); +#25333 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#25334 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25335 = DIRECTION('',(1.,0.,0.)); +#25336 = ADVANCED_FACE('',(#25337),#25362,.T.); +#25337 = FACE_BOUND('',#25338,.T.); +#25338 = EDGE_LOOP('',(#25339,#25340,#25348,#25356)); +#25339 = ORIENTED_EDGE('',*,*,#15617,.T.); +#25340 = ORIENTED_EDGE('',*,*,#25341,.F.); +#25341 = EDGE_CURVE('',#25342,#15620,#25344,.T.); +#25342 = VERTEX_POINT('',#25343); +#25343 = CARTESIAN_POINT('',(104.60477365565,105.13133475719, + 118.49248143166)); +#25344 = LINE('',#25345,#25346); +#25345 = CARTESIAN_POINT('',(104.60477365565,105.13133475719, + 118.49248143166)); +#25346 = VECTOR('',#25347,1.); +#25347 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25348 = ORIENTED_EDGE('',*,*,#25349,.T.); +#25349 = EDGE_CURVE('',#25342,#25350,#25352,.T.); +#25350 = VERTEX_POINT('',#25351); +#25351 = CARTESIAN_POINT('',(104.60477365565,102.67339967817, + 126.05722775981)); +#25352 = LINE('',#25353,#25354); +#25353 = CARTESIAN_POINT('',(104.60477365565,105.13133475719, + 118.49248143166)); +#25354 = VECTOR('',#25355,1.); +#25355 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25356 = ORIENTED_EDGE('',*,*,#25357,.T.); +#25357 = EDGE_CURVE('',#25350,#15618,#25358,.T.); +#25358 = LINE('',#25359,#25360); +#25359 = CARTESIAN_POINT('',(104.60477365565,102.67339967817, + 126.05722775981)); +#25360 = VECTOR('',#25361,1.); +#25361 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25362 = PLANE('',#25363); +#25363 = AXIS2_PLACEMENT_3D('',#25364,#25365,#25366); +#25364 = CARTESIAN_POINT('',(104.60477365565,105.13133475719, + 118.49248143166)); +#25365 = DIRECTION('',(1.,0.,0.)); +#25366 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#25367 = ADVANCED_FACE('',(#25368),#25386,.T.); +#25368 = FACE_BOUND('',#25369,.T.); +#25369 = EDGE_LOOP('',(#25370,#25371,#25372,#25380)); +#25370 = ORIENTED_EDGE('',*,*,#15627,.T.); +#25371 = ORIENTED_EDGE('',*,*,#25357,.F.); +#25372 = ORIENTED_EDGE('',*,*,#25373,.T.); +#25373 = EDGE_CURVE('',#25350,#25374,#25376,.T.); +#25374 = VERTEX_POINT('',#25375); +#25375 = CARTESIAN_POINT('',(102.94010165565,102.67339967817, + 126.05722775981)); +#25376 = LINE('',#25377,#25378); +#25377 = CARTESIAN_POINT('',(104.60477365565,102.67339967817, + 126.05722775981)); +#25378 = VECTOR('',#25379,1.); +#25379 = DIRECTION('',(-1.,0.,0.)); +#25380 = ORIENTED_EDGE('',*,*,#25381,.T.); +#25381 = EDGE_CURVE('',#25374,#15628,#25382,.T.); +#25382 = LINE('',#25383,#25384); +#25383 = CARTESIAN_POINT('',(102.94010165565,102.67339967817, + 126.05722775981)); +#25384 = VECTOR('',#25385,1.); +#25385 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25386 = PLANE('',#25387); +#25387 = AXIS2_PLACEMENT_3D('',#25388,#25389,#25390); +#25388 = CARTESIAN_POINT('',(104.60477365565,102.67339967817, + 126.05722775981)); +#25389 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25390 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#25391 = ADVANCED_FACE('',(#25392),#25410,.T.); +#25392 = FACE_BOUND('',#25393,.T.); +#25393 = EDGE_LOOP('',(#25394,#25395,#25396,#25404)); +#25394 = ORIENTED_EDGE('',*,*,#15635,.T.); +#25395 = ORIENTED_EDGE('',*,*,#25381,.F.); +#25396 = ORIENTED_EDGE('',*,*,#25397,.T.); +#25397 = EDGE_CURVE('',#25374,#25398,#25400,.T.); +#25398 = VERTEX_POINT('',#25399); +#25399 = CARTESIAN_POINT('',(102.94010165565,103.67156319712, + 122.98519633012)); +#25400 = LINE('',#25401,#25402); +#25401 = CARTESIAN_POINT('',(102.94010165565,102.67339967817, + 126.05722775981)); +#25402 = VECTOR('',#25403,1.); +#25403 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25404 = ORIENTED_EDGE('',*,*,#25405,.T.); +#25405 = EDGE_CURVE('',#25398,#15636,#25406,.T.); +#25406 = LINE('',#25407,#25408); +#25407 = CARTESIAN_POINT('',(102.94010165565,103.67156319712, + 122.98519633012)); +#25408 = VECTOR('',#25409,1.); +#25409 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25410 = PLANE('',#25411); +#25411 = AXIS2_PLACEMENT_3D('',#25412,#25413,#25414); +#25412 = CARTESIAN_POINT('',(102.94010165565,102.67339967817, + 126.05722775981)); +#25413 = DIRECTION('',(-1.,0.,0.)); +#25414 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#25415 = ADVANCED_FACE('',(#25416),#25434,.T.); +#25416 = FACE_BOUND('',#25417,.T.); +#25417 = EDGE_LOOP('',(#25418,#25419,#25420,#25428)); +#25418 = ORIENTED_EDGE('',*,*,#15643,.T.); +#25419 = ORIENTED_EDGE('',*,*,#25405,.F.); +#25420 = ORIENTED_EDGE('',*,*,#25421,.T.); +#25421 = EDGE_CURVE('',#25398,#25422,#25424,.T.); +#25422 = VERTEX_POINT('',#25423); +#25423 = CARTESIAN_POINT('',(99.357198655655,103.67156319712, + 122.98519633012)); +#25424 = LINE('',#25425,#25426); +#25425 = CARTESIAN_POINT('',(102.94010165565,103.67156319712, + 122.98519633012)); +#25426 = VECTOR('',#25427,1.); +#25427 = DIRECTION('',(-1.,0.,0.)); +#25428 = ORIENTED_EDGE('',*,*,#25429,.T.); +#25429 = EDGE_CURVE('',#25422,#15644,#25430,.T.); +#25430 = LINE('',#25431,#25432); +#25431 = CARTESIAN_POINT('',(99.357198655655,103.67156319712, + 122.98519633012)); +#25432 = VECTOR('',#25433,1.); +#25433 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25434 = PLANE('',#25435); +#25435 = AXIS2_PLACEMENT_3D('',#25436,#25437,#25438); +#25436 = CARTESIAN_POINT('',(102.94010165565,103.67156319712, + 122.98519633012)); +#25437 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25438 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#25439 = ADVANCED_FACE('',(#25440),#25458,.T.); +#25440 = FACE_BOUND('',#25441,.T.); +#25441 = EDGE_LOOP('',(#25442,#25443,#25444,#25452)); +#25442 = ORIENTED_EDGE('',*,*,#15651,.T.); +#25443 = ORIENTED_EDGE('',*,*,#25429,.F.); +#25444 = ORIENTED_EDGE('',*,*,#25445,.T.); +#25445 = EDGE_CURVE('',#25422,#25446,#25448,.T.); +#25446 = VERTEX_POINT('',#25447); +#25447 = CARTESIAN_POINT('',(99.357198655655,102.67339967817, + 126.05722775981)); +#25448 = LINE('',#25449,#25450); +#25449 = CARTESIAN_POINT('',(99.357198655655,103.67156319712, + 122.98519633012)); +#25450 = VECTOR('',#25451,1.); +#25451 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25452 = ORIENTED_EDGE('',*,*,#25453,.T.); +#25453 = EDGE_CURVE('',#25446,#15652,#25454,.T.); +#25454 = LINE('',#25455,#25456); +#25455 = CARTESIAN_POINT('',(99.357198655655,102.67339967817, + 126.05722775981)); +#25456 = VECTOR('',#25457,1.); +#25457 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25458 = PLANE('',#25459); +#25459 = AXIS2_PLACEMENT_3D('',#25460,#25461,#25462); +#25460 = CARTESIAN_POINT('',(99.357198655655,103.67156319712, + 122.98519633012)); +#25461 = DIRECTION('',(1.,0.,0.)); +#25462 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#25463 = ADVANCED_FACE('',(#25464),#25482,.T.); +#25464 = FACE_BOUND('',#25465,.T.); +#25465 = EDGE_LOOP('',(#25466,#25467,#25468,#25476)); +#25466 = ORIENTED_EDGE('',*,*,#15659,.T.); +#25467 = ORIENTED_EDGE('',*,*,#25453,.F.); +#25468 = ORIENTED_EDGE('',*,*,#25469,.T.); +#25469 = EDGE_CURVE('',#25446,#25470,#25472,.T.); +#25470 = VERTEX_POINT('',#25471); +#25471 = CARTESIAN_POINT('',(97.692527655655,102.67339967817, + 126.05722775981)); +#25472 = LINE('',#25473,#25474); +#25473 = CARTESIAN_POINT('',(99.357198655655,102.67339967817, + 126.05722775981)); +#25474 = VECTOR('',#25475,1.); +#25475 = DIRECTION('',(-1.,0.,0.)); +#25476 = ORIENTED_EDGE('',*,*,#25477,.T.); +#25477 = EDGE_CURVE('',#25470,#15660,#25478,.T.); +#25478 = LINE('',#25479,#25480); +#25479 = CARTESIAN_POINT('',(97.692527655655,102.67339967817, + 126.05722775981)); +#25480 = VECTOR('',#25481,1.); +#25481 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25482 = PLANE('',#25483); +#25483 = AXIS2_PLACEMENT_3D('',#25484,#25485,#25486); +#25484 = CARTESIAN_POINT('',(99.357198655655,102.67339967817, + 126.05722775981)); +#25485 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25486 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#25487 = ADVANCED_FACE('',(#25488),#25506,.T.); +#25488 = FACE_BOUND('',#25489,.T.); +#25489 = EDGE_LOOP('',(#25490,#25491,#25492,#25500)); +#25490 = ORIENTED_EDGE('',*,*,#15667,.T.); +#25491 = ORIENTED_EDGE('',*,*,#25477,.F.); +#25492 = ORIENTED_EDGE('',*,*,#25493,.T.); +#25493 = EDGE_CURVE('',#25470,#25494,#25496,.T.); +#25494 = VERTEX_POINT('',#25495); +#25495 = CARTESIAN_POINT('',(97.692527655655,105.13133475719, + 118.49248143166)); +#25496 = LINE('',#25497,#25498); +#25497 = CARTESIAN_POINT('',(97.692527655655,102.67339967817, + 126.05722775981)); +#25498 = VECTOR('',#25499,1.); +#25499 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25500 = ORIENTED_EDGE('',*,*,#25501,.T.); +#25501 = EDGE_CURVE('',#25494,#15668,#25502,.T.); +#25502 = LINE('',#25503,#25504); +#25503 = CARTESIAN_POINT('',(97.692527655655,105.13133475719, + 118.49248143166)); +#25504 = VECTOR('',#25505,1.); +#25505 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25506 = PLANE('',#25507); +#25507 = AXIS2_PLACEMENT_3D('',#25508,#25509,#25510); +#25508 = CARTESIAN_POINT('',(97.692527655655,102.67339967817, + 126.05722775981)); +#25509 = DIRECTION('',(-1.,0.,0.)); +#25510 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#25511 = ADVANCED_FACE('',(#25512),#25530,.T.); +#25512 = FACE_BOUND('',#25513,.T.); +#25513 = EDGE_LOOP('',(#25514,#25515,#25516,#25524)); +#25514 = ORIENTED_EDGE('',*,*,#15675,.T.); +#25515 = ORIENTED_EDGE('',*,*,#25501,.F.); +#25516 = ORIENTED_EDGE('',*,*,#25517,.T.); +#25517 = EDGE_CURVE('',#25494,#25518,#25520,.T.); +#25518 = VERTEX_POINT('',#25519); +#25519 = CARTESIAN_POINT('',(99.357198655655,105.13133475719, + 118.49248143166)); +#25520 = LINE('',#25521,#25522); +#25521 = CARTESIAN_POINT('',(97.692527655655,105.13133475719, + 118.49248143166)); +#25522 = VECTOR('',#25523,1.); +#25523 = DIRECTION('',(1.,0.,0.)); +#25524 = ORIENTED_EDGE('',*,*,#25525,.T.); +#25525 = EDGE_CURVE('',#25518,#15676,#25526,.T.); +#25526 = LINE('',#25527,#25528); +#25527 = CARTESIAN_POINT('',(99.357198655655,105.13133475719, + 118.49248143166)); +#25528 = VECTOR('',#25529,1.); +#25529 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25530 = PLANE('',#25531); +#25531 = AXIS2_PLACEMENT_3D('',#25532,#25533,#25534); +#25532 = CARTESIAN_POINT('',(97.692527655655,105.13133475719, + 118.49248143166)); +#25533 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25534 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25535 = ADVANCED_FACE('',(#25536),#25554,.T.); +#25536 = FACE_BOUND('',#25537,.T.); +#25537 = EDGE_LOOP('',(#25538,#25539,#25540,#25548)); +#25538 = ORIENTED_EDGE('',*,*,#15683,.T.); +#25539 = ORIENTED_EDGE('',*,*,#25525,.F.); +#25540 = ORIENTED_EDGE('',*,*,#25541,.T.); +#25541 = EDGE_CURVE('',#25518,#25542,#25544,.T.); +#25542 = VERTEX_POINT('',#25543); +#25543 = CARTESIAN_POINT('',(99.357198655655,104.09569736536, + 121.67984558298)); +#25544 = LINE('',#25545,#25546); +#25545 = CARTESIAN_POINT('',(99.357198655655,105.13133475719, + 118.49248143166)); +#25546 = VECTOR('',#25547,1.); +#25547 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25548 = ORIENTED_EDGE('',*,*,#25549,.T.); +#25549 = EDGE_CURVE('',#25542,#15684,#25550,.T.); +#25550 = LINE('',#25551,#25552); +#25551 = CARTESIAN_POINT('',(99.357198655655,104.09569736536, + 121.67984558298)); +#25552 = VECTOR('',#25553,1.); +#25553 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25554 = PLANE('',#25555); +#25555 = AXIS2_PLACEMENT_3D('',#25556,#25557,#25558); +#25556 = CARTESIAN_POINT('',(99.357198655655,105.13133475719, + 118.49248143166)); +#25557 = DIRECTION('',(1.,0.,0.)); +#25558 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#25559 = ADVANCED_FACE('',(#25560),#25578,.T.); +#25560 = FACE_BOUND('',#25561,.T.); +#25561 = EDGE_LOOP('',(#25562,#25563,#25564,#25572)); +#25562 = ORIENTED_EDGE('',*,*,#15691,.T.); +#25563 = ORIENTED_EDGE('',*,*,#25549,.F.); +#25564 = ORIENTED_EDGE('',*,*,#25565,.T.); +#25565 = EDGE_CURVE('',#25542,#25566,#25568,.T.); +#25566 = VERTEX_POINT('',#25567); +#25567 = CARTESIAN_POINT('',(102.94010165565,104.09569736536, + 121.67984558298)); +#25568 = LINE('',#25569,#25570); +#25569 = CARTESIAN_POINT('',(99.357198655655,104.09569736536, + 121.67984558298)); +#25570 = VECTOR('',#25571,1.); +#25571 = DIRECTION('',(1.,0.,0.)); +#25572 = ORIENTED_EDGE('',*,*,#25573,.T.); +#25573 = EDGE_CURVE('',#25566,#15692,#25574,.T.); +#25574 = LINE('',#25575,#25576); +#25575 = CARTESIAN_POINT('',(102.94010165565,104.09569736536, + 121.67984558298)); +#25576 = VECTOR('',#25577,1.); +#25577 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25578 = PLANE('',#25579); +#25579 = AXIS2_PLACEMENT_3D('',#25580,#25581,#25582); +#25580 = CARTESIAN_POINT('',(99.357198655655,104.09569736536, + 121.67984558298)); +#25581 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25582 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25583 = ADVANCED_FACE('',(#25584),#25602,.T.); +#25584 = FACE_BOUND('',#25585,.T.); +#25585 = EDGE_LOOP('',(#25586,#25587,#25588,#25596)); +#25586 = ORIENTED_EDGE('',*,*,#15699,.T.); +#25587 = ORIENTED_EDGE('',*,*,#25573,.F.); +#25588 = ORIENTED_EDGE('',*,*,#25589,.T.); +#25589 = EDGE_CURVE('',#25566,#25590,#25592,.T.); +#25590 = VERTEX_POINT('',#25591); +#25591 = CARTESIAN_POINT('',(102.94010165565,105.13133475719, + 118.49248143166)); +#25592 = LINE('',#25593,#25594); +#25593 = CARTESIAN_POINT('',(102.94010165565,104.09569736536, + 121.67984558298)); +#25594 = VECTOR('',#25595,1.); +#25595 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25596 = ORIENTED_EDGE('',*,*,#25597,.T.); +#25597 = EDGE_CURVE('',#25590,#15700,#25598,.T.); +#25598 = LINE('',#25599,#25600); +#25599 = CARTESIAN_POINT('',(102.94010165565,105.13133475719, + 118.49248143166)); +#25600 = VECTOR('',#25601,1.); +#25601 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25602 = PLANE('',#25603); +#25603 = AXIS2_PLACEMENT_3D('',#25604,#25605,#25606); +#25604 = CARTESIAN_POINT('',(102.94010165565,104.09569736536, + 121.67984558298)); +#25605 = DIRECTION('',(-1.,0.,0.)); +#25606 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#25607 = ADVANCED_FACE('',(#25608),#25619,.T.); +#25608 = FACE_BOUND('',#25609,.T.); +#25609 = EDGE_LOOP('',(#25610,#25611,#25612,#25618)); +#25610 = ORIENTED_EDGE('',*,*,#15707,.T.); +#25611 = ORIENTED_EDGE('',*,*,#25597,.F.); +#25612 = ORIENTED_EDGE('',*,*,#25613,.T.); +#25613 = EDGE_CURVE('',#25590,#25342,#25614,.T.); +#25614 = LINE('',#25615,#25616); +#25615 = CARTESIAN_POINT('',(102.94010165565,105.13133475719, + 118.49248143166)); +#25616 = VECTOR('',#25617,1.); +#25617 = DIRECTION('',(1.,0.,0.)); +#25618 = ORIENTED_EDGE('',*,*,#25341,.T.); +#25619 = PLANE('',#25620); +#25620 = AXIS2_PLACEMENT_3D('',#25621,#25622,#25623); +#25621 = CARTESIAN_POINT('',(102.94010165565,105.13133475719, + 118.49248143166)); +#25622 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25623 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25624 = ADVANCED_FACE('',(#25625),#25639,.F.); +#25625 = FACE_BOUND('',#25626,.T.); +#25626 = EDGE_LOOP('',(#25627,#25628,#25629,#25630,#25631,#25632,#25633, + #25634,#25635,#25636,#25637,#25638)); +#25627 = ORIENTED_EDGE('',*,*,#25349,.F.); +#25628 = ORIENTED_EDGE('',*,*,#25613,.F.); +#25629 = ORIENTED_EDGE('',*,*,#25589,.F.); +#25630 = ORIENTED_EDGE('',*,*,#25565,.F.); +#25631 = ORIENTED_EDGE('',*,*,#25541,.F.); +#25632 = ORIENTED_EDGE('',*,*,#25517,.F.); +#25633 = ORIENTED_EDGE('',*,*,#25493,.F.); +#25634 = ORIENTED_EDGE('',*,*,#25469,.F.); +#25635 = ORIENTED_EDGE('',*,*,#25445,.F.); +#25636 = ORIENTED_EDGE('',*,*,#25421,.F.); +#25637 = ORIENTED_EDGE('',*,*,#25397,.F.); +#25638 = ORIENTED_EDGE('',*,*,#25373,.F.); +#25639 = PLANE('',#25640); +#25640 = AXIS2_PLACEMENT_3D('',#25641,#25642,#25643); +#25641 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#25642 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25643 = DIRECTION('',(1.,0.,0.)); +#25644 = ADVANCED_FACE('',(#25645),#25679,.T.); +#25645 = FACE_BOUND('',#25646,.T.); +#25646 = EDGE_LOOP('',(#25647,#25657,#25665,#25673)); +#25647 = ORIENTED_EDGE('',*,*,#25648,.T.); +#25648 = EDGE_CURVE('',#25649,#25651,#25653,.T.); +#25649 = VERTEX_POINT('',#25650); +#25650 = CARTESIAN_POINT('',(95.016374655655,103.79021474137, + 119.38395644822)); +#25651 = VERTEX_POINT('',#25652); +#25652 = CARTESIAN_POINT('',(95.267089228677,103.63009975528, + 119.87673970499)); +#25653 = LINE('',#25654,#25655); +#25654 = CARTESIAN_POINT('',(95.267089228677,103.63009975528, + 119.87673970499)); +#25655 = VECTOR('',#25656,1.); +#25656 = DIRECTION('',(0.435561249389,-0.278164458291,0.85610217391)); +#25657 = ORIENTED_EDGE('',*,*,#25658,.F.); +#25658 = EDGE_CURVE('',#25659,#25651,#25661,.T.); +#25659 = VERTEX_POINT('',#25660); +#25660 = CARTESIAN_POINT('',(95.267089228677,104.58115627157, + 120.18575669936)); +#25661 = LINE('',#25662,#25663); +#25662 = CARTESIAN_POINT('',(95.267089228677,104.58115627157, + 120.18575669936)); +#25663 = VECTOR('',#25664,1.); +#25664 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25665 = ORIENTED_EDGE('',*,*,#25666,.T.); +#25666 = EDGE_CURVE('',#25659,#25667,#25669,.T.); +#25667 = VERTEX_POINT('',#25668); +#25668 = CARTESIAN_POINT('',(95.016374655655,104.74127125767, + 119.6929734426)); +#25669 = LINE('',#25670,#25671); +#25670 = CARTESIAN_POINT('',(95.267089228677,104.58115627157, + 120.18575669936)); +#25671 = VECTOR('',#25672,1.); +#25672 = DIRECTION('',(-0.435561249389,0.278164458291,-0.85610217391)); +#25673 = ORIENTED_EDGE('',*,*,#25674,.T.); +#25674 = EDGE_CURVE('',#25667,#25649,#25675,.T.); +#25675 = LINE('',#25676,#25677); +#25676 = CARTESIAN_POINT('',(95.016374655655,104.74127125767, + 119.6929734426)); +#25677 = VECTOR('',#25678,1.); +#25678 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25679 = PLANE('',#25680); +#25680 = AXIS2_PLACEMENT_3D('',#25681,#25682,#25683); +#25681 = CARTESIAN_POINT('',(95.267089228677,104.58115627157, + 120.18575669936)); +#25682 = DIRECTION('',(-0.900159095955,-0.134595828152,0.414243364477)); +#25683 = DIRECTION('',(0.435561249389,-0.278164458291,0.85610217391)); +#25684 = ADVANCED_FACE('',(#25685),#25710,.T.); +#25685 = FACE_BOUND('',#25686,.T.); +#25686 = EDGE_LOOP('',(#25687,#25695,#25696,#25704)); +#25687 = ORIENTED_EDGE('',*,*,#25688,.T.); +#25688 = EDGE_CURVE('',#25689,#25649,#25691,.T.); +#25689 = VERTEX_POINT('',#25690); +#25690 = CARTESIAN_POINT('',(94.349402655655,103.84642555068, + 119.21095736579)); +#25691 = LINE('',#25692,#25693); +#25692 = CARTESIAN_POINT('',(95.016374655655,103.79021474137, + 119.38395644822)); +#25693 = VECTOR('',#25694,1.); +#25694 = DIRECTION('',(0.964763620955,-8.130797683785E-02,0.250240221755 + )); +#25695 = ORIENTED_EDGE('',*,*,#25674,.F.); +#25696 = ORIENTED_EDGE('',*,*,#25697,.T.); +#25697 = EDGE_CURVE('',#25667,#25698,#25700,.T.); +#25698 = VERTEX_POINT('',#25699); +#25699 = CARTESIAN_POINT('',(94.349402655655,104.79748206698, + 119.51997436017)); +#25700 = LINE('',#25701,#25702); +#25701 = CARTESIAN_POINT('',(95.016374655655,104.74127125767, + 119.6929734426)); +#25702 = VECTOR('',#25703,1.); +#25703 = DIRECTION('',(-0.964763620955,8.130797683785E-02, + -0.250240221755)); +#25704 = ORIENTED_EDGE('',*,*,#25705,.T.); +#25705 = EDGE_CURVE('',#25698,#25689,#25706,.T.); +#25706 = LINE('',#25707,#25708); +#25707 = CARTESIAN_POINT('',(94.349402655655,104.79748206698, + 119.51997436017)); +#25708 = VECTOR('',#25709,1.); +#25709 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25710 = PLANE('',#25711); +#25711 = AXIS2_PLACEMENT_3D('',#25712,#25713,#25714); +#25712 = CARTESIAN_POINT('',(95.016374655655,104.74127125767, + 119.6929734426)); +#25713 = DIRECTION('',(-0.26311814016,-0.29812835443,0.917544728394)); +#25714 = DIRECTION('',(0.964763620955,-8.130797683785E-02,0.250240221755 + )); +#25715 = ADVANCED_FACE('',(#25716),#25741,.T.); +#25716 = FACE_BOUND('',#25717,.T.); +#25717 = EDGE_LOOP('',(#25718,#25726,#25727,#25735)); +#25718 = ORIENTED_EDGE('',*,*,#25719,.T.); +#25719 = EDGE_CURVE('',#25720,#25689,#25722,.T.); +#25720 = VERTEX_POINT('',#25721); +#25721 = CARTESIAN_POINT('',(93.709992655655,103.80384177279, + 119.34201675797)); +#25722 = LINE('',#25723,#25724); +#25723 = CARTESIAN_POINT('',(94.349402655655,103.84642555068, + 119.21095736579)); +#25724 = VECTOR('',#25725,1.); +#25725 = DIRECTION('',(0.977555048873,6.510374732836E-02,-0.200368731361 + )); +#25726 = ORIENTED_EDGE('',*,*,#25705,.F.); +#25727 = ORIENTED_EDGE('',*,*,#25728,.T.); +#25728 = EDGE_CURVE('',#25698,#25729,#25731,.T.); +#25729 = VERTEX_POINT('',#25730); +#25730 = CARTESIAN_POINT('',(93.709992655655,104.75489828909, + 119.65103375234)); +#25731 = LINE('',#25732,#25733); +#25732 = CARTESIAN_POINT('',(94.349402655655,104.79748206698, + 119.51997436017)); +#25733 = VECTOR('',#25734,1.); +#25734 = DIRECTION('',(-0.977555048873,-6.510374732836E-02, + 0.200368731361)); +#25735 = ORIENTED_EDGE('',*,*,#25736,.T.); +#25736 = EDGE_CURVE('',#25729,#25720,#25737,.T.); +#25737 = LINE('',#25738,#25739); +#25738 = CARTESIAN_POINT('',(93.709992655655,104.75489828909, + 119.65103375234)); +#25739 = VECTOR('',#25740,1.); +#25740 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25741 = PLANE('',#25742); +#25742 = AXIS2_PLACEMENT_3D('',#25743,#25744,#25745); +#25743 = CARTESIAN_POINT('',(94.349402655655,104.79748206698, + 119.51997436017)); +#25744 = DIRECTION('',(0.210680151945,-0.302081123039,0.929710099268)); +#25745 = DIRECTION('',(0.977555048873,6.510374732836E-02,-0.200368731361 + )); +#25746 = ADVANCED_FACE('',(#25747),#25772,.T.); +#25747 = FACE_BOUND('',#25748,.T.); +#25748 = EDGE_LOOP('',(#25749,#25757,#25758,#25766)); +#25749 = ORIENTED_EDGE('',*,*,#25750,.T.); +#25750 = EDGE_CURVE('',#25751,#25720,#25753,.T.); +#25751 = VERTEX_POINT('',#25752); +#25752 = CARTESIAN_POINT('',(93.263507655655,103.68460725649, + 119.70898286583)); +#25753 = LINE('',#25754,#25755); +#25754 = CARTESIAN_POINT('',(93.709992655655,103.80384177279, + 119.34201675797)); +#25755 = VECTOR('',#25756,1.); +#25756 = DIRECTION('',(0.756613133265,0.202054718453,-0.621860480592)); +#25757 = ORIENTED_EDGE('',*,*,#25736,.F.); +#25758 = ORIENTED_EDGE('',*,*,#25759,.T.); +#25759 = EDGE_CURVE('',#25729,#25760,#25762,.T.); +#25760 = VERTEX_POINT('',#25761); +#25761 = CARTESIAN_POINT('',(93.263507655655,104.63566377279, + 120.01799986021)); +#25762 = LINE('',#25763,#25764); +#25763 = CARTESIAN_POINT('',(93.709992655655,104.75489828909, + 119.65103375234)); +#25764 = VECTOR('',#25765,1.); +#25765 = DIRECTION('',(-0.756613133265,-0.202054718453,0.621860480592)); +#25766 = ORIENTED_EDGE('',*,*,#25767,.T.); +#25767 = EDGE_CURVE('',#25760,#25751,#25768,.T.); +#25768 = LINE('',#25769,#25770); +#25769 = CARTESIAN_POINT('',(93.263507655655,104.63566377279, + 120.01799986021)); +#25770 = VECTOR('',#25771,1.); +#25771 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25772 = PLANE('',#25773); +#25773 = AXIS2_PLACEMENT_3D('',#25774,#25775,#25776); +#25774 = CARTESIAN_POINT('',(93.709992655655,104.75489828909, + 119.65103375234)); +#25775 = DIRECTION('',(0.653862804089,-0.233806316346,0.719581850706)); +#25776 = DIRECTION('',(0.756613133265,0.202054718453,-0.621860480592)); +#25777 = ADVANCED_FACE('',(#25778),#25803,.T.); +#25778 = FACE_BOUND('',#25779,.T.); +#25779 = EDGE_LOOP('',(#25780,#25788,#25789,#25797)); +#25780 = ORIENTED_EDGE('',*,*,#25781,.T.); +#25781 = EDGE_CURVE('',#25782,#25751,#25784,.T.); +#25782 = VERTEX_POINT('',#25783); +#25783 = CARTESIAN_POINT('',(93.098142655655,103.51256884325, + 120.23846265804)); +#25784 = LINE('',#25785,#25786); +#25785 = CARTESIAN_POINT('',(93.263507655655,103.68460725649, + 119.70898286583)); +#25786 = VECTOR('',#25787,1.); +#25787 = DIRECTION('',(0.284734964781,0.296225631398,-0.911688749044)); +#25788 = ORIENTED_EDGE('',*,*,#25767,.F.); +#25789 = ORIENTED_EDGE('',*,*,#25790,.T.); +#25790 = EDGE_CURVE('',#25760,#25791,#25793,.T.); +#25791 = VERTEX_POINT('',#25792); +#25792 = CARTESIAN_POINT('',(93.098142655655,104.46362535955, + 120.54747965241)); +#25793 = LINE('',#25794,#25795); +#25794 = CARTESIAN_POINT('',(93.263507655655,104.63566377279, + 120.01799986021)); +#25795 = VECTOR('',#25796,1.); +#25796 = DIRECTION('',(-0.284734964781,-0.296225631398,0.911688749044)); +#25797 = ORIENTED_EDGE('',*,*,#25798,.T.); +#25798 = EDGE_CURVE('',#25791,#25782,#25799,.T.); +#25799 = LINE('',#25800,#25801); +#25800 = CARTESIAN_POINT('',(93.098142655655,104.46362535955, + 120.54747965241)); +#25801 = VECTOR('',#25802,1.); +#25802 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25803 = PLANE('',#25804); +#25804 = AXIS2_PLACEMENT_3D('',#25805,#25806,#25807); +#25805 = CARTESIAN_POINT('',(93.263507655655,104.63566377279, + 120.01799986021)); +#25806 = DIRECTION('',(0.958606279883,-8.798794301022E-02,0.270799043672 + )); +#25807 = DIRECTION('',(0.284734964781,0.296225631398,-0.911688749044)); +#25808 = ADVANCED_FACE('',(#25809),#25834,.T.); +#25809 = FACE_BOUND('',#25810,.T.); +#25810 = EDGE_LOOP('',(#25811,#25819,#25820,#25828)); +#25811 = ORIENTED_EDGE('',*,*,#25812,.T.); +#25812 = EDGE_CURVE('',#25813,#25782,#25815,.T.); +#25813 = VERTEX_POINT('',#25814); +#25814 = CARTESIAN_POINT('',(93.098142655655,103.38109955485, + 120.64308352258)); +#25815 = LINE('',#25816,#25817); +#25816 = CARTESIAN_POINT('',(93.098142655655,103.51256884325, + 120.23846265804)); +#25817 = VECTOR('',#25818,1.); +#25818 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#25819 = ORIENTED_EDGE('',*,*,#25798,.F.); +#25820 = ORIENTED_EDGE('',*,*,#25821,.T.); +#25821 = EDGE_CURVE('',#25791,#25822,#25824,.T.); +#25822 = VERTEX_POINT('',#25823); +#25823 = CARTESIAN_POINT('',(93.098142655655,104.33215607115, + 120.95210051696)); +#25824 = LINE('',#25825,#25826); +#25825 = CARTESIAN_POINT('',(93.098142655655,104.46362535955, + 120.54747965241)); +#25826 = VECTOR('',#25827,1.); +#25827 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#25828 = ORIENTED_EDGE('',*,*,#25829,.T.); +#25829 = EDGE_CURVE('',#25822,#25813,#25830,.T.); +#25830 = LINE('',#25831,#25832); +#25831 = CARTESIAN_POINT('',(93.098142655655,104.33215607115, + 120.95210051696)); +#25832 = VECTOR('',#25833,1.); +#25833 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25834 = PLANE('',#25835); +#25835 = AXIS2_PLACEMENT_3D('',#25836,#25837,#25838); +#25836 = CARTESIAN_POINT('',(93.098142655655,104.46362535955, + 120.54747965241)); +#25837 = DIRECTION('',(1.,0.,0.)); +#25838 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#25839 = ADVANCED_FACE('',(#25840),#25865,.T.); +#25840 = FACE_BOUND('',#25841,.T.); +#25841 = EDGE_LOOP('',(#25842,#25850,#25851,#25859)); +#25842 = ORIENTED_EDGE('',*,*,#25843,.T.); +#25843 = EDGE_CURVE('',#25844,#25813,#25846,.T.); +#25844 = VERTEX_POINT('',#25845); +#25845 = CARTESIAN_POINT('',(94.316329655655,103.4052562026, + 120.56873700551)); +#25846 = LINE('',#25847,#25848); +#25847 = CARTESIAN_POINT('',(93.098142655655,103.38109955485, + 120.64308352258)); +#25848 = VECTOR('',#25849,1.); +#25849 = DIRECTION('',(-0.997947364141,-1.978929584842E-02, + 6.090519004497E-02)); +#25850 = ORIENTED_EDGE('',*,*,#25829,.F.); +#25851 = ORIENTED_EDGE('',*,*,#25852,.T.); +#25852 = EDGE_CURVE('',#25822,#25853,#25855,.T.); +#25853 = VERTEX_POINT('',#25854); +#25854 = CARTESIAN_POINT('',(94.316329655655,104.35631271889, + 120.87775399988)); +#25855 = LINE('',#25856,#25857); +#25856 = CARTESIAN_POINT('',(93.098142655655,104.33215607115, + 120.95210051696)); +#25857 = VECTOR('',#25858,1.); +#25858 = DIRECTION('',(0.997947364141,1.978929584842E-02, + -6.090519004497E-02)); +#25859 = ORIENTED_EDGE('',*,*,#25860,.T.); +#25860 = EDGE_CURVE('',#25853,#25844,#25861,.T.); +#25861 = LINE('',#25862,#25863); +#25862 = CARTESIAN_POINT('',(94.316329655655,104.35631271889, + 120.87775399988)); +#25863 = VECTOR('',#25864,1.); +#25864 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25865 = PLANE('',#25866); +#25866 = AXIS2_PLACEMENT_3D('',#25867,#25868,#25869); +#25867 = CARTESIAN_POINT('',(93.098142655655,104.33215607115, + 120.95210051696)); +#25868 = DIRECTION('',(-6.403950659233E-02,0.308382695011, + -0.949104343586)); +#25869 = DIRECTION('',(-0.997947364141,-1.978929584842E-02, + 6.090519004497E-02)); +#25870 = ADVANCED_FACE('',(#25871),#25896,.T.); +#25871 = FACE_BOUND('',#25872,.T.); +#25872 = EDGE_LOOP('',(#25873,#25881,#25882,#25890)); +#25873 = ORIENTED_EDGE('',*,*,#25874,.T.); +#25874 = EDGE_CURVE('',#25875,#25844,#25877,.T.); +#25875 = VERTEX_POINT('',#25876); +#25876 = CARTESIAN_POINT('',(95.021886655655,103.47339012362, + 120.35904235846)); +#25877 = LINE('',#25878,#25879); +#25878 = CARTESIAN_POINT('',(94.316329655655,103.4052562026, + 120.56873700551)); +#25879 = VECTOR('',#25880,1.); +#25880 = DIRECTION('',(-0.954480194676,-9.217182764947E-02, + 0.283675716548)); +#25881 = ORIENTED_EDGE('',*,*,#25860,.F.); +#25882 = ORIENTED_EDGE('',*,*,#25883,.T.); +#25883 = EDGE_CURVE('',#25853,#25884,#25886,.T.); +#25884 = VERTEX_POINT('',#25885); +#25885 = CARTESIAN_POINT('',(95.021886655655,104.42444663991, + 120.66805935283)); +#25886 = LINE('',#25887,#25888); +#25887 = CARTESIAN_POINT('',(94.316329655655,104.35631271889, + 120.87775399988)); +#25888 = VECTOR('',#25889,1.); +#25889 = DIRECTION('',(0.954480194676,9.217182764947E-02,-0.283675716548 + )); +#25890 = ORIENTED_EDGE('',*,*,#25891,.T.); +#25891 = EDGE_CURVE('',#25884,#25875,#25892,.T.); +#25892 = LINE('',#25893,#25894); +#25893 = CARTESIAN_POINT('',(95.021886655655,104.42444663991, + 120.66805935283)); +#25894 = VECTOR('',#25895,1.); +#25895 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25896 = PLANE('',#25897); +#25897 = AXIS2_PLACEMENT_3D('',#25898,#25899,#25900); +#25898 = CARTESIAN_POINT('',(94.316329655655,104.35631271889, + 120.87775399988)); +#25899 = DIRECTION('',(-0.298274299884,0.294950600949,-0.907764608821)); +#25900 = DIRECTION('',(-0.954480194676,-9.217182764947E-02, + 0.283675716548)); +#25901 = ADVANCED_FACE('',(#25902),#25927,.T.); +#25902 = FACE_BOUND('',#25903,.T.); +#25903 = EDGE_LOOP('',(#25904,#25905,#25913,#25921)); +#25904 = ORIENTED_EDGE('',*,*,#15367,.T.); +#25905 = ORIENTED_EDGE('',*,*,#25906,.F.); +#25906 = EDGE_CURVE('',#25907,#15370,#25909,.T.); +#25907 = VERTEX_POINT('',#25908); +#25908 = CARTESIAN_POINT('',(96.858423750231,104.60726615449, + 120.10539874254)); +#25909 = LINE('',#25910,#25911); +#25910 = CARTESIAN_POINT('',(96.858423750231,104.60726615449, + 120.10539874254)); +#25911 = VECTOR('',#25912,1.); +#25912 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25913 = ORIENTED_EDGE('',*,*,#25914,.T.); +#25914 = EDGE_CURVE('',#25907,#25915,#25917,.T.); +#25915 = VERTEX_POINT('',#25916); +#25916 = CARTESIAN_POINT('',(96.789910655655,104.45042260846, + 120.58811354207)); +#25917 = LINE('',#25918,#25919); +#25918 = CARTESIAN_POINT('',(96.858423750231,104.60726615449, + 120.10539874254)); +#25919 = VECTOR('',#25920,1.); +#25920 = DIRECTION('',(-0.133772922021,-0.306239552933,0.942508430494)); +#25921 = ORIENTED_EDGE('',*,*,#25922,.T.); +#25922 = EDGE_CURVE('',#25915,#15368,#25923,.T.); +#25923 = LINE('',#25924,#25925); +#25924 = CARTESIAN_POINT('',(96.789910655655,104.45042260846, + 120.58811354207)); +#25925 = VECTOR('',#25926,1.); +#25926 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25927 = PLANE('',#25928); +#25928 = AXIS2_PLACEMENT_3D('',#25929,#25930,#25931); +#25929 = CARTESIAN_POINT('',(96.858423750231,104.60726615449, + 120.10539874254)); +#25930 = DIRECTION('',(0.991012010691,-4.133810629184E-02,0.127225609192 + )); +#25931 = DIRECTION('',(0.133772922021,0.306239552933,-0.942508430494)); +#25932 = ADVANCED_FACE('',(#25933),#25951,.T.); +#25933 = FACE_BOUND('',#25934,.T.); +#25934 = EDGE_LOOP('',(#25935,#25936,#25937,#25945)); +#25935 = ORIENTED_EDGE('',*,*,#15377,.T.); +#25936 = ORIENTED_EDGE('',*,*,#25922,.F.); +#25937 = ORIENTED_EDGE('',*,*,#25938,.T.); +#25938 = EDGE_CURVE('',#25915,#25939,#25941,.T.); +#25939 = VERTEX_POINT('',#25940); +#25940 = CARTESIAN_POINT('',(96.587339655655,104.32054214769, + 120.98784449798)); +#25941 = LINE('',#25942,#25943); +#25942 = CARTESIAN_POINT('',(96.789910655655,104.45042260846, + 120.58811354207)); +#25943 = VECTOR('',#25944,1.); +#25944 = DIRECTION('',(-0.43416943666,-0.278372158332,0.856741408907)); +#25945 = ORIENTED_EDGE('',*,*,#25946,.T.); +#25946 = EDGE_CURVE('',#25939,#15378,#25947,.T.); +#25947 = LINE('',#25948,#25949); +#25948 = CARTESIAN_POINT('',(96.587339655655,104.32054214769, + 120.98784449798)); +#25949 = VECTOR('',#25950,1.); +#25950 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25951 = PLANE('',#25952); +#25952 = AXIS2_PLACEMENT_3D('',#25953,#25954,#25955); +#25953 = CARTESIAN_POINT('',(96.789910655655,104.45042260846, + 120.58811354207)); +#25954 = DIRECTION('',(0.900831227406,-0.134165734366,0.412919671911)); +#25955 = DIRECTION('',(0.43416943666,0.278372158332,-0.856741408907)); +#25956 = ADVANCED_FACE('',(#25957),#25975,.T.); +#25957 = FACE_BOUND('',#25958,.T.); +#25958 = EDGE_LOOP('',(#25959,#25960,#25961,#25969)); +#25959 = ORIENTED_EDGE('',*,*,#15385,.T.); +#25960 = ORIENTED_EDGE('',*,*,#25946,.F.); +#25961 = ORIENTED_EDGE('',*,*,#25962,.T.); +#25962 = EDGE_CURVE('',#25939,#25963,#25965,.T.); +#25963 = VERTEX_POINT('',#25964); +#25964 = CARTESIAN_POINT('',(95.804612655655,104.13317371037, + 121.5645052529)); +#25965 = LINE('',#25966,#25967); +#25966 = CARTESIAN_POINT('',(96.587339655655,104.32054214769, + 120.98784449798)); +#25967 = VECTOR('',#25968,1.); +#25968 = DIRECTION('',(-0.790550211724,-0.189241150225,0.582424372605)); +#25969 = ORIENTED_EDGE('',*,*,#25970,.T.); +#25970 = EDGE_CURVE('',#25963,#15386,#25971,.T.); +#25971 = LINE('',#25972,#25973); +#25972 = CARTESIAN_POINT('',(95.804612655655,104.13317371037, + 121.5645052529)); +#25973 = VECTOR('',#25974,1.); +#25974 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25975 = PLANE('',#25976); +#25976 = AXIS2_PLACEMENT_3D('',#25977,#25978,#25979); +#25977 = CARTESIAN_POINT('',(96.587339655655,104.32054214769, + 120.98784449798)); +#25978 = DIRECTION('',(0.61239722627,-0.24429345033,0.751857930319)); +#25979 = DIRECTION('',(0.790550211724,0.189241150225,-0.582424372605)); +#25980 = ADVANCED_FACE('',(#25981),#25999,.T.); +#25981 = FACE_BOUND('',#25982,.T.); +#25982 = EDGE_LOOP('',(#25983,#25984,#25985,#25993)); +#25983 = ORIENTED_EDGE('',*,*,#15393,.T.); +#25984 = ORIENTED_EDGE('',*,*,#25970,.F.); +#25985 = ORIENTED_EDGE('',*,*,#25986,.T.); +#25986 = EDGE_CURVE('',#25963,#25987,#25989,.T.); +#25987 = VERTEX_POINT('',#25988); +#25988 = CARTESIAN_POINT('',(94.558864655655,104.04970945626, + 121.82138181373)); +#25989 = LINE('',#25990,#25991); +#25990 = CARTESIAN_POINT('',(95.804612655655,104.13317371037, + 121.5645052529)); +#25991 = VECTOR('',#25992,1.); +#25992 = DIRECTION('',(-0.977293267984,-6.547797280157E-02, + 0.201520478939)); +#25993 = ORIENTED_EDGE('',*,*,#25994,.T.); +#25994 = EDGE_CURVE('',#25987,#15394,#25995,.T.); +#25995 = LINE('',#25996,#25997); +#25996 = CARTESIAN_POINT('',(94.558864655655,104.04970945626, + 121.82138181373)); +#25997 = VECTOR('',#25998,1.); +#25998 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#25999 = PLANE('',#26000); +#26000 = AXIS2_PLACEMENT_3D('',#26001,#26002,#26003); +#26001 = CARTESIAN_POINT('',(95.804612655655,104.13317371037, + 121.5645052529)); +#26002 = DIRECTION('',(0.211891171015,-0.302000228295,0.929461130847)); +#26003 = DIRECTION('',(0.977293267984,6.547797280157E-02,-0.201520478939 + )); +#26004 = ADVANCED_FACE('',(#26005),#26023,.T.); +#26005 = FACE_BOUND('',#26006,.T.); +#26006 = EDGE_LOOP('',(#26007,#26008,#26009,#26017)); +#26007 = ORIENTED_EDGE('',*,*,#15401,.T.); +#26008 = ORIENTED_EDGE('',*,*,#25994,.F.); +#26009 = ORIENTED_EDGE('',*,*,#26010,.T.); +#26010 = EDGE_CURVE('',#25987,#26011,#26013,.T.); +#26011 = VERTEX_POINT('',#26012); +#26012 = CARTESIAN_POINT('',(93.098142655655,104.02163271618, + 121.90779313445)); +#26013 = LINE('',#26014,#26015); +#26014 = CARTESIAN_POINT('',(94.558864655655,104.04970945626, + 121.82138181373)); +#26015 = VECTOR('',#26016,1.); +#26016 = DIRECTION('',(-0.998071118583,-1.918406334541E-02, + 5.904247593431E-02)); +#26017 = ORIENTED_EDGE('',*,*,#26018,.T.); +#26018 = EDGE_CURVE('',#26011,#15402,#26019,.T.); +#26019 = LINE('',#26020,#26021); +#26020 = CARTESIAN_POINT('',(93.098142655655,104.02163271618, + 121.90779313445)); +#26021 = VECTOR('',#26022,1.); +#26022 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26023 = PLANE('',#26024); +#26024 = AXIS2_PLACEMENT_3D('',#26025,#26026,#26027); +#26025 = CARTESIAN_POINT('',(94.558864655655,104.04970945626, + 121.82138181373)); +#26026 = DIRECTION('',(6.208093307042E-02,-0.308420937237,0.949222041054 + )); +#26027 = DIRECTION('',(0.998071118583,1.918406334541E-02, + -5.904247593431E-02)); +#26028 = ADVANCED_FACE('',(#26029),#26047,.T.); +#26029 = FACE_BOUND('',#26030,.T.); +#26030 = EDGE_LOOP('',(#26031,#26032,#26033,#26041)); +#26031 = ORIENTED_EDGE('',*,*,#15409,.T.); +#26032 = ORIENTED_EDGE('',*,*,#26018,.F.); +#26033 = ORIENTED_EDGE('',*,*,#26034,.T.); +#26034 = EDGE_CURVE('',#26011,#26035,#26037,.T.); +#26035 = VERTEX_POINT('',#26036); +#26036 = CARTESIAN_POINT('',(93.098142655655,103.91003624694, + 122.25125175064)); +#26037 = LINE('',#26038,#26039); +#26038 = CARTESIAN_POINT('',(93.098142655655,104.02163271618, + 121.90779313445)); +#26039 = VECTOR('',#26040,1.); +#26040 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#26041 = ORIENTED_EDGE('',*,*,#26042,.T.); +#26042 = EDGE_CURVE('',#26035,#15410,#26043,.T.); +#26043 = LINE('',#26044,#26045); +#26044 = CARTESIAN_POINT('',(93.098142655655,103.91003624694, + 122.25125175064)); +#26045 = VECTOR('',#26046,1.); +#26046 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26047 = PLANE('',#26048); +#26048 = AXIS2_PLACEMENT_3D('',#26049,#26050,#26051); +#26049 = CARTESIAN_POINT('',(93.098142655655,104.02163271618, + 121.90779313445)); +#26050 = DIRECTION('',(1.,0.,0.)); +#26051 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#26052 = ADVANCED_FACE('',(#26053),#26071,.T.); +#26053 = FACE_BOUND('',#26054,.T.); +#26054 = EDGE_LOOP('',(#26055,#26056,#26057,#26065)); +#26055 = ORIENTED_EDGE('',*,*,#15417,.T.); +#26056 = ORIENTED_EDGE('',*,*,#26042,.F.); +#26057 = ORIENTED_EDGE('',*,*,#26058,.T.); +#26058 = EDGE_CURVE('',#26035,#26059,#26061,.T.); +#26059 = VERTEX_POINT('',#26060); +#26060 = CARTESIAN_POINT('',(93.346190655655,103.71926089726, + 122.83839790366)); +#26061 = LINE('',#26062,#26063); +#26062 = CARTESIAN_POINT('',(93.098142655655,103.91003624694, + 122.25125175064)); +#26063 = VECTOR('',#26064,1.); +#26064 = DIRECTION('',(0.372819654514,-0.286738050531,0.8824889776)); +#26065 = ORIENTED_EDGE('',*,*,#26066,.T.); +#26066 = EDGE_CURVE('',#26059,#15418,#26067,.T.); +#26067 = LINE('',#26068,#26069); +#26068 = CARTESIAN_POINT('',(93.346190655655,103.71926089726, + 122.83839790366)); +#26069 = VECTOR('',#26070,1.); +#26070 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26071 = PLANE('',#26072); +#26072 = AXIS2_PLACEMENT_3D('',#26073,#26074,#26075); +#26073 = CARTESIAN_POINT('',(93.098142655655,103.91003624694, + 122.25125175064)); +#26074 = DIRECTION('',(0.927903823253,0.115207609082,-0.354572561829)); +#26075 = DIRECTION('',(-0.372819654514,0.286738050531,-0.8824889776)); +#26076 = ADVANCED_FACE('',(#26077),#26095,.T.); +#26077 = FACE_BOUND('',#26078,.T.); +#26078 = EDGE_LOOP('',(#26079,#26080,#26081,#26089)); +#26079 = ORIENTED_EDGE('',*,*,#15425,.T.); +#26080 = ORIENTED_EDGE('',*,*,#26066,.F.); +#26081 = ORIENTED_EDGE('',*,*,#26082,.T.); +#26082 = EDGE_CURVE('',#26059,#26083,#26085,.T.); +#26083 = VERTEX_POINT('',#26084); +#26084 = CARTESIAN_POINT('',(94.068282655655,103.64772037289, + 123.05857699774)); +#26085 = LINE('',#26086,#26087); +#26086 = CARTESIAN_POINT('',(93.346190655655,103.71926089726, + 122.83839790366)); +#26087 = VECTOR('',#26088,1.); +#26088 = DIRECTION('',(0.952255355122,-9.43437227354E-02,0.290360122299) + ); +#26089 = ORIENTED_EDGE('',*,*,#26090,.T.); +#26090 = EDGE_CURVE('',#26083,#15426,#26091,.T.); +#26091 = LINE('',#26092,#26093); +#26092 = CARTESIAN_POINT('',(94.068282655655,103.64772037289, + 123.05857699774)); +#26093 = VECTOR('',#26094,1.); +#26094 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26095 = PLANE('',#26096); +#26096 = AXIS2_PLACEMENT_3D('',#26097,#26098,#26099); +#26097 = CARTESIAN_POINT('',(93.346190655655,103.71926089726, + 122.83839790366)); +#26098 = DIRECTION('',(0.305302700022,0.294263087717,-0.905648660666)); +#26099 = DIRECTION('',(-0.952255355122,9.43437227354E-02,-0.290360122299 + )); +#26100 = ADVANCED_FACE('',(#26101),#26119,.T.); +#26101 = FACE_BOUND('',#26102,.T.); +#26102 = EDGE_LOOP('',(#26103,#26104,#26105,#26113)); +#26103 = ORIENTED_EDGE('',*,*,#15433,.T.); +#26104 = ORIENTED_EDGE('',*,*,#26090,.F.); +#26105 = ORIENTED_EDGE('',*,*,#26106,.T.); +#26106 = EDGE_CURVE('',#26083,#26107,#26109,.T.); +#26107 = VERTEX_POINT('',#26108); +#26108 = CARTESIAN_POINT('',(94.784863655655,103.70563417486, + 122.88033664286)); +#26109 = LINE('',#26110,#26111); +#26110 = CARTESIAN_POINT('',(94.068282655655,103.64772037289, + 123.05857699774)); +#26111 = VECTOR('',#26112,1.); +#26112 = DIRECTION('',(0.967459185387,7.818968082252E-02,-0.240643093444 + )); +#26113 = ORIENTED_EDGE('',*,*,#26114,.T.); +#26114 = EDGE_CURVE('',#26107,#15434,#26115,.T.); +#26115 = LINE('',#26116,#26117); +#26116 = CARTESIAN_POINT('',(94.784863655655,103.70563417486, + 122.88033664286)); +#26117 = VECTOR('',#26118,1.); +#26118 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26119 = PLANE('',#26120); +#26120 = AXIS2_PLACEMENT_3D('',#26121,#26122,#26123); +#26121 = CARTESIAN_POINT('',(94.068282655655,103.64772037289, + 123.05857699774)); +#26122 = DIRECTION('',(-0.253027122281,0.298961329649,-0.920108362512)); +#26123 = DIRECTION('',(-0.967459185387,-7.818968082252E-02, + 0.240643093444)); +#26124 = ADVANCED_FACE('',(#26125),#26143,.T.); +#26125 = FACE_BOUND('',#26126,.T.); +#26126 = EDGE_LOOP('',(#26127,#26128,#26129,#26137)); +#26127 = ORIENTED_EDGE('',*,*,#15441,.T.); +#26128 = ORIENTED_EDGE('',*,*,#26114,.F.); +#26129 = ORIENTED_EDGE('',*,*,#26130,.T.); +#26130 = EDGE_CURVE('',#26107,#26131,#26133,.T.); +#26131 = VERTEX_POINT('',#26132); +#26132 = CARTESIAN_POINT('',(95.110080655655,103.85212244497, + 122.42949210553)); +#26133 = LINE('',#26134,#26135); +#26134 = CARTESIAN_POINT('',(94.784863655655,103.70563417486, + 122.88033664286)); +#26135 = VECTOR('',#26136,1.); +#26136 = DIRECTION('',(0.565713963222,0.254815891705,-0.78424267491)); +#26137 = ORIENTED_EDGE('',*,*,#26138,.T.); +#26138 = EDGE_CURVE('',#26131,#15442,#26139,.T.); +#26139 = LINE('',#26140,#26141); +#26140 = CARTESIAN_POINT('',(95.110080655655,103.85212244497, + 122.42949210553)); +#26141 = VECTOR('',#26142,1.); +#26142 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26143 = PLANE('',#26144); +#26144 = AXIS2_PLACEMENT_3D('',#26145,#26146,#26147); +#26145 = CARTESIAN_POINT('',(94.784863655655,103.70563417486, + 122.88033664286)); +#26146 = DIRECTION('',(-0.824601547304,0.174815228591,-0.538025951081)); +#26147 = DIRECTION('',(-0.565713963222,-0.254815891705,0.78424267491)); +#26148 = ADVANCED_FACE('',(#26149),#26167,.T.); +#26149 = FACE_BOUND('',#26150,.T.); +#26150 = EDGE_LOOP('',(#26151,#26152,#26153,#26161)); +#26151 = ORIENTED_EDGE('',*,*,#15449,.T.); +#26152 = ORIENTED_EDGE('',*,*,#26138,.F.); +#26153 = ORIENTED_EDGE('',*,*,#26154,.T.); +#26154 = EDGE_CURVE('',#26131,#26155,#26157,.T.); +#26155 = VERTEX_POINT('',#26156); +#26156 = CARTESIAN_POINT('',(95.121100655655,103.86745277806, + 122.38231019176)); +#26157 = LINE('',#26158,#26159); +#26158 = CARTESIAN_POINT('',(95.110080655655,103.85212244497, + 122.42949210553)); +#26159 = VECTOR('',#26160,1.); +#26160 = DIRECTION('',(0.216847116618,0.301664113209,-0.928426674981)); +#26161 = ORIENTED_EDGE('',*,*,#26162,.T.); +#26162 = EDGE_CURVE('',#26155,#15450,#26163,.T.); +#26163 = LINE('',#26164,#26165); +#26164 = CARTESIAN_POINT('',(95.121100655655,103.86745277806, + 122.38231019176)); +#26165 = VECTOR('',#26166,1.); +#26166 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26167 = PLANE('',#26168); +#26168 = AXIS2_PLACEMENT_3D('',#26169,#26170,#26171); +#26169 = CARTESIAN_POINT('',(95.110080655655,103.85212244497, + 122.42949210553)); +#26170 = DIRECTION('',(-0.976205576718,6.700944421621E-02, + -0.206233863299)); +#26171 = DIRECTION('',(-0.216847116618,-0.301664113209,0.928426674981)); +#26172 = ADVANCED_FACE('',(#26173),#26191,.T.); +#26173 = FACE_BOUND('',#26174,.T.); +#26174 = EDGE_LOOP('',(#26175,#26176,#26177,#26185)); +#26175 = ORIENTED_EDGE('',*,*,#15457,.T.); +#26176 = ORIENTED_EDGE('',*,*,#26162,.F.); +#26177 = ORIENTED_EDGE('',*,*,#26178,.T.); +#26178 = EDGE_CURVE('',#26155,#26179,#26181,.T.); +#26179 = VERTEX_POINT('',#26180); +#26180 = CARTESIAN_POINT('',(96.592846655655,103.86745277806, + 122.38231019176)); +#26181 = LINE('',#26182,#26183); +#26182 = CARTESIAN_POINT('',(95.121100655655,103.86745277806, + 122.38231019176)); +#26183 = VECTOR('',#26184,1.); +#26184 = DIRECTION('',(1.,0.,0.)); +#26185 = ORIENTED_EDGE('',*,*,#26186,.T.); +#26186 = EDGE_CURVE('',#26179,#15458,#26187,.T.); +#26187 = LINE('',#26188,#26189); +#26188 = CARTESIAN_POINT('',(96.592846655655,103.86745277806, + 122.38231019176)); +#26189 = VECTOR('',#26190,1.); +#26190 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26191 = PLANE('',#26192); +#26192 = AXIS2_PLACEMENT_3D('',#26193,#26194,#26195); +#26193 = CARTESIAN_POINT('',(95.121100655655,103.86745277806, + 122.38231019176)); +#26194 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26195 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26196 = ADVANCED_FACE('',(#26197),#26215,.T.); +#26197 = FACE_BOUND('',#26198,.T.); +#26198 = EDGE_LOOP('',(#26199,#26200,#26201,#26209)); +#26199 = ORIENTED_EDGE('',*,*,#15465,.T.); +#26200 = ORIENTED_EDGE('',*,*,#26186,.F.); +#26201 = ORIENTED_EDGE('',*,*,#26202,.T.); +#26202 = EDGE_CURVE('',#26179,#26203,#26205,.T.); +#26203 = VERTEX_POINT('',#26204); +#26204 = CARTESIAN_POINT('',(96.587346655655,103.84701130388, + 122.44522258031)); +#26205 = LINE('',#26206,#26207); +#26206 = CARTESIAN_POINT('',(96.592846655655,103.86745277806, + 122.38231019176)); +#26207 = VECTOR('',#26208,1.); +#26208 = DIRECTION('',(-8.285846242604E-02,-0.307954385473, + 0.947786142372)); +#26209 = ORIENTED_EDGE('',*,*,#26210,.T.); +#26210 = EDGE_CURVE('',#26203,#15466,#26211,.T.); +#26211 = LINE('',#26212,#26213); +#26212 = CARTESIAN_POINT('',(96.587346655655,103.84701130388, + 122.44522258031)); +#26213 = VECTOR('',#26214,1.); +#26214 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26215 = PLANE('',#26216); +#26216 = AXIS2_PLACEMENT_3D('',#26217,#26218,#26219); +#26217 = CARTESIAN_POINT('',(96.592846655655,103.86745277806, + 122.38231019176)); +#26218 = DIRECTION('',(0.996561325361,-2.560467301743E-02, + 7.880308062048E-02)); +#26219 = DIRECTION('',(8.285846242604E-02,0.307954385473,-0.947786142372 + )); +#26220 = ADVANCED_FACE('',(#26221),#26239,.T.); +#26221 = FACE_BOUND('',#26222,.T.); +#26222 = EDGE_LOOP('',(#26223,#26224,#26225,#26233)); +#26223 = ORIENTED_EDGE('',*,*,#15473,.T.); +#26224 = ORIENTED_EDGE('',*,*,#26210,.F.); +#26225 = ORIENTED_EDGE('',*,*,#26226,.T.); +#26226 = EDGE_CURVE('',#26203,#26227,#26229,.T.); +#26227 = VERTEX_POINT('',#26228); +#26228 = CARTESIAN_POINT('',(96.229055655655,103.54722155696, + 123.36788054903)); +#26229 = LINE('',#26230,#26231); +#26230 = CARTESIAN_POINT('',(96.587346655655,103.84701130388, + 122.44522258031)); +#26231 = VECTOR('',#26232,1.); +#26232 = DIRECTION('',(-0.346446803812,-0.289879454513,0.892157224921)); +#26233 = ORIENTED_EDGE('',*,*,#26234,.T.); +#26234 = EDGE_CURVE('',#26227,#15474,#26235,.T.); +#26235 = LINE('',#26236,#26237); +#26236 = CARTESIAN_POINT('',(96.229055655655,103.54722155696, + 123.36788054903)); +#26237 = VECTOR('',#26238,1.); +#26238 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26239 = PLANE('',#26240); +#26240 = AXIS2_PLACEMENT_3D('',#26241,#26242,#26243); +#26241 = CARTESIAN_POINT('',(96.587346655655,103.84701130388, + 122.44522258031)); +#26242 = DIRECTION('',(0.938069620086,-0.107057950025,0.329490490315)); +#26243 = DIRECTION('',(0.346446803812,0.289879454513,-0.892157224921)); +#26244 = ADVANCED_FACE('',(#26245),#26263,.T.); +#26245 = FACE_BOUND('',#26246,.T.); +#26246 = EDGE_LOOP('',(#26247,#26248,#26249,#26257)); +#26247 = ORIENTED_EDGE('',*,*,#15481,.T.); +#26248 = ORIENTED_EDGE('',*,*,#26234,.F.); +#26249 = ORIENTED_EDGE('',*,*,#26250,.T.); +#26250 = EDGE_CURVE('',#26227,#26251,#26253,.T.); +#26251 = VERTEX_POINT('',#26252); +#26252 = CARTESIAN_POINT('',(95.347110655655,103.34281948488, + 123.99696544124)); +#26253 = LINE('',#26254,#26255); +#26254 = CARTESIAN_POINT('',(96.229055655655,103.54722155696, + 123.36788054903)); +#26255 = VECTOR('',#26256,1.); +#26256 = DIRECTION('',(-0.79999989115,-0.185410241474,0.570634047807)); +#26257 = ORIENTED_EDGE('',*,*,#26258,.T.); +#26258 = EDGE_CURVE('',#26251,#15482,#26259,.T.); +#26259 = LINE('',#26260,#26261); +#26260 = CARTESIAN_POINT('',(95.347110655655,103.34281948488, + 123.99696544124)); +#26261 = VECTOR('',#26262,1.); +#26262 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26263 = PLANE('',#26264); +#26264 = AXIS2_PLACEMENT_3D('',#26265,#26266,#26267); +#26265 = CARTESIAN_POINT('',(96.229055655655,103.54722155696, + 123.36788054903)); +#26266 = DIRECTION('',(0.600000145134,-0.247213561863,0.760845109513)); +#26267 = DIRECTION('',(0.79999989115,0.185410241474,-0.570634047807)); +#26268 = ADVANCED_FACE('',(#26269),#26287,.T.); +#26269 = FACE_BOUND('',#26270,.T.); +#26270 = EDGE_LOOP('',(#26271,#26272,#26273,#26281)); +#26271 = ORIENTED_EDGE('',*,*,#15489,.T.); +#26272 = ORIENTED_EDGE('',*,*,#26258,.F.); +#26273 = ORIENTED_EDGE('',*,*,#26274,.T.); +#26274 = EDGE_CURVE('',#26251,#26275,#26277,.T.); +#26275 = VERTEX_POINT('',#26276); +#26276 = CARTESIAN_POINT('',(94.002143655655,103.26787204815, + 124.22762993342)); +#26277 = LINE('',#26278,#26279); +#26278 = CARTESIAN_POINT('',(95.347110655655,103.34281948488, + 123.99696544124)); +#26279 = VECTOR('',#26280,1.); +#26280 = DIRECTION('',(-0.984127021635,-5.483985680615E-02, + 0.168779724473)); +#26281 = ORIENTED_EDGE('',*,*,#26282,.T.); +#26282 = EDGE_CURVE('',#26275,#15490,#26283,.T.); +#26283 = LINE('',#26284,#26285); +#26284 = CARTESIAN_POINT('',(94.002143655655,103.26787204815, + 124.22762993342)); +#26285 = VECTOR('',#26286,1.); +#26286 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26287 = PLANE('',#26288); +#26288 = AXIS2_PLACEMENT_3D('',#26289,#26290,#26291); +#26289 = CARTESIAN_POINT('',(95.347110655655,103.34281948488, + 123.99696544124)); +#26290 = DIRECTION('',(0.177465504501,-0.304111974309,0.935960416788)); +#26291 = DIRECTION('',(0.984127021635,5.483985680615E-02,-0.168779724473 + )); +#26292 = ADVANCED_FACE('',(#26293),#26311,.T.); +#26293 = FACE_BOUND('',#26294,.T.); +#26294 = EDGE_LOOP('',(#26295,#26296,#26297,#26305)); +#26295 = ORIENTED_EDGE('',*,*,#15497,.T.); +#26296 = ORIENTED_EDGE('',*,*,#26282,.F.); +#26297 = ORIENTED_EDGE('',*,*,#26298,.T.); +#26298 = EDGE_CURVE('',#26275,#26299,#26301,.T.); +#26299 = VERTEX_POINT('',#26300); +#26300 = CARTESIAN_POINT('',(92.673713655655,103.34452309557, + 123.99172226667)); +#26301 = LINE('',#26302,#26303); +#26302 = CARTESIAN_POINT('',(94.002143655655,103.26787204815, + 124.22762993342)); +#26303 = VECTOR('',#26304,1.); +#26304 = DIRECTION('',(-0.98301031653,5.672016620178E-02,-0.174566721745 + )); +#26305 = ORIENTED_EDGE('',*,*,#26306,.T.); +#26306 = EDGE_CURVE('',#26299,#15498,#26307,.T.); +#26307 = LINE('',#26308,#26309); +#26308 = CARTESIAN_POINT('',(92.673713655655,103.34452309557, + 123.99172226667)); +#26309 = VECTOR('',#26310,1.); +#26310 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26311 = PLANE('',#26312); +#26312 = AXIS2_PLACEMENT_3D('',#26313,#26314,#26315); +#26313 = CARTESIAN_POINT('',(94.002143655655,103.26787204815, + 124.22762993342)); +#26314 = DIRECTION('',(-0.183550313524,-0.303766893454,0.934898367122)); +#26315 = DIRECTION('',(0.98301031653,-5.672016620178E-02,0.174566721745) + ); +#26316 = ADVANCED_FACE('',(#26317),#26335,.T.); +#26317 = FACE_BOUND('',#26318,.T.); +#26318 = EDGE_LOOP('',(#26319,#26320,#26321,#26329)); +#26319 = ORIENTED_EDGE('',*,*,#15505,.T.); +#26320 = ORIENTED_EDGE('',*,*,#26306,.F.); +#26321 = ORIENTED_EDGE('',*,*,#26322,.T.); +#26322 = EDGE_CURVE('',#26299,#26323,#26325,.T.); +#26323 = VERTEX_POINT('',#26324); +#26324 = CARTESIAN_POINT('',(92.174863655655,103.43522638179, + 123.71256625589)); +#26325 = LINE('',#26326,#26327); +#26326 = CARTESIAN_POINT('',(92.673713655655,103.34452309557, + 123.99172226667)); +#26327 = VECTOR('',#26328,1.); +#26328 = DIRECTION('',(-0.86187318353,0.156709892861,-0.48230345737)); +#26329 = ORIENTED_EDGE('',*,*,#26330,.T.); +#26330 = EDGE_CURVE('',#26323,#15506,#26331,.T.); +#26331 = LINE('',#26332,#26333); +#26332 = CARTESIAN_POINT('',(92.174863655655,103.43522638179, + 123.71256625589)); +#26333 = VECTOR('',#26334,1.); +#26334 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26335 = PLANE('',#26336); +#26336 = AXIS2_PLACEMENT_3D('',#26337,#26338,#26339); +#26337 = CARTESIAN_POINT('',(92.673713655655,103.34452309557, + 123.99172226667)); +#26338 = DIRECTION('',(-0.507123866044,-0.266333460707,0.819690107416)); +#26339 = DIRECTION('',(0.86187318353,-0.156709892861,0.48230345737)); +#26340 = ADVANCED_FACE('',(#26341),#26359,.T.); +#26341 = FACE_BOUND('',#26342,.T.); +#26342 = EDGE_LOOP('',(#26343,#26344,#26345,#26353)); +#26343 = ORIENTED_EDGE('',*,*,#15513,.T.); +#26344 = ORIENTED_EDGE('',*,*,#26330,.F.); +#26345 = ORIENTED_EDGE('',*,*,#26346,.T.); +#26346 = EDGE_CURVE('',#26323,#26347,#26349,.T.); +#26347 = VERTEX_POINT('',#26348); +#26348 = CARTESIAN_POINT('',(91.802792655655,103.55744167602, + 123.33642625687)); +#26349 = LINE('',#26350,#26351); +#26350 = CARTESIAN_POINT('',(92.174863655655,103.43522638179, + 123.71256625589)); +#26351 = VECTOR('',#26352,1.); +#26352 = DIRECTION('',(-0.685206997808,0.225072028838,-0.692700477833)); +#26353 = ORIENTED_EDGE('',*,*,#26354,.T.); +#26354 = EDGE_CURVE('',#26347,#15514,#26355,.T.); +#26355 = LINE('',#26356,#26357); +#26356 = CARTESIAN_POINT('',(91.802792655655,103.55744167602, + 123.33642625687)); +#26357 = VECTOR('',#26358,1.); +#26358 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26359 = PLANE('',#26360); +#26360 = AXIS2_PLACEMENT_3D('',#26361,#26362,#26363); +#26361 = CARTESIAN_POINT('',(92.174863655655,103.43522638179, + 123.71256625589)); +#26362 = DIRECTION('',(-0.728348385153,-0.211740606987,0.651670580277)); +#26363 = DIRECTION('',(0.685206997808,-0.225072028838,0.692700477833)); +#26364 = ADVANCED_FACE('',(#26365),#26383,.T.); +#26365 = FACE_BOUND('',#26366,.T.); +#26366 = EDGE_LOOP('',(#26367,#26368,#26369,#26377)); +#26367 = ORIENTED_EDGE('',*,*,#15521,.T.); +#26368 = ORIENTED_EDGE('',*,*,#26354,.F.); +#26369 = ORIENTED_EDGE('',*,*,#26370,.T.); +#26370 = EDGE_CURVE('',#26347,#26371,#26373,.T.); +#26371 = VERTEX_POINT('',#26372); +#26372 = CARTESIAN_POINT('',(91.567147655655,103.70691072406, + 122.87640782839)); +#26373 = LINE('',#26374,#26375); +#26374 = CARTESIAN_POINT('',(91.802792655655,103.55744167602, + 123.33642625687)); +#26375 = VECTOR('',#26376,1.); +#26376 = DIRECTION('',(-0.437969692885,0.277803106653,-0.854990047923)); +#26377 = ORIENTED_EDGE('',*,*,#26378,.T.); +#26378 = EDGE_CURVE('',#26371,#15522,#26379,.T.); +#26379 = LINE('',#26380,#26381); +#26380 = CARTESIAN_POINT('',(91.567147655655,103.70691072406, + 122.87640782839)); +#26381 = VECTOR('',#26382,1.); +#26382 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26383 = PLANE('',#26384); +#26384 = AXIS2_PLACEMENT_3D('',#26385,#26386,#26387); +#26385 = CARTESIAN_POINT('',(91.802792655655,103.55744167602, + 123.33642625687)); +#26386 = DIRECTION('',(-0.898989737491,-0.135340078123,0.416533930358)); +#26387 = DIRECTION('',(0.437969692885,-0.277803106653,0.854990047923)); +#26388 = ADVANCED_FACE('',(#26389),#26407,.T.); +#26389 = FACE_BOUND('',#26390,.T.); +#26390 = EDGE_LOOP('',(#26391,#26392,#26393,#26401)); +#26391 = ORIENTED_EDGE('',*,*,#15529,.T.); +#26392 = ORIENTED_EDGE('',*,*,#26378,.F.); +#26393 = ORIENTED_EDGE('',*,*,#26394,.T.); +#26394 = EDGE_CURVE('',#26371,#26395,#26397,.T.); +#26395 = VERTEX_POINT('',#26396); +#26396 = CARTESIAN_POINT('',(91.488599655655,103.87937496272, + 122.3456174803)); +#26397 = LINE('',#26398,#26399); +#26398 = CARTESIAN_POINT('',(91.567147655655,103.70691072406, + 122.87640782839)); +#26399 = VECTOR('',#26400,1.); +#26400 = DIRECTION('',(-0.139366780994,0.306001244831,-0.941774993572)); +#26401 = ORIENTED_EDGE('',*,*,#26402,.T.); +#26402 = EDGE_CURVE('',#26395,#15530,#26403,.T.); +#26403 = LINE('',#26404,#26405); +#26404 = CARTESIAN_POINT('',(91.488599655655,103.87937496272, + 122.3456174803)); +#26405 = VECTOR('',#26406,1.); +#26406 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26407 = PLANE('',#26408); +#26408 = AXIS2_PLACEMENT_3D('',#26409,#26410,#26411); +#26409 = CARTESIAN_POINT('',(91.567147655655,103.70691072406, + 122.87640782839)); +#26410 = DIRECTION('',(-0.990240829473,-4.306670377848E-02, + 0.132545685219)); +#26411 = DIRECTION('',(0.139366780994,-0.306001244831,0.941774993572)); +#26412 = ADVANCED_FACE('',(#26413),#26431,.T.); +#26413 = FACE_BOUND('',#26414,.T.); +#26414 = EDGE_LOOP('',(#26415,#26416,#26417,#26425)); +#26415 = ORIENTED_EDGE('',*,*,#15537,.T.); +#26416 = ORIENTED_EDGE('',*,*,#26402,.F.); +#26417 = ORIENTED_EDGE('',*,*,#26418,.T.); +#26418 = EDGE_CURVE('',#26395,#26419,#26421,.T.); +#26419 = VERTEX_POINT('',#26420); +#26420 = CARTESIAN_POINT('',(91.488599655655,105.13133784736, + 118.49247192109)); +#26421 = LINE('',#26422,#26423); +#26422 = CARTESIAN_POINT('',(91.488599655655,103.87937496272, + 122.3456174803)); +#26423 = VECTOR('',#26424,1.); +#26424 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26425 = ORIENTED_EDGE('',*,*,#26426,.T.); +#26426 = EDGE_CURVE('',#26419,#15538,#26427,.T.); +#26427 = LINE('',#26428,#26429); +#26428 = CARTESIAN_POINT('',(91.488599655655,105.13133784736, + 118.49247192109)); +#26429 = VECTOR('',#26430,1.); +#26430 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26431 = PLANE('',#26432); +#26432 = AXIS2_PLACEMENT_3D('',#26433,#26434,#26435); +#26433 = CARTESIAN_POINT('',(91.488599655655,103.87937496272, + 122.3456174803)); +#26434 = DIRECTION('',(-1.,0.,0.)); +#26435 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#26436 = ADVANCED_FACE('',(#26437),#26455,.T.); +#26437 = FACE_BOUND('',#26438,.T.); +#26438 = EDGE_LOOP('',(#26439,#26440,#26441,#26449)); +#26439 = ORIENTED_EDGE('',*,*,#15545,.T.); +#26440 = ORIENTED_EDGE('',*,*,#26426,.F.); +#26441 = ORIENTED_EDGE('',*,*,#26442,.T.); +#26442 = EDGE_CURVE('',#26419,#26443,#26445,.T.); +#26443 = VERTEX_POINT('',#26444); +#26444 = CARTESIAN_POINT('',(93.098149655655,105.13133784736, + 118.49247192109)); +#26445 = LINE('',#26446,#26447); +#26446 = CARTESIAN_POINT('',(91.488599655655,105.13133784736, + 118.49247192109)); +#26447 = VECTOR('',#26448,1.); +#26448 = DIRECTION('',(1.,0.,0.)); +#26449 = ORIENTED_EDGE('',*,*,#26450,.T.); +#26450 = EDGE_CURVE('',#26443,#15546,#26451,.T.); +#26451 = LINE('',#26452,#26453); +#26452 = CARTESIAN_POINT('',(93.098149655655,105.13133784736, + 118.49247192109)); +#26453 = VECTOR('',#26454,1.); +#26454 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26455 = PLANE('',#26456); +#26456 = AXIS2_PLACEMENT_3D('',#26457,#26458,#26459); +#26457 = CARTESIAN_POINT('',(91.488599655655,105.13133784736, + 118.49247192109)); +#26458 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26459 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26460 = ADVANCED_FACE('',(#26461),#26479,.T.); +#26461 = FACE_BOUND('',#26462,.T.); +#26462 = EDGE_LOOP('',(#26463,#26464,#26465,#26473)); +#26463 = ORIENTED_EDGE('',*,*,#15553,.T.); +#26464 = ORIENTED_EDGE('',*,*,#26450,.F.); +#26465 = ORIENTED_EDGE('',*,*,#26466,.T.); +#26466 = EDGE_CURVE('',#26443,#26467,#26469,.T.); +#26467 = VERTEX_POINT('',#26468); +#26468 = CARTESIAN_POINT('',(93.098149655655,104.85880154524, + 119.33125241141)); +#26469 = LINE('',#26470,#26471); +#26470 = CARTESIAN_POINT('',(93.098149655655,105.13133784736, + 118.49247192109)); +#26471 = VECTOR('',#26472,1.); +#26472 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#26473 = ORIENTED_EDGE('',*,*,#26474,.T.); +#26474 = EDGE_CURVE('',#26467,#15554,#26475,.T.); +#26475 = LINE('',#26476,#26477); +#26476 = CARTESIAN_POINT('',(93.098149655655,104.85880154524, + 119.33125241141)); +#26477 = VECTOR('',#26478,1.); +#26478 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26479 = PLANE('',#26480); +#26480 = AXIS2_PLACEMENT_3D('',#26481,#26482,#26483); +#26481 = CARTESIAN_POINT('',(93.098149655655,105.13133784736, + 118.49247192109)); +#26482 = DIRECTION('',(1.,0.,0.)); +#26483 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#26484 = ADVANCED_FACE('',(#26485),#26503,.T.); +#26485 = FACE_BOUND('',#26486,.T.); +#26486 = EDGE_LOOP('',(#26487,#26488,#26489,#26497)); +#26487 = ORIENTED_EDGE('',*,*,#15561,.T.); +#26488 = ORIENTED_EDGE('',*,*,#26474,.F.); +#26489 = ORIENTED_EDGE('',*,*,#26490,.T.); +#26490 = EDGE_CURVE('',#26467,#26491,#26493,.T.); +#26491 = VERTEX_POINT('',#26492); +#26492 = CARTESIAN_POINT('',(93.131219655655,104.85880154524, + 119.33125241141)); +#26493 = LINE('',#26494,#26495); +#26494 = CARTESIAN_POINT('',(93.098149655655,104.85880154524, + 119.33125241141)); +#26495 = VECTOR('',#26496,1.); +#26496 = DIRECTION('',(1.,0.,0.)); +#26497 = ORIENTED_EDGE('',*,*,#26498,.T.); +#26498 = EDGE_CURVE('',#26491,#15562,#26499,.T.); +#26499 = LINE('',#26500,#26501); +#26500 = CARTESIAN_POINT('',(93.131219655655,104.85880154524, + 119.33125241141)); +#26501 = VECTOR('',#26502,1.); +#26502 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26503 = PLANE('',#26504); +#26504 = AXIS2_PLACEMENT_3D('',#26505,#26506,#26507); +#26505 = CARTESIAN_POINT('',(93.098149655655,104.85880154524, + 119.33125241141)); +#26506 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26507 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26508 = ADVANCED_FACE('',(#26509),#26527,.T.); +#26509 = FACE_BOUND('',#26510,.T.); +#26510 = EDGE_LOOP('',(#26511,#26512,#26513,#26521)); +#26511 = ORIENTED_EDGE('',*,*,#15569,.T.); +#26512 = ORIENTED_EDGE('',*,*,#26498,.F.); +#26513 = ORIENTED_EDGE('',*,*,#26514,.T.); +#26514 = EDGE_CURVE('',#26491,#26515,#26517,.T.); +#26515 = VERTEX_POINT('',#26516); +#26516 = CARTESIAN_POINT('',(93.561168655655,105.02061983943, + 118.83322691137)); +#26517 = LINE('',#26518,#26519); +#26518 = CARTESIAN_POINT('',(93.131219655655,104.85880154524, + 119.33125241141)); +#26519 = VECTOR('',#26520,1.); +#26520 = DIRECTION('',(0.634566520163,0.238829423589,-0.735041385172)); +#26521 = ORIENTED_EDGE('',*,*,#26522,.T.); +#26522 = EDGE_CURVE('',#26515,#15570,#26523,.T.); +#26523 = LINE('',#26524,#26525); +#26524 = CARTESIAN_POINT('',(93.561168655655,105.02061983943, + 118.83322691137)); +#26525 = VECTOR('',#26526,1.); +#26526 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26527 = PLANE('',#26528); +#26528 = AXIS2_PLACEMENT_3D('',#26529,#26530,#26531); +#26529 = CARTESIAN_POINT('',(93.131219655655,104.85880154524, + 119.33125241141)); +#26530 = DIRECTION('',(-0.77286824976,0.196091838792,-0.603508624024)); +#26531 = DIRECTION('',(-0.634566520163,-0.238829423589,0.735041385172)); +#26532 = ADVANCED_FACE('',(#26533),#26551,.T.); +#26533 = FACE_BOUND('',#26534,.T.); +#26534 = EDGE_LOOP('',(#26535,#26536,#26537,#26545)); +#26535 = ORIENTED_EDGE('',*,*,#15577,.T.); +#26536 = ORIENTED_EDGE('',*,*,#26522,.F.); +#26537 = ORIENTED_EDGE('',*,*,#26538,.T.); +#26538 = EDGE_CURVE('',#26515,#26539,#26541,.T.); +#26539 = VERTEX_POINT('',#26540); +#26540 = CARTESIAN_POINT('',(94.150969655655,105.12452433165, + 118.51344176622)); +#26541 = LINE('',#26542,#26543); +#26542 = CARTESIAN_POINT('',(93.561168655655,105.02061983943, + 118.83322691137)); +#26543 = VECTOR('',#26544,1.); +#26544 = DIRECTION('',(0.868742142547,0.153045198624,-0.471024688249)); +#26545 = ORIENTED_EDGE('',*,*,#26546,.T.); +#26546 = EDGE_CURVE('',#26539,#15578,#26547,.T.); +#26547 = LINE('',#26548,#26549); +#26548 = CARTESIAN_POINT('',(94.150969655655,105.12452433165, + 118.51344176622)); +#26549 = VECTOR('',#26550,1.); +#26550 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26551 = PLANE('',#26552); +#26552 = AXIS2_PLACEMENT_3D('',#26553,#26554,#26555); +#26553 = CARTESIAN_POINT('',(93.561168655655,105.02061983943, + 118.83322691137)); +#26554 = DIRECTION('',(-0.495264666378,0.268456085777,-0.82622287565)); +#26555 = DIRECTION('',(-0.868742142547,-0.153045198624,0.471024688249)); +#26556 = ADVANCED_FACE('',(#26557),#26575,.T.); +#26557 = FACE_BOUND('',#26558,.T.); +#26558 = EDGE_LOOP('',(#26559,#26560,#26561,#26569)); +#26559 = ORIENTED_EDGE('',*,*,#15585,.T.); +#26560 = ORIENTED_EDGE('',*,*,#26546,.F.); +#26561 = ORIENTED_EDGE('',*,*,#26562,.T.); +#26562 = EDGE_CURVE('',#26539,#26563,#26565,.T.); +#26563 = VERTEX_POINT('',#26564); +#26564 = CARTESIAN_POINT('',(94.873060023222,105.16029383716, + 118.40335454798)); +#26565 = LINE('',#26566,#26567); +#26566 = CARTESIAN_POINT('',(94.150969655655,105.12452433165, + 118.51344176622)); +#26567 = VECTOR('',#26568,1.); +#26568 = DIRECTION('',(0.9873940646,4.891160306285E-02,-0.150534435523) + ); +#26569 = ORIENTED_EDGE('',*,*,#26570,.T.); +#26570 = EDGE_CURVE('',#26563,#15586,#26571,.T.); +#26571 = LINE('',#26572,#26573); +#26572 = CARTESIAN_POINT('',(94.873060023222,105.16029383716, + 118.40335454798)); +#26573 = VECTOR('',#26574,1.); +#26574 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26575 = PLANE('',#26576); +#26576 = AXIS2_PLACEMENT_3D('',#26577,#26578,#26579); +#26577 = CARTESIAN_POINT('',(94.150969655655,105.12452433165, + 118.51344176622)); +#26578 = DIRECTION('',(-0.1582812724,0.305121546106,-0.939067559289)); +#26579 = DIRECTION('',(-0.9873940646,-4.891160306284E-02,0.150534435523) + ); +#26580 = ADVANCED_FACE('',(#26581),#26599,.T.); +#26581 = FACE_BOUND('',#26582,.T.); +#26582 = EDGE_LOOP('',(#26583,#26584,#26585,#26593)); +#26583 = ORIENTED_EDGE('',*,*,#15593,.T.); +#26584 = ORIENTED_EDGE('',*,*,#26570,.F.); +#26585 = ORIENTED_EDGE('',*,*,#26586,.T.); +#26586 = EDGE_CURVE('',#26563,#26587,#26589,.T.); +#26587 = VERTEX_POINT('',#26588); +#26588 = CARTESIAN_POINT('',(95.909343655655,105.09045551704, + 118.61829479609)); +#26589 = LINE('',#26590,#26591); +#26590 = CARTESIAN_POINT('',(94.873060023222,105.16029383716, + 118.40335454798)); +#26591 = VECTOR('',#26592,1.); +#26592 = DIRECTION('',(0.977034744709,-6.58453565571E-02,0.202651169875) + ); +#26593 = ORIENTED_EDGE('',*,*,#26594,.T.); +#26594 = EDGE_CURVE('',#26587,#15594,#26595,.T.); +#26595 = LINE('',#26596,#26597); +#26596 = CARTESIAN_POINT('',(95.909343655655,105.09045551704, + 118.61829479609)); +#26597 = VECTOR('',#26598,1.); +#26598 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26599 = PLANE('',#26600); +#26600 = AXIS2_PLACEMENT_3D('',#26601,#26602,#26603); +#26601 = CARTESIAN_POINT('',(94.873060023222,105.16029383716, + 118.40335454798)); +#26602 = DIRECTION('',(0.213080049821,0.30192034021,-0.929215260602)); +#26603 = DIRECTION('',(-0.977034744709,6.58453565571E-02,-0.202651169875 + )); +#26604 = ADVANCED_FACE('',(#26605),#26623,.T.); +#26605 = FACE_BOUND('',#26606,.T.); +#26606 = EDGE_LOOP('',(#26607,#26608,#26609,#26617)); +#26607 = ORIENTED_EDGE('',*,*,#15601,.T.); +#26608 = ORIENTED_EDGE('',*,*,#26594,.F.); +#26609 = ORIENTED_EDGE('',*,*,#26610,.T.); +#26610 = EDGE_CURVE('',#26587,#26611,#26613,.T.); +#26611 = VERTEX_POINT('',#26612); +#26612 = CARTESIAN_POINT('',(96.609387655655,104.89457026234, + 119.22116761965)); +#26613 = LINE('',#26614,#26615); +#26614 = CARTESIAN_POINT('',(95.909343655655,105.09045551704, + 118.61829479609)); +#26615 = VECTOR('',#26616,1.); +#26616 = DIRECTION('',(0.741259222981,-0.207418036141,0.638367075145)); +#26617 = ORIENTED_EDGE('',*,*,#26618,.T.); +#26618 = EDGE_CURVE('',#26611,#15602,#26619,.T.); +#26619 = LINE('',#26620,#26621); +#26620 = CARTESIAN_POINT('',(96.609387655655,104.89457026234, + 119.22116761965)); +#26621 = VECTOR('',#26622,1.); +#26622 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26623 = PLANE('',#26624); +#26624 = AXIS2_PLACEMENT_3D('',#26625,#26626,#26627); +#26625 = CARTESIAN_POINT('',(95.909343655655,105.09045551704, + 118.61829479609)); +#26626 = DIRECTION('',(0.671218864713,0.229061697138,-0.70497941428)); +#26627 = DIRECTION('',(-0.741259222981,0.207418036141,-0.638367075145)); +#26628 = ADVANCED_FACE('',(#26629),#26640,.T.); +#26629 = FACE_BOUND('',#26630,.T.); +#26630 = EDGE_LOOP('',(#26631,#26632,#26633,#26639)); +#26631 = ORIENTED_EDGE('',*,*,#15609,.T.); +#26632 = ORIENTED_EDGE('',*,*,#26618,.F.); +#26633 = ORIENTED_EDGE('',*,*,#26634,.T.); +#26634 = EDGE_CURVE('',#26611,#25907,#26635,.T.); +#26635 = LINE('',#26636,#26637); +#26636 = CARTESIAN_POINT('',(96.609387655655,104.89457026234, + 119.22116761965)); +#26637 = VECTOR('',#26638,1.); +#26638 = DIRECTION('',(0.258735859288,-0.298494382299,0.918671246341)); +#26639 = ORIENTED_EDGE('',*,*,#25906,.T.); +#26640 = PLANE('',#26641); +#26641 = AXIS2_PLACEMENT_3D('',#26642,#26643,#26644); +#26642 = CARTESIAN_POINT('',(96.609387655655,104.89457026234, + 119.22116761965)); +#26643 = DIRECTION('',(0.965948112022,7.995377757421E-02,-0.246072424975 + )); +#26644 = DIRECTION('',(-0.258735859288,0.298494382299,-0.918671246341)); +#26645 = ADVANCED_FACE('',(#26646),#26662,.T.); +#26646 = FACE_BOUND('',#26647,.T.); +#26647 = EDGE_LOOP('',(#26648,#26654,#26655,#26661)); +#26648 = ORIENTED_EDGE('',*,*,#26649,.T.); +#26649 = EDGE_CURVE('',#25651,#25875,#26650,.T.); +#26650 = LINE('',#26651,#26652); +#26651 = CARTESIAN_POINT('',(95.021886655655,103.47339012362, + 120.35904235846)); +#26652 = VECTOR('',#26653,1.); +#26653 = DIRECTION('',(-0.435302653701,-0.278203110516,0.856221133225)); +#26654 = ORIENTED_EDGE('',*,*,#25891,.F.); +#26655 = ORIENTED_EDGE('',*,*,#26656,.T.); +#26656 = EDGE_CURVE('',#25884,#25659,#26657,.T.); +#26657 = LINE('',#26658,#26659); +#26658 = CARTESIAN_POINT('',(95.021886655655,104.42444663991, + 120.66805935283)); +#26659 = VECTOR('',#26660,1.); +#26660 = DIRECTION('',(0.435302653701,0.278203110516,-0.856221133225)); +#26661 = ORIENTED_EDGE('',*,*,#25658,.T.); +#26662 = PLANE('',#26663); +#26663 = AXIS2_PLACEMENT_3D('',#26664,#26665,#26666); +#26664 = CARTESIAN_POINT('',(95.021886655655,104.42444663991, + 120.66805935283)); +#26665 = DIRECTION('',(-0.90028417718,0.13451591769,-0.413997425363)); +#26666 = DIRECTION('',(-0.435302653701,-0.278203110516,0.856221133225)); +#26667 = ADVANCED_FACE('',(#26668,#26701),#26712,.F.); +#26668 = FACE_BOUND('',#26669,.T.); +#26669 = EDGE_LOOP('',(#26670,#26671,#26672,#26673,#26674,#26675,#26676, + #26677,#26678,#26679,#26680,#26681,#26682,#26683,#26684,#26685, + #26686,#26687,#26688,#26689,#26690,#26691,#26692,#26693,#26694, + #26695,#26696,#26697,#26698,#26699,#26700)); +#26670 = ORIENTED_EDGE('',*,*,#25914,.F.); +#26671 = ORIENTED_EDGE('',*,*,#26634,.F.); +#26672 = ORIENTED_EDGE('',*,*,#26610,.F.); +#26673 = ORIENTED_EDGE('',*,*,#26586,.F.); +#26674 = ORIENTED_EDGE('',*,*,#26562,.F.); +#26675 = ORIENTED_EDGE('',*,*,#26538,.F.); +#26676 = ORIENTED_EDGE('',*,*,#26514,.F.); +#26677 = ORIENTED_EDGE('',*,*,#26490,.F.); +#26678 = ORIENTED_EDGE('',*,*,#26466,.F.); +#26679 = ORIENTED_EDGE('',*,*,#26442,.F.); +#26680 = ORIENTED_EDGE('',*,*,#26418,.F.); +#26681 = ORIENTED_EDGE('',*,*,#26394,.F.); +#26682 = ORIENTED_EDGE('',*,*,#26370,.F.); +#26683 = ORIENTED_EDGE('',*,*,#26346,.F.); +#26684 = ORIENTED_EDGE('',*,*,#26322,.F.); +#26685 = ORIENTED_EDGE('',*,*,#26298,.F.); +#26686 = ORIENTED_EDGE('',*,*,#26274,.F.); +#26687 = ORIENTED_EDGE('',*,*,#26250,.F.); +#26688 = ORIENTED_EDGE('',*,*,#26226,.F.); +#26689 = ORIENTED_EDGE('',*,*,#26202,.F.); +#26690 = ORIENTED_EDGE('',*,*,#26178,.F.); +#26691 = ORIENTED_EDGE('',*,*,#26154,.F.); +#26692 = ORIENTED_EDGE('',*,*,#26130,.F.); +#26693 = ORIENTED_EDGE('',*,*,#26106,.F.); +#26694 = ORIENTED_EDGE('',*,*,#26082,.F.); +#26695 = ORIENTED_EDGE('',*,*,#26058,.F.); +#26696 = ORIENTED_EDGE('',*,*,#26034,.F.); +#26697 = ORIENTED_EDGE('',*,*,#26010,.F.); +#26698 = ORIENTED_EDGE('',*,*,#25986,.F.); +#26699 = ORIENTED_EDGE('',*,*,#25962,.F.); +#26700 = ORIENTED_EDGE('',*,*,#25938,.F.); +#26701 = FACE_BOUND('',#26702,.T.); +#26702 = EDGE_LOOP('',(#26703,#26704,#26705,#26706,#26707,#26708,#26709, + #26710,#26711)); +#26703 = ORIENTED_EDGE('',*,*,#25666,.F.); +#26704 = ORIENTED_EDGE('',*,*,#26656,.F.); +#26705 = ORIENTED_EDGE('',*,*,#25883,.F.); +#26706 = ORIENTED_EDGE('',*,*,#25852,.F.); +#26707 = ORIENTED_EDGE('',*,*,#25821,.F.); +#26708 = ORIENTED_EDGE('',*,*,#25790,.F.); +#26709 = ORIENTED_EDGE('',*,*,#25759,.F.); +#26710 = ORIENTED_EDGE('',*,*,#25728,.F.); +#26711 = ORIENTED_EDGE('',*,*,#25697,.F.); +#26712 = PLANE('',#26713); +#26713 = AXIS2_PLACEMENT_3D('',#26714,#26715,#26716); +#26714 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26715 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26716 = DIRECTION('',(1.,0.,0.)); +#26717 = ADVANCED_FACE('',(#26718),#26740,.F.); +#26718 = FACE_BOUND('',#26719,.T.); +#26719 = EDGE_LOOP('',(#26720,#26721,#26722,#26723,#26724,#26725,#26726, + #26727,#26728,#26729,#26730,#26731,#26732,#26733,#26734,#26735, + #26736,#26737,#26738,#26739)); +#26720 = ORIENTED_EDGE('',*,*,#20215,.F.); +#26721 = ORIENTED_EDGE('',*,*,#20255,.F.); +#26722 = ORIENTED_EDGE('',*,*,#20286,.F.); +#26723 = ORIENTED_EDGE('',*,*,#20317,.F.); +#26724 = ORIENTED_EDGE('',*,*,#20348,.F.); +#26725 = ORIENTED_EDGE('',*,*,#20379,.F.); +#26726 = ORIENTED_EDGE('',*,*,#20410,.F.); +#26727 = ORIENTED_EDGE('',*,*,#20441,.F.); +#26728 = ORIENTED_EDGE('',*,*,#20472,.F.); +#26729 = ORIENTED_EDGE('',*,*,#20503,.F.); +#26730 = ORIENTED_EDGE('',*,*,#20534,.F.); +#26731 = ORIENTED_EDGE('',*,*,#20565,.F.); +#26732 = ORIENTED_EDGE('',*,*,#20596,.F.); +#26733 = ORIENTED_EDGE('',*,*,#20627,.F.); +#26734 = ORIENTED_EDGE('',*,*,#20658,.F.); +#26735 = ORIENTED_EDGE('',*,*,#20689,.F.); +#26736 = ORIENTED_EDGE('',*,*,#20720,.F.); +#26737 = ORIENTED_EDGE('',*,*,#20751,.F.); +#26738 = ORIENTED_EDGE('',*,*,#20782,.F.); +#26739 = ORIENTED_EDGE('',*,*,#21389,.F.); +#26740 = PLANE('',#26741); +#26741 = AXIS2_PLACEMENT_3D('',#26742,#26743,#26744); +#26742 = CARTESIAN_POINT('',(75.,104.78156068633,116.33290735378)); +#26743 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26744 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26745 = ADVANCED_FACE('',(#26746),#26760,.F.); +#26746 = FACE_BOUND('',#26747,.T.); +#26747 = EDGE_LOOP('',(#26748,#26749,#26750,#26751,#26752,#26753,#26754, + #26755,#26756,#26757,#26758,#26759)); +#26748 = ORIENTED_EDGE('',*,*,#22930,.F.); +#26749 = ORIENTED_EDGE('',*,*,#22970,.F.); +#26750 = ORIENTED_EDGE('',*,*,#23001,.F.); +#26751 = ORIENTED_EDGE('',*,*,#23032,.F.); +#26752 = ORIENTED_EDGE('',*,*,#23063,.F.); +#26753 = ORIENTED_EDGE('',*,*,#23094,.F.); +#26754 = ORIENTED_EDGE('',*,*,#23125,.F.); +#26755 = ORIENTED_EDGE('',*,*,#23156,.F.); +#26756 = ORIENTED_EDGE('',*,*,#23187,.F.); +#26757 = ORIENTED_EDGE('',*,*,#23218,.F.); +#26758 = ORIENTED_EDGE('',*,*,#23249,.F.); +#26759 = ORIENTED_EDGE('',*,*,#23856,.F.); +#26760 = PLANE('',#26761); +#26761 = AXIS2_PLACEMENT_3D('',#26762,#26763,#26764); +#26762 = CARTESIAN_POINT('',(75.,104.78156068633,116.33290735378)); +#26763 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26764 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26765 = ADVANCED_FACE('',(#26766),#26777,.F.); +#26766 = FACE_BOUND('',#26767,.T.); +#26767 = EDGE_LOOP('',(#26768,#26769,#26770,#26771,#26772,#26773,#26774, + #26775,#26776)); +#26768 = ORIENTED_EDGE('',*,*,#25648,.F.); +#26769 = ORIENTED_EDGE('',*,*,#25688,.F.); +#26770 = ORIENTED_EDGE('',*,*,#25719,.F.); +#26771 = ORIENTED_EDGE('',*,*,#25750,.F.); +#26772 = ORIENTED_EDGE('',*,*,#25781,.F.); +#26773 = ORIENTED_EDGE('',*,*,#25812,.F.); +#26774 = ORIENTED_EDGE('',*,*,#25843,.F.); +#26775 = ORIENTED_EDGE('',*,*,#25874,.F.); +#26776 = ORIENTED_EDGE('',*,*,#26649,.F.); +#26777 = PLANE('',#26778); +#26778 = AXIS2_PLACEMENT_3D('',#26779,#26780,#26781); +#26779 = CARTESIAN_POINT('',(75.,104.78156068633,116.33290735378)); +#26780 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26781 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26782 = ADVANCED_FACE('',(#26783),#26801,.T.); +#26783 = FACE_BOUND('',#26784,.T.); +#26784 = EDGE_LOOP('',(#26785,#26794,#26799,#26800)); +#26785 = ORIENTED_EDGE('',*,*,#26786,.T.); +#26786 = EDGE_CURVE('',#26787,#26787,#26789,.T.); +#26787 = VERTEX_POINT('',#26788); +#26788 = CARTESIAN_POINT('',(114.68682887409,102.91321099249, + 125.31916442571)); +#26789 = CIRCLE('',#26790,1.6460273035); +#26790 = AXIS2_PLACEMENT_3D('',#26791,#26792,#26793); +#26791 = CARTESIAN_POINT('',(116.27676915732,102.78156257908, + 125.72433658034)); +#26792 = DIRECTION('',(8.326672684689E-17,-0.951056516295, + -0.309016994375)); +#26793 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#26794 = ORIENTED_EDGE('',*,*,#26795,.F.); +#26795 = EDGE_CURVE('',#15357,#26787,#26796,.T.); +#26796 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26797,#26798),.UNSPECIFIED., + .F.,.F.,(2,2),(-2.84217094304E-14,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26797 = CARTESIAN_POINT('',(114.68682887409,102.34257708271, + 125.13375422909)); +#26798 = CARTESIAN_POINT('',(114.68682887409,102.91321099249, + 125.31916442571)); +#26799 = ORIENTED_EDGE('',*,*,#15356,.T.); +#26800 = ORIENTED_EDGE('',*,*,#26795,.T.); +#26801 = CYLINDRICAL_SURFACE('',#26802,1.6460273035); +#26802 = AXIS2_PLACEMENT_3D('',#26803,#26804,#26805); +#26803 = CARTESIAN_POINT('',(116.27676915732,102.21092866931, + 125.53892638371)); +#26804 = DIRECTION('',(-9.71445146547E-17,0.951056516295,0.309016994375) + ); +#26805 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#26806 = ADVANCED_FACE('',(#26807),#26810,.T.); +#26807 = FACE_BOUND('',#26808,.T.); +#26808 = EDGE_LOOP('',(#26809)); +#26809 = ORIENTED_EDGE('',*,*,#26786,.F.); +#26810 = PLANE('',#26811); +#26811 = AXIS2_PLACEMENT_3D('',#26812,#26813,#26814); +#26812 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26813 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26814 = DIRECTION('',(-1.,0.,0.)); +#26815 = ADVANCED_FACE('',(#26816),#26834,.T.); +#26816 = FACE_BOUND('',#26817,.T.); +#26817 = EDGE_LOOP('',(#26818,#26827,#26832,#26833)); +#26818 = ORIENTED_EDGE('',*,*,#26819,.T.); +#26819 = EDGE_CURVE('',#26820,#26820,#26822,.T.); +#26820 = VERTEX_POINT('',#26821); +#26821 = CARTESIAN_POINT('',(112.23645670428,103.29024386593, + 124.15877655815)); +#26822 = CIRCLE('',#26823,1.645754600653); +#26823 = AXIS2_PLACEMENT_3D('',#26824,#26825,#26826); +#26824 = CARTESIAN_POINT('',(112.23645670428,102.78167772575, + 125.72398219533)); +#26825 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26826 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26827 = ORIENTED_EDGE('',*,*,#26828,.F.); +#26828 = EDGE_CURVE('',#15346,#26820,#26829,.T.); +#26829 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26830,#26831),.UNSPECIFIED., + .F.,.F.,(2,2),(0.,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26830 = CARTESIAN_POINT('',(112.23645670428,102.71960995615, + 123.97336636153)); +#26831 = CARTESIAN_POINT('',(112.23645670428,103.29024386593, + 124.15877655815)); +#26832 = ORIENTED_EDGE('',*,*,#15345,.T.); +#26833 = ORIENTED_EDGE('',*,*,#26828,.T.); +#26834 = CYLINDRICAL_SURFACE('',#26835,1.645754600653); +#26835 = AXIS2_PLACEMENT_3D('',#26836,#26837,#26838); +#26836 = CARTESIAN_POINT('',(112.23645670428,102.21104381598, + 125.5385719987)); +#26837 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26838 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26839 = ADVANCED_FACE('',(#26840),#26843,.T.); +#26840 = FACE_BOUND('',#26841,.T.); +#26841 = EDGE_LOOP('',(#26842)); +#26842 = ORIENTED_EDGE('',*,*,#26819,.F.); +#26843 = PLANE('',#26844); +#26844 = AXIS2_PLACEMENT_3D('',#26845,#26846,#26847); +#26845 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26846 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26847 = DIRECTION('',(-1.,0.,0.)); +#26848 = ADVANCED_FACE('',(#26849),#26867,.T.); +#26849 = FACE_BOUND('',#26850,.T.); +#26850 = EDGE_LOOP('',(#26851,#26860,#26865,#26866)); +#26851 = ORIENTED_EDGE('',*,*,#26852,.T.); +#26852 = EDGE_CURVE('',#26853,#26853,#26855,.T.); +#26853 = VERTEX_POINT('',#26854); +#26854 = CARTESIAN_POINT('',(110.21615115565,104.41081744538, + 120.71000570048)); +#26855 = CIRCLE('',#26856,1.6481355); +#26856 = AXIS2_PLACEMENT_3D('',#26857,#26858,#26859); +#26857 = CARTESIAN_POINT('',(110.21615115565,103.90151556684, + 122.2774757075)); +#26858 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26859 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26860 = ORIENTED_EDGE('',*,*,#26861,.F.); +#26861 = EDGE_CURVE('',#15335,#26853,#26862,.T.); +#26862 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26863,#26864),.UNSPECIFIED., + .F.,.F.,(2,2),(0.,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26863 = CARTESIAN_POINT('',(110.21615115565,103.8401835356, + 120.52459550386)); +#26864 = CARTESIAN_POINT('',(110.21615115565,104.41081744538, + 120.71000570048)); +#26865 = ORIENTED_EDGE('',*,*,#15334,.T.); +#26866 = ORIENTED_EDGE('',*,*,#26861,.T.); +#26867 = CYLINDRICAL_SURFACE('',#26868,1.6481355); +#26868 = AXIS2_PLACEMENT_3D('',#26869,#26870,#26871); +#26869 = CARTESIAN_POINT('',(110.21615115565,103.33088165707, + 122.09206551087)); +#26870 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26871 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26872 = ADVANCED_FACE('',(#26873),#26876,.F.); +#26873 = FACE_BOUND('',#26874,.T.); +#26874 = EDGE_LOOP('',(#26875)); +#26875 = ORIENTED_EDGE('',*,*,#26852,.F.); +#26876 = PLANE('',#26877); +#26877 = AXIS2_PLACEMENT_3D('',#26878,#26879,#26880); +#26878 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26879 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26880 = DIRECTION('',(1.,0.,0.)); +#26881 = ADVANCED_FACE('',(#26882),#26900,.T.); +#26882 = FACE_BOUND('',#26883,.T.); +#26883 = EDGE_LOOP('',(#26884,#26893,#26898,#26899)); +#26884 = ORIENTED_EDGE('',*,*,#26885,.T.); +#26885 = EDGE_CURVE('',#26886,#26886,#26888,.T.); +#26886 = VERTEX_POINT('',#26887); +#26887 = CARTESIAN_POINT('',(112.23635715565,105.52906697696, + 117.26838752669)); +#26888 = CIRCLE('',#26889,1.6453795); +#26889 = AXIS2_PLACEMENT_3D('',#26890,#26891,#26892); +#26890 = CARTESIAN_POINT('',(112.23635715565,105.02061674926, + 118.83323642194)); +#26891 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26892 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26893 = ORIENTED_EDGE('',*,*,#26894,.F.); +#26894 = EDGE_CURVE('',#15324,#26886,#26895,.T.); +#26895 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26896,#26897),.UNSPECIFIED., + .F.,.F.,(2,2),(-2.84217094304E-14,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26896 = CARTESIAN_POINT('',(112.23635715565,104.95843306718, + 117.08297733006)); +#26897 = CARTESIAN_POINT('',(112.23635715565,105.52906697696, + 117.26838752669)); +#26898 = ORIENTED_EDGE('',*,*,#15323,.T.); +#26899 = ORIENTED_EDGE('',*,*,#26894,.T.); +#26900 = CYLINDRICAL_SURFACE('',#26901,1.6453795); +#26901 = AXIS2_PLACEMENT_3D('',#26902,#26903,#26904); +#26902 = CARTESIAN_POINT('',(112.23635715565,104.44998283948, + 118.64782622531)); +#26903 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26904 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26905 = ADVANCED_FACE('',(#26906),#26909,.F.); +#26906 = FACE_BOUND('',#26907,.T.); +#26907 = EDGE_LOOP('',(#26908)); +#26908 = ORIENTED_EDGE('',*,*,#26885,.F.); +#26909 = PLANE('',#26910); +#26910 = AXIS2_PLACEMENT_3D('',#26911,#26912,#26913); +#26911 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26912 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26913 = DIRECTION('',(1.,0.,0.)); +#26914 = ADVANCED_FACE('',(#26915),#26933,.T.); +#26915 = FACE_BOUND('',#26916,.T.); +#26916 = EDGE_LOOP('',(#26917,#26926,#26931,#26932)); +#26917 = ORIENTED_EDGE('',*,*,#26918,.T.); +#26918 = EDGE_CURVE('',#26919,#26919,#26921,.T.); +#26919 = VERTEX_POINT('',#26920); +#26920 = CARTESIAN_POINT('',(114.25656315565,104.41081744538, + 120.71000570048)); +#26921 = CIRCLE('',#26922,1.6481355); +#26922 = AXIS2_PLACEMENT_3D('',#26923,#26924,#26925); +#26923 = CARTESIAN_POINT('',(114.25656315565,103.90151556684, + 122.2774757075)); +#26924 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26925 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26926 = ORIENTED_EDGE('',*,*,#26927,.F.); +#26927 = EDGE_CURVE('',#15313,#26919,#26928,.T.); +#26928 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26929,#26930),.UNSPECIFIED., + .F.,.F.,(2,2),(0.,0.600000000001),.PIECEWISE_BEZIER_KNOTS.); +#26929 = CARTESIAN_POINT('',(114.25656315565,103.8401835356, + 120.52459550386)); +#26930 = CARTESIAN_POINT('',(114.25656315565,104.41081744538, + 120.71000570048)); +#26931 = ORIENTED_EDGE('',*,*,#15312,.T.); +#26932 = ORIENTED_EDGE('',*,*,#26927,.T.); +#26933 = CYLINDRICAL_SURFACE('',#26934,1.6481355); +#26934 = AXIS2_PLACEMENT_3D('',#26935,#26936,#26937); +#26935 = CARTESIAN_POINT('',(114.25656315565,103.33088165707, + 122.09206551087)); +#26936 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26937 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26938 = ADVANCED_FACE('',(#26939),#26942,.T.); +#26939 = FACE_BOUND('',#26940,.T.); +#26940 = EDGE_LOOP('',(#26941)); +#26941 = ORIENTED_EDGE('',*,*,#26918,.F.); +#26942 = PLANE('',#26943); +#26943 = AXIS2_PLACEMENT_3D('',#26944,#26945,#26946); +#26944 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26945 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#26946 = DIRECTION('',(-1.,0.,0.)); +#26947 = ADVANCED_FACE('',(#26948),#26966,.T.); +#26948 = FACE_BOUND('',#26949,.T.); +#26949 = EDGE_LOOP('',(#26950,#26959,#26964,#26965)); +#26950 = ORIENTED_EDGE('',*,*,#26951,.T.); +#26951 = EDGE_CURVE('',#26952,#26952,#26954,.T.); +#26952 = VERTEX_POINT('',#26953); +#26953 = CARTESIAN_POINT('',(116.7050222451,104.03317210471, + 121.87227854835)); +#26954 = CIRCLE('',#26955,1.648836406839); +#26955 = AXIS2_PLACEMENT_3D('',#26956,#26957,#26958); +#26956 = CARTESIAN_POINT('',(118.29767591379,103.90129902067, + 122.27814216809)); +#26957 = DIRECTION('',(8.326672684689E-17,-0.951056516295, + -0.309016994375)); +#26958 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#26959 = ORIENTED_EDGE('',*,*,#26960,.F.); +#26960 = EDGE_CURVE('',#15302,#26952,#26961,.T.); +#26961 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26962,#26963),.UNSPECIFIED., + .F.,.F.,(2,2),(0.,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26962 = CARTESIAN_POINT('',(116.7050222451,103.46253819493, + 121.68686835173)); +#26963 = CARTESIAN_POINT('',(116.7050222451,104.03317210471, + 121.87227854835)); +#26964 = ORIENTED_EDGE('',*,*,#15301,.T.); +#26965 = ORIENTED_EDGE('',*,*,#26960,.T.); +#26966 = CYLINDRICAL_SURFACE('',#26967,1.648836406839); +#26967 = AXIS2_PLACEMENT_3D('',#26968,#26969,#26970); +#26968 = CARTESIAN_POINT('',(118.29767591379,103.33066511089, + 122.09273197147)); +#26969 = DIRECTION('',(-9.71445146547E-17,0.951056516295,0.309016994375) + ); +#26970 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#26971 = ADVANCED_FACE('',(#26972),#26975,.F.); +#26972 = FACE_BOUND('',#26973,.T.); +#26973 = EDGE_LOOP('',(#26974)); +#26974 = ORIENTED_EDGE('',*,*,#26951,.F.); +#26975 = PLANE('',#26976); +#26976 = AXIS2_PLACEMENT_3D('',#26977,#26978,#26979); +#26977 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#26978 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26979 = DIRECTION('',(1.,0.,0.)); +#26980 = ADVANCED_FACE('',(#26981),#26999,.T.); +#26981 = FACE_BOUND('',#26982,.T.); +#26982 = EDGE_LOOP('',(#26983,#26992,#26997,#26998)); +#26983 = ORIENTED_EDGE('',*,*,#26984,.T.); +#26984 = EDGE_CURVE('',#26985,#26985,#26987,.T.); +#26985 = VERTEX_POINT('',#26986); +#26986 = CARTESIAN_POINT('',(116.27676915565,105.52906697696, + 117.26838752669)); +#26987 = CIRCLE('',#26988,1.6453795); +#26988 = AXIS2_PLACEMENT_3D('',#26989,#26990,#26991); +#26989 = CARTESIAN_POINT('',(116.27676915565,105.02061674926, + 118.83323642194)); +#26990 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#26991 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#26992 = ORIENTED_EDGE('',*,*,#26993,.F.); +#26993 = EDGE_CURVE('',#15291,#26985,#26994,.T.); +#26994 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#26995,#26996),.UNSPECIFIED., + .F.,.F.,(2,2),(0.,0.6),.PIECEWISE_BEZIER_KNOTS.); +#26995 = CARTESIAN_POINT('',(116.27676915565,104.95843306718, + 117.08297733006)); +#26996 = CARTESIAN_POINT('',(116.27676915565,105.52906697696, + 117.26838752669)); +#26997 = ORIENTED_EDGE('',*,*,#15290,.T.); +#26998 = ORIENTED_EDGE('',*,*,#26993,.T.); +#26999 = CYLINDRICAL_SURFACE('',#27000,1.6453795); +#27000 = AXIS2_PLACEMENT_3D('',#27001,#27002,#27003); +#27001 = CARTESIAN_POINT('',(116.27676915565,104.44998283948, + 118.64782622531)); +#27002 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27003 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27004 = ADVANCED_FACE('',(#27005),#27008,.T.); +#27005 = FACE_BOUND('',#27006,.T.); +#27006 = EDGE_LOOP('',(#27007)); +#27007 = ORIENTED_EDGE('',*,*,#26984,.F.); +#27008 = PLANE('',#27009); +#27009 = AXIS2_PLACEMENT_3D('',#27010,#27011,#27012); +#27010 = CARTESIAN_POINT('',(153.01603065565,171.25882604844, + -85.0270098701)); +#27011 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27012 = DIRECTION('',(-1.,0.,0.)); +#27013 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#27017)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#27014,#27015,#27016)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#27014 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#27015 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#27016 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#27017 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-06),#27014, + 'distance_accuracy_value','confusion accuracy'); +#27018 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#27019,#27021); +#27019 = ( REPRESENTATION_RELATIONSHIP('','',#12579,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#27020) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#27020 = ITEM_DEFINED_TRANSFORMATION('','',#11,#31); +#27021 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #27022); +#27022 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','back_panel','',#5,#12574,$ + ); +#27023 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#12576)); +#27024 = SHAPE_DEFINITION_REPRESENTATION(#27025,#27031); +#27025 = PRODUCT_DEFINITION_SHAPE('','',#27026); +#27026 = PRODUCT_DEFINITION('design','',#27027,#27030); +#27027 = PRODUCT_DEFINITION_FORMATION('','',#27028); +#27028 = PRODUCT('em_retainer','em_retainer','',(#27029)); +#27029 = PRODUCT_CONTEXT('',#2,'mechanical'); +#27030 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#27031 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#27032),#27325); +#27032 = MANIFOLD_SOLID_BREP('',#27033); +#27033 = CLOSED_SHELL('',(#27034,#27149,#27210,#27226,#27250,#27268, + #27286,#27304)); +#27034 = ADVANCED_FACE('',(#27035,#27046,#27075,#27104,#27133),#27144, + .T.); +#27035 = FACE_BOUND('',#27036,.T.); +#27036 = EDGE_LOOP('',(#27037)); +#27037 = ORIENTED_EDGE('',*,*,#27038,.T.); +#27038 = EDGE_CURVE('',#27039,#27039,#27041,.T.); +#27039 = VERTEX_POINT('',#27040); +#27040 = CARTESIAN_POINT('',(62.5,60.9,99.9)); +#27041 = CIRCLE('',#27042,24.9); +#27042 = AXIS2_PLACEMENT_3D('',#27043,#27044,#27045); +#27043 = CARTESIAN_POINT('',(62.5,60.9,75.)); +#27044 = DIRECTION('',(0.,1.,0.)); +#27045 = DIRECTION('',(0.,-0.,1.)); +#27046 = FACE_BOUND('',#27047,.T.); +#27047 = EDGE_LOOP('',(#27048,#27059,#27068)); +#27048 = ORIENTED_EDGE('',*,*,#27049,.F.); +#27049 = EDGE_CURVE('',#27050,#27052,#27054,.T.); +#27050 = VERTEX_POINT('',#27051); +#27051 = CARTESIAN_POINT('',(41.31336259684,60.9,86.275034170547)); +#27052 = VERTEX_POINT('',#27053); +#27053 = CARTESIAN_POINT('',(42.142215278188,60.9,87.710649126632)); +#27054 = CIRCLE('',#27055,1.25); +#27055 = AXIS2_PLACEMENT_3D('',#27056,#27057,#27058); +#27056 = CARTESIAN_POINT('',(42.538114442769,60.9,86.525)); +#27057 = DIRECTION('',(0.,1.,0.)); +#27058 = DIRECTION('',(0.,-0.,1.)); +#27059 = ORIENTED_EDGE('',*,*,#27060,.F.); +#27060 = EDGE_CURVE('',#27061,#27050,#27063,.T.); +#27061 = VERTEX_POINT('',#27062); +#27062 = CARTESIAN_POINT('',(42.538114442769,60.9,85.275)); +#27063 = CIRCLE('',#27064,1.25); +#27064 = AXIS2_PLACEMENT_3D('',#27065,#27066,#27067); +#27065 = CARTESIAN_POINT('',(42.538114442769,60.9,86.525)); +#27066 = DIRECTION('',(0.,1.,0.)); +#27067 = DIRECTION('',(0.,-0.,1.)); +#27068 = ORIENTED_EDGE('',*,*,#27069,.F.); +#27069 = EDGE_CURVE('',#27052,#27061,#27070,.T.); +#27070 = CIRCLE('',#27071,1.25); +#27071 = AXIS2_PLACEMENT_3D('',#27072,#27073,#27074); +#27072 = CARTESIAN_POINT('',(42.538114442769,60.9,86.525)); +#27073 = DIRECTION('',(0.,1.,0.)); +#27074 = DIRECTION('',(0.,-0.,1.)); +#27075 = FACE_BOUND('',#27076,.T.); +#27076 = EDGE_LOOP('',(#27077,#27088,#27097)); +#27077 = ORIENTED_EDGE('',*,*,#27078,.F.); +#27078 = EDGE_CURVE('',#27079,#27081,#27083,.T.); +#27079 = VERTEX_POINT('',#27080); +#27080 = CARTESIAN_POINT('',(82.857784721812,60.9,87.710649126633)); +#27081 = VERTEX_POINT('',#27082); +#27082 = CARTESIAN_POINT('',(83.68663740316,60.9,86.275034170548)); +#27083 = CIRCLE('',#27084,1.25); +#27084 = AXIS2_PLACEMENT_3D('',#27085,#27086,#27087); +#27085 = CARTESIAN_POINT('',(82.461885557231,60.9,86.525)); +#27086 = DIRECTION('',(0.,1.,0.)); +#27087 = DIRECTION('',(0.,-0.,1.)); +#27088 = ORIENTED_EDGE('',*,*,#27089,.F.); +#27089 = EDGE_CURVE('',#27090,#27079,#27092,.T.); +#27090 = VERTEX_POINT('',#27091); +#27091 = CARTESIAN_POINT('',(82.461885557231,60.9,85.275)); +#27092 = CIRCLE('',#27093,1.25); +#27093 = AXIS2_PLACEMENT_3D('',#27094,#27095,#27096); +#27094 = CARTESIAN_POINT('',(82.461885557231,60.9,86.525)); +#27095 = DIRECTION('',(0.,1.,0.)); +#27096 = DIRECTION('',(0.,-0.,1.)); +#27097 = ORIENTED_EDGE('',*,*,#27098,.F.); +#27098 = EDGE_CURVE('',#27081,#27090,#27099,.T.); +#27099 = CIRCLE('',#27100,1.25); +#27100 = AXIS2_PLACEMENT_3D('',#27101,#27102,#27103); +#27101 = CARTESIAN_POINT('',(82.461885557231,60.9,86.525)); +#27102 = DIRECTION('',(0.,1.,0.)); +#27103 = DIRECTION('',(0.,-0.,1.)); +#27104 = FACE_BOUND('',#27105,.T.); +#27105 = EDGE_LOOP('',(#27106,#27117,#27126)); +#27106 = ORIENTED_EDGE('',*,*,#27107,.T.); +#27107 = EDGE_CURVE('',#27108,#27110,#27112,.T.); +#27108 = VERTEX_POINT('',#27109); +#27109 = CARTESIAN_POINT('',(61.671147318652,60.9,51.01431670282)); +#27110 = VERTEX_POINT('',#27111); +#27111 = CARTESIAN_POINT('',(62.5,60.9,50.7)); +#27112 = CIRCLE('',#27113,1.25); +#27113 = AXIS2_PLACEMENT_3D('',#27114,#27115,#27116); +#27114 = CARTESIAN_POINT('',(62.5,60.9,51.95)); +#27115 = DIRECTION('',(0.,-1.,0.)); +#27116 = DIRECTION('',(0.,0.,1.)); +#27117 = ORIENTED_EDGE('',*,*,#27118,.T.); +#27118 = EDGE_CURVE('',#27110,#27119,#27121,.T.); +#27119 = VERTEX_POINT('',#27120); +#27120 = CARTESIAN_POINT('',(63.328852681348,60.9,51.01431670282)); +#27121 = CIRCLE('',#27122,1.25); +#27122 = AXIS2_PLACEMENT_3D('',#27123,#27124,#27125); +#27123 = CARTESIAN_POINT('',(62.5,60.9,51.95)); +#27124 = DIRECTION('',(0.,-1.,0.)); +#27125 = DIRECTION('',(0.,0.,1.)); +#27126 = ORIENTED_EDGE('',*,*,#27127,.T.); +#27127 = EDGE_CURVE('',#27119,#27108,#27128,.T.); +#27128 = CIRCLE('',#27129,1.25); +#27129 = AXIS2_PLACEMENT_3D('',#27130,#27131,#27132); +#27130 = CARTESIAN_POINT('',(62.5,60.9,51.95)); +#27131 = DIRECTION('',(0.,-1.,0.)); +#27132 = DIRECTION('',(0.,0.,1.)); +#27133 = FACE_BOUND('',#27134,.T.); +#27134 = EDGE_LOOP('',(#27135)); +#27135 = ORIENTED_EDGE('',*,*,#27136,.T.); +#27136 = EDGE_CURVE('',#27137,#27137,#27139,.T.); +#27137 = VERTEX_POINT('',#27138); +#27138 = CARTESIAN_POINT('',(62.5,60.9,77.6)); +#27139 = CIRCLE('',#27140,2.6); +#27140 = AXIS2_PLACEMENT_3D('',#27141,#27142,#27143); +#27141 = CARTESIAN_POINT('',(62.5,60.9,75.)); +#27142 = DIRECTION('',(0.,-1.,0.)); +#27143 = DIRECTION('',(0.,0.,1.)); +#27144 = PLANE('',#27145); +#27145 = AXIS2_PLACEMENT_3D('',#27146,#27147,#27148); +#27146 = CARTESIAN_POINT('',(62.5,60.9,75.)); +#27147 = DIRECTION('',(0.,1.,0.)); +#27148 = DIRECTION('',(-1.,0.,0.)); +#27149 = ADVANCED_FACE('',(#27150,#27161,#27172,#27183,#27194),#27205, + .F.); +#27150 = FACE_BOUND('',#27151,.T.); +#27151 = EDGE_LOOP('',(#27152)); +#27152 = ORIENTED_EDGE('',*,*,#27153,.F.); +#27153 = EDGE_CURVE('',#27154,#27154,#27156,.T.); +#27154 = VERTEX_POINT('',#27155); +#27155 = CARTESIAN_POINT('',(42.538114442769,56.1,85.275)); +#27156 = CIRCLE('',#27157,1.25); +#27157 = AXIS2_PLACEMENT_3D('',#27158,#27159,#27160); +#27158 = CARTESIAN_POINT('',(42.538114442769,56.1,86.525)); +#27159 = DIRECTION('',(0.,-1.,0.)); +#27160 = DIRECTION('',(0.,0.,-1.)); +#27161 = FACE_BOUND('',#27162,.T.); +#27162 = EDGE_LOOP('',(#27163)); +#27163 = ORIENTED_EDGE('',*,*,#27164,.F.); +#27164 = EDGE_CURVE('',#27165,#27165,#27167,.T.); +#27165 = VERTEX_POINT('',#27166); +#27166 = CARTESIAN_POINT('',(82.461885557231,56.1,85.275)); +#27167 = CIRCLE('',#27168,1.25); +#27168 = AXIS2_PLACEMENT_3D('',#27169,#27170,#27171); +#27169 = CARTESIAN_POINT('',(82.461885557231,56.1,86.525)); +#27170 = DIRECTION('',(0.,-1.,0.)); +#27171 = DIRECTION('',(0.,0.,-1.)); +#27172 = FACE_BOUND('',#27173,.T.); +#27173 = EDGE_LOOP('',(#27174)); +#27174 = ORIENTED_EDGE('',*,*,#27175,.F.); +#27175 = EDGE_CURVE('',#27176,#27176,#27178,.T.); +#27176 = VERTEX_POINT('',#27177); +#27177 = CARTESIAN_POINT('',(62.5,56.1,100.9)); +#27178 = CIRCLE('',#27179,25.9); +#27179 = AXIS2_PLACEMENT_3D('',#27180,#27181,#27182); +#27180 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#27181 = DIRECTION('',(0.,1.,0.)); +#27182 = DIRECTION('',(0.,-0.,1.)); +#27183 = FACE_BOUND('',#27184,.T.); +#27184 = EDGE_LOOP('',(#27185)); +#27185 = ORIENTED_EDGE('',*,*,#27186,.F.); +#27186 = EDGE_CURVE('',#27187,#27187,#27189,.T.); +#27187 = VERTEX_POINT('',#27188); +#27188 = CARTESIAN_POINT('',(62.5,56.1,77.6)); +#27189 = CIRCLE('',#27190,2.6); +#27190 = AXIS2_PLACEMENT_3D('',#27191,#27192,#27193); +#27191 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#27192 = DIRECTION('',(0.,-1.,0.)); +#27193 = DIRECTION('',(0.,0.,1.)); +#27194 = FACE_BOUND('',#27195,.T.); +#27195 = EDGE_LOOP('',(#27196)); +#27196 = ORIENTED_EDGE('',*,*,#27197,.T.); +#27197 = EDGE_CURVE('',#27198,#27198,#27200,.T.); +#27198 = VERTEX_POINT('',#27199); +#27199 = CARTESIAN_POINT('',(62.5,56.1,50.7)); +#27200 = CIRCLE('',#27201,1.25); +#27201 = AXIS2_PLACEMENT_3D('',#27202,#27203,#27204); +#27202 = CARTESIAN_POINT('',(62.5,56.1,51.95)); +#27203 = DIRECTION('',(0.,1.,0.)); +#27204 = DIRECTION('',(0.,0.,-1.)); +#27205 = PLANE('',#27206); +#27206 = AXIS2_PLACEMENT_3D('',#27207,#27208,#27209); +#27207 = CARTESIAN_POINT('',(62.5,56.1,75.)); +#27208 = DIRECTION('',(0.,1.,0.)); +#27209 = DIRECTION('',(-1.,0.,0.)); +#27210 = ADVANCED_FACE('',(#27211),#27221,.F.); +#27211 = FACE_BOUND('',#27212,.F.); +#27212 = EDGE_LOOP('',(#27213,#27214,#27219,#27220)); +#27213 = ORIENTED_EDGE('',*,*,#27186,.F.); +#27214 = ORIENTED_EDGE('',*,*,#27215,.T.); +#27215 = EDGE_CURVE('',#27187,#27137,#27216,.T.); +#27216 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27217,#27218),.UNSPECIFIED., + .F.,.F.,(2,2),(-0.75,4.05),.PIECEWISE_BEZIER_KNOTS.); +#27217 = CARTESIAN_POINT('',(62.5,56.1,77.6)); +#27218 = CARTESIAN_POINT('',(62.5,60.9,77.6)); +#27219 = ORIENTED_EDGE('',*,*,#27136,.T.); +#27220 = ORIENTED_EDGE('',*,*,#27215,.F.); +#27221 = CYLINDRICAL_SURFACE('',#27222,2.6); +#27222 = AXIS2_PLACEMENT_3D('',#27223,#27224,#27225); +#27223 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#27224 = DIRECTION('',(0.,1.,0.)); +#27225 = DIRECTION('',(0.,-0.,1.)); +#27226 = ADVANCED_FACE('',(#27227),#27245,.T.); +#27227 = FACE_BOUND('',#27228,.T.); +#27228 = EDGE_LOOP('',(#27229,#27238,#27243,#27244)); +#27229 = ORIENTED_EDGE('',*,*,#27230,.T.); +#27230 = EDGE_CURVE('',#27231,#27231,#27233,.T.); +#27231 = VERTEX_POINT('',#27232); +#27232 = CARTESIAN_POINT('',(62.5,59.9,100.9)); +#27233 = CIRCLE('',#27234,25.9); +#27234 = AXIS2_PLACEMENT_3D('',#27235,#27236,#27237); +#27235 = CARTESIAN_POINT('',(62.5,59.9,75.)); +#27236 = DIRECTION('',(0.,-1.,0.)); +#27237 = DIRECTION('',(0.,0.,1.)); +#27238 = ORIENTED_EDGE('',*,*,#27239,.T.); +#27239 = EDGE_CURVE('',#27231,#27176,#27240,.T.); +#27240 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27241,#27242),.UNSPECIFIED., + .F.,.F.,(2,2),(-3.05,0.75),.PIECEWISE_BEZIER_KNOTS.); +#27241 = CARTESIAN_POINT('',(62.5,59.9,100.9)); +#27242 = CARTESIAN_POINT('',(62.5,56.1,100.9)); +#27243 = ORIENTED_EDGE('',*,*,#27175,.T.); +#27244 = ORIENTED_EDGE('',*,*,#27239,.F.); +#27245 = CYLINDRICAL_SURFACE('',#27246,25.9); +#27246 = AXIS2_PLACEMENT_3D('',#27247,#27248,#27249); +#27247 = CARTESIAN_POINT('',(62.5,56.85,75.)); +#27248 = DIRECTION('',(0.,-1.,0.)); +#27249 = DIRECTION('',(1.,0.,0.)); +#27250 = ADVANCED_FACE('',(#27251),#27263,.F.); +#27251 = FACE_BOUND('',#27252,.F.); +#27252 = EDGE_LOOP('',(#27253,#27254,#27255,#27260,#27261,#27262)); +#27253 = ORIENTED_EDGE('',*,*,#27078,.F.); +#27254 = ORIENTED_EDGE('',*,*,#27089,.F.); +#27255 = ORIENTED_EDGE('',*,*,#27256,.T.); +#27256 = EDGE_CURVE('',#27090,#27165,#27257,.T.); +#27257 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27258,#27259),.UNSPECIFIED., + .F.,.F.,(2,2),(4.7,9.5),.PIECEWISE_BEZIER_KNOTS.); +#27258 = CARTESIAN_POINT('',(82.461885557231,60.9,85.275)); +#27259 = CARTESIAN_POINT('',(82.461885557231,56.1,85.275)); +#27260 = ORIENTED_EDGE('',*,*,#27164,.F.); +#27261 = ORIENTED_EDGE('',*,*,#27256,.F.); +#27262 = ORIENTED_EDGE('',*,*,#27098,.F.); +#27263 = CYLINDRICAL_SURFACE('',#27264,1.25); +#27264 = AXIS2_PLACEMENT_3D('',#27265,#27266,#27267); +#27265 = CARTESIAN_POINT('',(82.461885557231,65.6,86.525)); +#27266 = DIRECTION('',(0.,-1.,0.)); +#27267 = DIRECTION('',(0.,0.,-1.)); +#27268 = ADVANCED_FACE('',(#27269),#27281,.F.); +#27269 = FACE_BOUND('',#27270,.F.); +#27270 = EDGE_LOOP('',(#27271,#27272,#27273,#27278,#27279,#27280)); +#27271 = ORIENTED_EDGE('',*,*,#27127,.T.); +#27272 = ORIENTED_EDGE('',*,*,#27107,.T.); +#27273 = ORIENTED_EDGE('',*,*,#27274,.T.); +#27274 = EDGE_CURVE('',#27110,#27198,#27275,.T.); +#27275 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27276,#27277),.UNSPECIFIED., + .F.,.F.,(2,2),(4.7,9.5),.PIECEWISE_BEZIER_KNOTS.); +#27276 = CARTESIAN_POINT('',(62.5,60.9,50.7)); +#27277 = CARTESIAN_POINT('',(62.5,56.1,50.7)); +#27278 = ORIENTED_EDGE('',*,*,#27197,.T.); +#27279 = ORIENTED_EDGE('',*,*,#27274,.F.); +#27280 = ORIENTED_EDGE('',*,*,#27118,.T.); +#27281 = CYLINDRICAL_SURFACE('',#27282,1.25); +#27282 = AXIS2_PLACEMENT_3D('',#27283,#27284,#27285); +#27283 = CARTESIAN_POINT('',(62.5,65.6,51.95)); +#27284 = DIRECTION('',(0.,-1.,0.)); +#27285 = DIRECTION('',(0.,0.,-1.)); +#27286 = ADVANCED_FACE('',(#27287),#27299,.F.); +#27287 = FACE_BOUND('',#27288,.F.); +#27288 = EDGE_LOOP('',(#27289,#27290,#27291,#27296,#27297,#27298)); +#27289 = ORIENTED_EDGE('',*,*,#27049,.F.); +#27290 = ORIENTED_EDGE('',*,*,#27060,.F.); +#27291 = ORIENTED_EDGE('',*,*,#27292,.T.); +#27292 = EDGE_CURVE('',#27061,#27154,#27293,.T.); +#27293 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27294,#27295),.UNSPECIFIED., + .F.,.F.,(2,2),(4.7,9.5),.PIECEWISE_BEZIER_KNOTS.); +#27294 = CARTESIAN_POINT('',(42.538114442769,60.9,85.275)); +#27295 = CARTESIAN_POINT('',(42.538114442769,56.1,85.275)); +#27296 = ORIENTED_EDGE('',*,*,#27153,.F.); +#27297 = ORIENTED_EDGE('',*,*,#27292,.F.); +#27298 = ORIENTED_EDGE('',*,*,#27069,.F.); +#27299 = CYLINDRICAL_SURFACE('',#27300,1.25); +#27300 = AXIS2_PLACEMENT_3D('',#27301,#27302,#27303); +#27301 = CARTESIAN_POINT('',(42.538114442769,65.6,86.525)); +#27302 = DIRECTION('',(0.,-1.,0.)); +#27303 = DIRECTION('',(0.,0.,-1.)); +#27304 = ADVANCED_FACE('',(#27305),#27320,.T.); +#27305 = FACE_BOUND('',#27306,.T.); +#27306 = EDGE_LOOP('',(#27307,#27308,#27318,#27319)); +#27307 = ORIENTED_EDGE('',*,*,#27038,.F.); +#27308 = ORIENTED_EDGE('',*,*,#27309,.F.); +#27309 = EDGE_CURVE('',#27231,#27039,#27310,.T.); +#27310 = ( BOUNDED_CURVE() B_SPLINE_CURVE(6,(#27311,#27312,#27313,#27314 + ,#27315,#27316,#27317),.UNSPECIFIED.,.F.,.F.) +B_SPLINE_CURVE_WITH_KNOTS((7,7),(0.,1.570796326795), +.PIECEWISE_BEZIER_KNOTS.) CURVE() GEOMETRIC_REPRESENTATION_ITEM() +RATIONAL_B_SPLINE_CURVE((1.031393471788,1.010025407661,0.997924642725, + 0.993958444137,0.997924642725,1.010025407661,1.031393471788)) +REPRESENTATION_ITEM('') ); +#27311 = CARTESIAN_POINT('',(62.5,59.9,100.9)); +#27312 = CARTESIAN_POINT('',(62.5,60.167336783153,100.9)); +#27313 = CARTESIAN_POINT('',(62.5,60.427708572582,100.81499564936)); +#27314 = CARTESIAN_POINT('',(62.5,60.651919513202,100.6519195132)); +#27315 = CARTESIAN_POINT('',(62.5,60.814995649366,100.42770857258)); +#27316 = CARTESIAN_POINT('',(62.5,60.9,100.16733678315)); +#27317 = CARTESIAN_POINT('',(62.5,60.9,99.9)); +#27318 = ORIENTED_EDGE('',*,*,#27230,.F.); +#27319 = ORIENTED_EDGE('',*,*,#27309,.T.); +#27320 = TOROIDAL_SURFACE('',#27321,24.9,1.); +#27321 = AXIS2_PLACEMENT_3D('',#27322,#27323,#27324); +#27322 = CARTESIAN_POINT('',(62.5,59.9,75.)); +#27323 = DIRECTION('',(0.,1.,0.)); +#27324 = DIRECTION('',(0.,-0.,1.)); +#27325 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#27329)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#27326,#27327,#27328)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#27326 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#27327 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#27328 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#27329 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(5.E-06),#27326, + 'distance_accuracy_value','confusion accuracy'); +#27330 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#27331,#27333); +#27331 = ( REPRESENTATION_RELATIONSHIP('','',#27031,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#27332) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#27332 = ITEM_DEFINED_TRANSFORMATION('','',#11,#35); +#27333 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #27334); +#27334 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','em_retainer','',#5,#27026,$ + ); +#27335 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#27028)); +#27336 = SHAPE_DEFINITION_REPRESENTATION(#27337,#27343); +#27337 = PRODUCT_DEFINITION_SHAPE('','',#27338); +#27338 = PRODUCT_DEFINITION('design','',#27339,#27342); +#27339 = PRODUCT_DEFINITION_FORMATION('','',#27340); +#27340 = PRODUCT('fan_mount_left','fan_mount_left','',(#27341)); +#27341 = PRODUCT_CONTEXT('',#2,'mechanical'); +#27342 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design'); +#27343 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#27344),#28699); +#27344 = MANIFOLD_SOLID_BREP('',#27345); +#27345 = CLOSED_SHELL('',(#27346,#27487,#27528,#27616,#27757,#27799, + #27838,#27871,#27895,#27934,#27967,#27991,#28067,#28108,#28132, + #28148,#28172,#28188,#28205,#28221,#28233,#28250,#28281,#28312, + #28336,#28350,#28362,#28371,#28447,#28469,#28486,#28498,#28520, + #28537,#28549,#28561,#28570,#28601,#28634,#28651,#28675,#28687)); +#27346 = ADVANCED_FACE('',(#27347,#27358,#27369),#27482,.T.); +#27347 = FACE_BOUND('',#27348,.T.); +#27348 = EDGE_LOOP('',(#27349)); +#27349 = ORIENTED_EDGE('',*,*,#27350,.F.); +#27350 = EDGE_CURVE('',#27351,#27351,#27353,.T.); +#27351 = VERTEX_POINT('',#27352); +#27352 = CARTESIAN_POINT('',(12.65,33.662543950035,102.33962080964)); +#27353 = CIRCLE('',#27354,1.); +#27354 = AXIS2_PLACEMENT_3D('',#27355,#27356,#27357); +#27355 = CARTESIAN_POINT('',(12.65,32.711487433739,102.03060381527)); +#27356 = DIRECTION('',(1.,0.,0.)); +#27357 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#27358 = FACE_BOUND('',#27359,.T.); +#27359 = EDGE_LOOP('',(#27360)); +#27360 = ORIENTED_EDGE('',*,*,#27361,.F.); +#27361 = EDGE_CURVE('',#27362,#27362,#27364,.T.); +#27362 = VERTEX_POINT('',#27363); +#27363 = CARTESIAN_POINT('',(12.65,90.152418955007,120.69429383649)); +#27364 = CIRCLE('',#27365,1.); +#27365 = AXIS2_PLACEMENT_3D('',#27366,#27367,#27368); +#27366 = CARTESIAN_POINT('',(12.65,89.201362438712,120.38527684212)); +#27367 = DIRECTION('',(1.,0.,0.)); +#27368 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#27369 = FACE_BOUND('',#27370,.T.); +#27370 = EDGE_LOOP('',(#27371,#27381,#27390,#27399,#27407,#27415,#27423, + #27432,#27441,#27450,#27459,#27468,#27476)); +#27371 = ORIENTED_EDGE('',*,*,#27372,.F.); +#27372 = EDGE_CURVE('',#27373,#27375,#27377,.T.); +#27373 = VERTEX_POINT('',#27374); +#27374 = CARTESIAN_POINT('',(12.65,46.626089929396,54.994069158932)); +#27375 = VERTEX_POINT('',#27376); +#27376 = CARTESIAN_POINT('',(12.65,55.64759808829,27.228722017811)); +#27377 = LINE('',#27378,#27379); +#27378 = CARTESIAN_POINT('',(12.65,47.44938332075,52.460232642096)); +#27379 = VECTOR('',#27380,1.); +#27380 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27381 = ORIENTED_EDGE('',*,*,#27382,.T.); +#27382 = EDGE_CURVE('',#27373,#27383,#27385,.T.); +#27383 = VERTEX_POINT('',#27384); +#27384 = CARTESIAN_POINT('',(12.650000000161,104.8814656867, + 94.253216331707)); +#27385 = CIRCLE('',#27386,36.535898384862); +#27386 = AXIS2_PLACEMENT_3D('',#27387,#27388,#27389); +#27387 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#27388 = DIRECTION('',(-1.,0.,0.)); +#27389 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27390 = ORIENTED_EDGE('',*,*,#27391,.T.); +#27391 = EDGE_CURVE('',#27383,#27392,#27394,.T.); +#27392 = VERTEX_POINT('',#27393); +#27393 = CARTESIAN_POINT('',(12.65,105.59159393969,74.153122810178)); +#27394 = CIRCLE('',#27395,36.535898384862); +#27395 = AXIS2_PLACEMENT_3D('',#27396,#27397,#27398); +#27396 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#27397 = DIRECTION('',(-1.,0.,0.)); +#27398 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27399 = ORIENTED_EDGE('',*,*,#27400,.F.); +#27400 = EDGE_CURVE('',#27401,#27392,#27403,.T.); +#27401 = VERTEX_POINT('',#27402); +#27402 = CARTESIAN_POINT('',(12.65,114.61310209859,46.387775669058)); +#27403 = LINE('',#27404,#27405); +#27404 = CARTESIAN_POINT('',(12.65,106.41488733105,71.619286293343)); +#27405 = VECTOR('',#27406,1.); +#27406 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#27407 = ORIENTED_EDGE('',*,*,#27408,.F.); +#27408 = EDGE_CURVE('',#27409,#27401,#27411,.T.); +#27409 = VERTEX_POINT('',#27410); +#27410 = CARTESIAN_POINT('',(12.65,121.27049771265,48.550894629682)); +#27411 = LINE('',#27412,#27413); +#27412 = CARTESIAN_POINT('',(12.65,128.91971638611,51.036276437482)); +#27413 = VECTOR('',#27414,1.); +#27414 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27415 = ORIENTED_EDGE('',*,*,#27416,.F.); +#27416 = EDGE_CURVE('',#27417,#27409,#27419,.T.); +#27417 = VERTEX_POINT('',#27418); +#27418 = CARTESIAN_POINT('',(12.65,106.27390906886,94.705648612461)); +#27419 = LINE('',#27420,#27421); +#27420 = CARTESIAN_POINT('',(12.65,106.27390906886,94.705648612461)); +#27421 = VECTOR('',#27422,1.); +#27422 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27423 = ORIENTED_EDGE('',*,*,#27424,.F.); +#27424 = EDGE_CURVE('',#27425,#27417,#27427,.T.); +#27425 = VERTEX_POINT('',#27426); +#27426 = CARTESIAN_POINT('',(12.65,91.243219491354,121.32644613626)); +#27427 = CIRCLE('',#27428,77.); +#27428 = AXIS2_PLACEMENT_3D('',#27429,#27430,#27431); +#27429 = CARTESIAN_POINT('',(12.65,33.04255731414,70.91134004559)); +#27430 = DIRECTION('',(-1.,0.,0.)); +#27431 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27432 = ORIENTED_EDGE('',*,*,#27433,.F.); +#27433 = EDGE_CURVE('',#27434,#27425,#27436,.T.); +#27434 = VERTEX_POINT('',#27435); +#27435 = CARTESIAN_POINT('',(12.65,88.762610929421,122.5903793288)); +#27436 = CIRCLE('',#27437,3.7); +#27437 = AXIS2_PLACEMENT_3D('',#27438,#27439,#27440); +#27438 = CARTESIAN_POINT('',(12.65,88.446564295826,118.90390207736)); +#27439 = DIRECTION('',(-1.,0.,0.)); +#27440 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27441 = ORIENTED_EDGE('',*,*,#27442,.F.); +#27442 = EDGE_CURVE('',#27443,#27434,#27445,.T.); +#27443 = VERTEX_POINT('',#27444); +#27444 = CARTESIAN_POINT('',(12.65,31.770318139601,104.07246086791)); +#27445 = CIRCLE('',#27446,77.); +#27446 = AXIS2_PLACEMENT_3D('',#27447,#27448,#27449); +#27447 = CARTESIAN_POINT('',(12.65,82.185424230274,45.871798690702)); +#27448 = DIRECTION('',(-1.,0.,0.)); +#27449 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27450 = ORIENTED_EDGE('',*,*,#27451,.F.); +#27451 = EDGE_CURVE('',#27452,#27443,#27454,.T.); +#27452 = VERTEX_POINT('',#27453); +#27453 = CARTESIAN_POINT('',(12.65,30.506384947063,101.59185230598)); +#27454 = CIRCLE('',#27455,3.7); +#27455 = AXIS2_PLACEMENT_3D('',#27456,#27457,#27458); +#27456 = CARTESIAN_POINT('',(12.65,34.192862198504,101.27580567238)); +#27457 = DIRECTION('',(-1.,0.,0.)); +#27458 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27459 = ORIENTED_EDGE('',*,*,#27460,.F.); +#27460 = EDGE_CURVE('',#27461,#27452,#27463,.T.); +#27461 = VERTEX_POINT('',#27462); +#27462 = CARTESIAN_POINT('',(12.65,33.993613830435,71.220357039965)); +#27463 = CIRCLE('',#27464,77.); +#27464 = AXIS2_PLACEMENT_3D('',#27465,#27466,#27467); +#27465 = CARTESIAN_POINT('',(12.65,107.22496558516,95.014665606836)); +#27466 = DIRECTION('',(-1.,0.,0.)); +#27467 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27468 = ORIENTED_EDGE('',*,*,#27469,.F.); +#27469 = EDGE_CURVE('',#27470,#27461,#27472,.T.); +#27470 = VERTEX_POINT('',#27471); +#27471 = CARTESIAN_POINT('',(12.65,48.990202474224,25.065603057187)); +#27472 = LINE('',#27473,#27474); +#27473 = CARTESIAN_POINT('',(12.65,33.993613830435,71.220357039965)); +#27474 = VECTOR('',#27475,1.); +#27475 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#27476 = ORIENTED_EDGE('',*,*,#27477,.F.); +#27477 = EDGE_CURVE('',#27375,#27470,#27478,.T.); +#27478 = LINE('',#27479,#27480); +#27479 = CARTESIAN_POINT('',(12.65,128.91971638611,51.036276437482)); +#27480 = VECTOR('',#27481,1.); +#27481 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27482 = PLANE('',#27483); +#27483 = AXIS2_PLACEMENT_3D('',#27484,#27485,#27486); +#27484 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#27485 = DIRECTION('',(1.,0.,0.)); +#27486 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27487 = ADVANCED_FACE('',(#27488),#27523,.T.); +#27488 = FACE_BOUND('',#27489,.T.); +#27489 = EDGE_LOOP('',(#27490,#27501,#27509,#27517)); +#27490 = ORIENTED_EDGE('',*,*,#27491,.T.); +#27491 = EDGE_CURVE('',#27492,#27494,#27496,.T.); +#27492 = VERTEX_POINT('',#27493); +#27493 = CARTESIAN_POINT('',(12.65,101.47180339723,64.180058496831)); +#27494 = VERTEX_POINT('',#27495); +#27495 = CARTESIAN_POINT('',(12.65,55.821090615064,49.347242766834)); +#27496 = CIRCLE('',#27497,36.535898384862); +#27497 = AXIS2_PLACEMENT_3D('',#27498,#27499,#27500); +#27498 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#27499 = DIRECTION('',(-1.,0.,0.)); +#27500 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27501 = ORIENTED_EDGE('',*,*,#27502,.T.); +#27502 = EDGE_CURVE('',#27494,#27503,#27505,.T.); +#27503 = VERTEX_POINT('',#27504); +#27504 = CARTESIAN_POINT('',(12.65,62.304993702356,29.391840978436)); +#27505 = LINE('',#27506,#27507); +#27506 = CARTESIAN_POINT('',(12.65,48.233416591365,72.699702195025)); +#27507 = VECTOR('',#27508,1.); +#27508 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27509 = ORIENTED_EDGE('',*,*,#27510,.F.); +#27510 = EDGE_CURVE('',#27511,#27503,#27513,.T.); +#27511 = VERTEX_POINT('',#27512); +#27512 = CARTESIAN_POINT('',(12.65,107.95570648452,44.224656708433)); +#27513 = LINE('',#27514,#27515); +#27514 = CARTESIAN_POINT('',(12.65,128.91971638611,51.036276437482)); +#27515 = VECTOR('',#27516,1.); +#27516 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27517 = ORIENTED_EDGE('',*,*,#27518,.T.); +#27518 = EDGE_CURVE('',#27511,#27492,#27519,.T.); +#27519 = LINE('',#27520,#27521); +#27520 = CARTESIAN_POINT('',(12.65,93.884129373533,87.532517925022)); +#27521 = VECTOR('',#27522,1.); +#27522 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#27523 = PLANE('',#27524); +#27524 = AXIS2_PLACEMENT_3D('',#27525,#27526,#27527); +#27525 = CARTESIAN_POINT('',(12.65,70.133761449651,82.963002826213)); +#27526 = DIRECTION('',(1.,0.,0.)); +#27527 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27528 = ADVANCED_FACE('',(#27529),#27611,.F.); +#27529 = FACE_BOUND('',#27530,.F.); +#27530 = EDGE_LOOP('',(#27531,#27540,#27545,#27546,#27559,#27568,#27577, + #27578,#27589,#27598,#27609,#27610)); +#27531 = ORIENTED_EDGE('',*,*,#27532,.F.); +#27532 = EDGE_CURVE('',#27533,#27533,#27535,.T.); +#27533 = VERTEX_POINT('',#27534); +#27534 = CARTESIAN_POINT('',(10.65,104.37179603627,94.087614623711)); +#27535 = CIRCLE('',#27536,36.); +#27536 = AXIS2_PLACEMENT_3D('',#27537,#27538,#27539); +#27537 = CARTESIAN_POINT('',(10.65,70.133761449651,82.963002826213)); +#27538 = DIRECTION('',(-1.,0.,0.)); +#27539 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27540 = ORIENTED_EDGE('',*,*,#27541,.T.); +#27541 = EDGE_CURVE('',#27533,#27383,#27542,.T.); +#27542 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#27543,#27544),.UNSPECIFIED., + .F.,.F.,(2,2),(3.678039843373E-15,2.07055236082), + .PIECEWISE_BEZIER_KNOTS.); +#27543 = CARTESIAN_POINT('',(10.65,104.37179603627,94.087614623711)); +#27544 = CARTESIAN_POINT('',(12.650000000161,104.8814656867, + 94.253216331707)); +#27545 = ORIENTED_EDGE('',*,*,#27391,.T.); +#27546 = ORIENTED_EDGE('',*,*,#27547,.F.); +#27547 = EDGE_CURVE('',#27548,#27392,#27550,.T.); +#27548 = VERTEX_POINT('',#27549); +#27549 = CARTESIAN_POINT('',(18.598751769036,106.47701328985, + 71.428082252689)); +#27550 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27551,#27552,#27553,#27554, + #27555,#27556,#27557,#27558),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0., + 0.25,0.5,1.),.UNSPECIFIED.); +#27551 = CARTESIAN_POINT('',(18.598751769036,106.47701328985, + 71.428082252689)); +#27552 = CARTESIAN_POINT('',(18.09841355762,106.40586076376, + 71.647067210883)); +#27553 = CARTESIAN_POINT('',(17.598808656472,106.33408114494, + 71.867982162028)); +#27554 = CARTESIAN_POINT('',(16.602007247445,106.18927457386, + 72.313650961915)); +#27555 = CARTESIAN_POINT('',(16.104798558874,106.11624631996, + 72.53840881669)); +#27556 = CARTESIAN_POINT('',(14.617068203592,105.89511905558, + 73.21896855789)); +#27557 = CARTESIAN_POINT('',(13.63042341691,105.74498741511, + 73.681026236172)); +#27558 = CARTESIAN_POINT('',(12.65,105.59159393969,74.153122810178)); +#27559 = ORIENTED_EDGE('',*,*,#27560,.T.); +#27560 = EDGE_CURVE('',#27548,#27561,#27563,.T.); +#27561 = VERTEX_POINT('',#27562); +#27562 = CARTESIAN_POINT('',(21.287253079523,100.71910496712, + 59.007248360767)); +#27563 = ELLIPSE('',#27564,38.020733700065,36.630431203854); +#27564 = AXIS2_PLACEMENT_3D('',#27565,#27566,#27567); +#27565 = CARTESIAN_POINT('',(13.356515398579,70.948562425518, + 80.455303276711)); +#27566 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#27567 = DIRECTION('',(0.258819045103,0.298487495629,-0.91865005135)); +#27568 = ORIENTED_EDGE('',*,*,#27569,.F.); +#27569 = EDGE_CURVE('',#27492,#27561,#27570,.T.); +#27570 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27571,#27572,#27573,#27574, + #27575,#27576),.UNSPECIFIED.,.F.,.F.,(4,2,4),(0.,0.5,1.), + .UNSPECIFIED.); +#27571 = CARTESIAN_POINT('',(12.65,101.47180339723,64.180058496831)); +#27572 = CARTESIAN_POINT('',(14.063622659954,101.36877857971, + 63.271381526927)); +#27573 = CARTESIAN_POINT('',(15.491884807988,101.25308804301, + 62.388991705959)); +#27574 = CARTESIAN_POINT('',(18.372461039057,101.00089783661, + 60.667400513918)); +#27575 = CARTESIAN_POINT('',(19.824794946051,100.86438101571, + 59.828234739403)); +#27576 = CARTESIAN_POINT('',(21.287253079523,100.71910496712, + 59.007248360767)); +#27577 = ORIENTED_EDGE('',*,*,#27491,.T.); +#27578 = ORIENTED_EDGE('',*,*,#27579,.F.); +#27579 = EDGE_CURVE('',#27580,#27494,#27582,.T.); +#27580 = VERTEX_POINT('',#27581); +#27581 = CARTESIAN_POINT('',(21.287253079523,59.470537947551, + 45.604776494726)); +#27582 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27583,#27584,#27585,#27586, + #27587,#27588),.UNSPECIFIED.,.F.,.F.,(4,2,4),(0.,0.5,1.), + .UNSPECIFIED.); +#27583 = CARTESIAN_POINT('',(21.287253079523,59.470537947551, + 45.604776494726)); +#27584 = CARTESIAN_POINT('',(19.829423789467,58.872342835746, + 46.181745339063)); +#27585 = CARTESIAN_POINT('',(18.379618857076,58.26973950518, + 46.779239220696)); +#27586 = CARTESIAN_POINT('',(15.499275144468,57.053948892404, + 48.023506752943)); +#27587 = CARTESIAN_POINT('',(14.068717737961,56.440771842637, + 48.670232760451)); +#27588 = CARTESIAN_POINT('',(12.65,55.821090615064,49.347242766834)); +#27589 = ORIENTED_EDGE('',*,*,#27590,.T.); +#27590 = EDGE_CURVE('',#27580,#27591,#27593,.T.); +#27591 = VERTEX_POINT('',#27592); +#27592 = CARTESIAN_POINT('',(18.598751769036,47.511509279558, + 52.269028601443)); +#27593 = ELLIPSE('',#27594,38.020733700065,36.630431203854); +#27594 = AXIS2_PLACEMENT_3D('',#27595,#27596,#27597); +#27595 = CARTESIAN_POINT('',(13.356515398579,70.948562425518, + 80.455303276711)); +#27596 = DIRECTION('',(-0.965925826289,7.997948340457E-02, + -0.246151539386)); +#27597 = DIRECTION('',(0.258819045103,0.298487495629,-0.91865005135)); +#27598 = ORIENTED_EDGE('',*,*,#27599,.F.); +#27599 = EDGE_CURVE('',#27373,#27591,#27600,.T.); +#27600 = B_SPLINE_CURVE_WITH_KNOTS('',3,(#27601,#27602,#27603,#27604, + #27605,#27606,#27607,#27608),.UNSPECIFIED.,.F.,.F.,(4,2,2,4),(0.,0.5 + ,0.75,1.),.UNSPECIFIED.); +#27601 = CARTESIAN_POINT('',(12.65,46.626089929396,54.994069158932)); +#27602 = CARTESIAN_POINT('',(13.630423193607,46.779483369878, + 54.521972692451)); +#27603 = CARTESIAN_POINT('',(14.617067992268,46.929615013882, + 54.059915003289)); +#27604 = CARTESIAN_POINT('',(16.104798669533,47.150742326107, + 53.379355114835)); +#27605 = CARTESIAN_POINT('',(16.602007516206,47.223770603112, + 53.154597188947)); +#27606 = CARTESIAN_POINT('',(17.598809335981,47.368577232849, + 52.708928208532)); +#27607 = CARTESIAN_POINT('',(18.098413923476,47.44035680549, + 52.488013399511)); +#27608 = CARTESIAN_POINT('',(18.598751769036,47.511509279558, + 52.269028601443)); +#27609 = ORIENTED_EDGE('',*,*,#27382,.T.); +#27610 = ORIENTED_EDGE('',*,*,#27541,.F.); +#27611 = CONICAL_SURFACE('',#27612,36.,0.2617993875); +#27612 = AXIS2_PLACEMENT_3D('',#27613,#27614,#27615); +#27613 = CARTESIAN_POINT('',(10.65,70.133761449651,82.963002826213)); +#27614 = DIRECTION('',(1.,0.,0.)); +#27615 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#27616 = ADVANCED_FACE('',(#27617),#27752,.T.); +#27617 = FACE_BOUND('',#27618,.T.); +#27618 = EDGE_LOOP('',(#27619,#27629,#27637,#27643,#27644,#27652,#27660, + #27668,#27676,#27682,#27683,#27691,#27699,#27707,#27715,#27721, + #27722,#27730,#27738,#27746)); +#27619 = ORIENTED_EDGE('',*,*,#27620,.F.); +#27620 = EDGE_CURVE('',#27621,#27623,#27625,.T.); +#27621 = VERTEX_POINT('',#27622); +#27622 = CARTESIAN_POINT('',(14.65,124.12366726154,49.477945612807)); +#27623 = VERTEX_POINT('',#27624); +#27624 = CARTESIAN_POINT('',(7.65,124.12366726154,49.477945612807)); +#27625 = LINE('',#27626,#27627); +#27626 = CARTESIAN_POINT('',(6.25,124.12366726154,49.477945612807)); +#27627 = VECTOR('',#27628,1.); +#27628 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#27629 = ORIENTED_EDGE('',*,*,#27630,.T.); +#27630 = EDGE_CURVE('',#27621,#27631,#27633,.T.); +#27631 = VERTEX_POINT('',#27632); +#27632 = CARTESIAN_POINT('',(14.65,121.27049771265,48.550894629682)); +#27633 = LINE('',#27634,#27635); +#27634 = CARTESIAN_POINT('',(14.65,125.07472377783,49.786962607182)); +#27635 = VECTOR('',#27636,1.); +#27636 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27637 = ORIENTED_EDGE('',*,*,#27638,.F.); +#27638 = EDGE_CURVE('',#27409,#27631,#27639,.T.); +#27639 = LINE('',#27640,#27641); +#27640 = CARTESIAN_POINT('',(12.65,121.27049771265,48.550894629682)); +#27641 = VECTOR('',#27642,1.); +#27642 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#27643 = ORIENTED_EDGE('',*,*,#27408,.T.); +#27644 = ORIENTED_EDGE('',*,*,#27645,.F.); +#27645 = EDGE_CURVE('',#27646,#27401,#27648,.T.); +#27646 = VERTEX_POINT('',#27647); +#27647 = CARTESIAN_POINT('',(19.65,114.61310209858,46.387775669058)); +#27648 = LINE('',#27649,#27650); +#27649 = CARTESIAN_POINT('',(6.25,114.61310209858,46.387775669058)); +#27650 = VECTOR('',#27651,1.); +#27651 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#27652 = ORIENTED_EDGE('',*,*,#27653,.T.); +#27653 = EDGE_CURVE('',#27646,#27654,#27656,.T.); +#27654 = VERTEX_POINT('',#27655); +#27655 = CARTESIAN_POINT('',(19.65,109.85781951711,44.842690697183)); +#27656 = LINE('',#27657,#27658); +#27657 = CARTESIAN_POINT('',(19.65,41.340983800763,22.580221249386)); +#27658 = VECTOR('',#27659,1.); +#27659 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27660 = ORIENTED_EDGE('',*,*,#27661,.T.); +#27661 = EDGE_CURVE('',#27654,#27662,#27664,.T.); +#27662 = VERTEX_POINT('',#27663); +#27663 = CARTESIAN_POINT('',(25.65356903,109.85781951711,44.842690697183 + )); +#27664 = LINE('',#27665,#27666); +#27665 = CARTESIAN_POINT('',(19.821657496078,109.85781951711, + 44.842690697183)); +#27666 = VECTOR('',#27667,1.); +#27667 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#27668 = ORIENTED_EDGE('',*,*,#27669,.T.); +#27669 = EDGE_CURVE('',#27662,#27670,#27672,.T.); +#27670 = VERTEX_POINT('',#27671); +#27671 = CARTESIAN_POINT('',(25.65356903,104.64194423991,43.147950086527 + )); +#27672 = LINE('',#27673,#27674); +#27673 = CARTESIAN_POINT('',(25.65356903,41.340983800763,22.580221249386 + )); +#27674 = VECTOR('',#27675,1.); +#27675 = DIRECTION('',(6.247150620202E-16,-0.951056516295, + -0.309016994375)); +#27676 = ORIENTED_EDGE('',*,*,#27677,.T.); +#27677 = EDGE_CURVE('',#27670,#27511,#27678,.T.); +#27678 = LINE('',#27679,#27680); +#27679 = CARTESIAN_POINT('',(88.334058083,88.668772749989, + 37.957952058144)); +#27680 = VECTOR('',#27681,1.); +#27681 = DIRECTION('',(-0.965925826289,0.246151539386,7.997948340457E-02 + )); +#27682 = ORIENTED_EDGE('',*,*,#27510,.T.); +#27683 = ORIENTED_EDGE('',*,*,#27684,.T.); +#27684 = EDGE_CURVE('',#27503,#27685,#27687,.T.); +#27685 = VERTEX_POINT('',#27686); +#27686 = CARTESIAN_POINT('',(25.65356903,65.618755946963,30.468547600341 + )); +#27687 = LINE('',#27688,#27689); +#27688 = CARTESIAN_POINT('',(65.312625842959,75.725264769294, + 33.752351376868)); +#27689 = VECTOR('',#27690,1.); +#27690 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340457E-02) + ); +#27691 = ORIENTED_EDGE('',*,*,#27692,.T.); +#27692 = EDGE_CURVE('',#27685,#27693,#27695,.T.); +#27693 = VERTEX_POINT('',#27694); +#27694 = CARTESIAN_POINT('',(25.65356903,60.402880669766,28.773806989686 + )); +#27695 = LINE('',#27696,#27697); +#27696 = CARTESIAN_POINT('',(25.65356903,41.340983800763,22.580221249386 + )); +#27697 = VECTOR('',#27698,1.); +#27698 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27699 = ORIENTED_EDGE('',*,*,#27700,.T.); +#27700 = EDGE_CURVE('',#27693,#27701,#27703,.T.); +#27701 = VERTEX_POINT('',#27702); +#27702 = CARTESIAN_POINT('',(19.65,60.402880669766,28.773806989686)); +#27703 = LINE('',#27704,#27705); +#27704 = CARTESIAN_POINT('',(19.821657496078,60.402880669766, + 28.773806989686)); +#27705 = VECTOR('',#27706,1.); +#27706 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#27707 = ORIENTED_EDGE('',*,*,#27708,.T.); +#27708 = EDGE_CURVE('',#27701,#27709,#27711,.T.); +#27709 = VERTEX_POINT('',#27710); +#27710 = CARTESIAN_POINT('',(19.65,55.64759808829,27.228722017811)); +#27711 = LINE('',#27712,#27713); +#27712 = CARTESIAN_POINT('',(19.65,41.340983800763,22.580221249386)); +#27713 = VECTOR('',#27714,1.); +#27714 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27715 = ORIENTED_EDGE('',*,*,#27716,.F.); +#27716 = EDGE_CURVE('',#27375,#27709,#27717,.T.); +#27717 = LINE('',#27718,#27719); +#27718 = CARTESIAN_POINT('',(6.25,55.64759808829,27.228722017811)); +#27719 = VECTOR('',#27720,1.); +#27720 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#27721 = ORIENTED_EDGE('',*,*,#27477,.T.); +#27722 = ORIENTED_EDGE('',*,*,#27723,.F.); +#27723 = EDGE_CURVE('',#27724,#27470,#27726,.T.); +#27724 = VERTEX_POINT('',#27725); +#27725 = CARTESIAN_POINT('',(14.65,48.990202474224,25.065603057186)); +#27726 = LINE('',#27727,#27728); +#27727 = CARTESIAN_POINT('',(12.65,48.990202474224,25.065603057186)); +#27728 = VECTOR('',#27729,1.); +#27729 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#27730 = ORIENTED_EDGE('',*,*,#27731,.T.); +#27731 = EDGE_CURVE('',#27724,#27732,#27734,.T.); +#27732 = VERTEX_POINT('',#27733); +#27733 = CARTESIAN_POINT('',(14.65,46.137032925339,24.138552074062)); +#27734 = LINE('',#27735,#27736); +#27735 = CARTESIAN_POINT('',(14.65,45.185976409043,23.829535079687)); +#27736 = VECTOR('',#27737,1.); +#27737 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27738 = ORIENTED_EDGE('',*,*,#27739,.F.); +#27739 = EDGE_CURVE('',#27740,#27732,#27742,.T.); +#27740 = VERTEX_POINT('',#27741); +#27741 = CARTESIAN_POINT('',(7.65,46.137032925339,24.138552074062)); +#27742 = LINE('',#27743,#27744); +#27743 = CARTESIAN_POINT('',(6.25,46.137032925339,24.138552074062)); +#27744 = VECTOR('',#27745,1.); +#27745 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#27746 = ORIENTED_EDGE('',*,*,#27747,.T.); +#27747 = EDGE_CURVE('',#27740,#27623,#27748,.T.); +#27748 = LINE('',#27749,#27750); +#27749 = CARTESIAN_POINT('',(7.65,124.12366726154,49.477945612807)); +#27750 = VECTOR('',#27751,1.); +#27751 = DIRECTION('',(-1.094764425254E-47,0.951056516295,0.309016994375 + )); +#27752 = PLANE('',#27753); +#27753 = AXIS2_PLACEMENT_3D('',#27754,#27755,#27756); +#27754 = CARTESIAN_POINT('',(75.,41.340983800763,22.580221249386)); +#27755 = DIRECTION('',(5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#27756 = DIRECTION('',(-3.538835890993E-15,-0.951056516295, + -0.309016994375)); +#27757 = ADVANCED_FACE('',(#27758),#27794,.T.); +#27758 = FACE_BOUND('',#27759,.T.); +#27759 = EDGE_LOOP('',(#27760,#27770,#27779,#27787)); +#27760 = ORIENTED_EDGE('',*,*,#27761,.F.); +#27761 = EDGE_CURVE('',#27762,#27764,#27766,.T.); +#27762 = VERTEX_POINT('',#27763); +#27763 = CARTESIAN_POINT('',(14.65,29.806093226978,106.34001913456)); +#27764 = VERTEX_POINT('',#27765); +#27765 = CARTESIAN_POINT('',(6.65,29.806093226978,106.34001913456)); +#27766 = LINE('',#27767,#27768); +#27767 = CARTESIAN_POINT('',(0.25,29.806093226978,106.34001913456)); +#27768 = VECTOR('',#27769,1.); +#27769 = DIRECTION('',(-1.,0.,0.)); +#27770 = ORIENTED_EDGE('',*,*,#27771,.F.); +#27771 = EDGE_CURVE('',#27772,#27762,#27774,.T.); +#27772 = VERTEX_POINT('',#27773); +#27773 = CARTESIAN_POINT('',(14.65,89.018864956661,125.57941493807)); +#27774 = CIRCLE('',#27775,80.); +#27775 = AXIS2_PLACEMENT_3D('',#27776,#27777,#27778); +#27776 = CARTESIAN_POINT('',(14.65,82.185424230274,45.871798690702)); +#27777 = DIRECTION('',(1.,0.,0.)); +#27778 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27779 = ORIENTED_EDGE('',*,*,#27780,.F.); +#27780 = EDGE_CURVE('',#27781,#27772,#27783,.T.); +#27781 = VERTEX_POINT('',#27782); +#27782 = CARTESIAN_POINT('',(6.65,89.018864956661,125.57941493807)); +#27783 = LINE('',#27784,#27785); +#27784 = CARTESIAN_POINT('',(0.25,89.018864956661,125.57941493807)); +#27785 = VECTOR('',#27786,1.); +#27786 = DIRECTION('',(1.,0.,0.)); +#27787 = ORIENTED_EDGE('',*,*,#27788,.F.); +#27788 = EDGE_CURVE('',#27764,#27781,#27789,.T.); +#27789 = CIRCLE('',#27790,80.); +#27790 = AXIS2_PLACEMENT_3D('',#27791,#27792,#27793); +#27791 = CARTESIAN_POINT('',(6.65,82.185424230274,45.871798690702)); +#27792 = DIRECTION('',(-1.,0.,0.)); +#27793 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27794 = CYLINDRICAL_SURFACE('',#27795,80.); +#27795 = AXIS2_PLACEMENT_3D('',#27796,#27797,#27798); +#27796 = CARTESIAN_POINT('',(0.25,82.185424230274,45.871798690702)); +#27797 = DIRECTION('',(1.,0.,0.)); +#27798 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27799 = ADVANCED_FACE('',(#27800),#27833,.T.); +#27800 = FACE_BOUND('',#27801,.T.); +#27801 = EDGE_LOOP('',(#27802,#27803,#27811,#27819,#27827)); +#27802 = ORIENTED_EDGE('',*,*,#27739,.T.); +#27803 = ORIENTED_EDGE('',*,*,#27804,.F.); +#27804 = EDGE_CURVE('',#27805,#27732,#27807,.T.); +#27805 = VERTEX_POINT('',#27806); +#27806 = CARTESIAN_POINT('',(14.65,31.14044428155,70.29330605684)); +#27807 = LINE('',#27808,#27809); +#27808 = CARTESIAN_POINT('',(14.65,22.326396079063,97.420157105501)); +#27809 = VECTOR('',#27810,1.); +#27810 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27811 = ORIENTED_EDGE('',*,*,#27812,.F.); +#27812 = EDGE_CURVE('',#27813,#27805,#27815,.T.); +#27813 = VERTEX_POINT('',#27814); +#27814 = CARTESIAN_POINT('',(6.65,31.14044428155,70.29330605684)); +#27815 = LINE('',#27816,#27817); +#27816 = CARTESIAN_POINT('',(0.25,31.14044428155,70.29330605684)); +#27817 = VECTOR('',#27818,1.); +#27818 = DIRECTION('',(1.,0.,0.)); +#27819 = ORIENTED_EDGE('',*,*,#27820,.F.); +#27820 = EDGE_CURVE('',#27821,#27813,#27823,.T.); +#27821 = VERTEX_POINT('',#27822); +#27822 = CARTESIAN_POINT('',(6.65,45.828015930964,25.089608590357)); +#27823 = LINE('',#27824,#27825); +#27824 = CARTESIAN_POINT('',(6.65,37.938818157799,49.370062698347)); +#27825 = VECTOR('',#27826,1.); +#27826 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#27827 = ORIENTED_EDGE('',*,*,#27828,.T.); +#27828 = EDGE_CURVE('',#27821,#27740,#27829,.T.); +#27829 = LINE('',#27830,#27831); +#27830 = CARTESIAN_POINT('',(7.65,46.137032925339,24.138552074062)); +#27831 = VECTOR('',#27832,1.); +#27832 = DIRECTION('',(0.707106781187,0.218508012224,-0.672498511964)); +#27833 = PLANE('',#27834); +#27834 = AXIS2_PLACEMENT_3D('',#27835,#27836,#27837); +#27835 = CARTESIAN_POINT('',(6.25,37.938818157799,49.370062698347)); +#27836 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27837 = DIRECTION('',(1.,0.,0.)); +#27838 = ADVANCED_FACE('',(#27839),#27866,.T.); +#27839 = FACE_BOUND('',#27840,.T.); +#27840 = EDGE_LOOP('',(#27841,#27842,#27851,#27859)); +#27841 = ORIENTED_EDGE('',*,*,#27812,.T.); +#27842 = ORIENTED_EDGE('',*,*,#27843,.F.); +#27843 = EDGE_CURVE('',#27844,#27805,#27846,.T.); +#27844 = VERTEX_POINT('',#27845); +#27845 = CARTESIAN_POINT('',(14.65,27.517349337786,101.84810633322)); +#27846 = CIRCLE('',#27847,80.); +#27847 = AXIS2_PLACEMENT_3D('',#27848,#27849,#27850); +#27848 = CARTESIAN_POINT('',(14.65,107.22496558516,95.014665606836)); +#27849 = DIRECTION('',(1.,0.,0.)); +#27850 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27851 = ORIENTED_EDGE('',*,*,#27852,.T.); +#27852 = EDGE_CURVE('',#27844,#27853,#27855,.T.); +#27853 = VERTEX_POINT('',#27854); +#27854 = CARTESIAN_POINT('',(6.65,27.517349337786,101.84810633322)); +#27855 = LINE('',#27856,#27857); +#27856 = CARTESIAN_POINT('',(0.25,27.517349337786,101.84810633322)); +#27857 = VECTOR('',#27858,1.); +#27858 = DIRECTION('',(-1.,0.,0.)); +#27859 = ORIENTED_EDGE('',*,*,#27860,.F.); +#27860 = EDGE_CURVE('',#27813,#27853,#27861,.T.); +#27861 = CIRCLE('',#27862,80.); +#27862 = AXIS2_PLACEMENT_3D('',#27863,#27864,#27865); +#27863 = CARTESIAN_POINT('',(6.65,107.22496558516,95.014665606836)); +#27864 = DIRECTION('',(-1.,0.,0.)); +#27865 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27866 = CYLINDRICAL_SURFACE('',#27867,80.); +#27867 = AXIS2_PLACEMENT_3D('',#27868,#27869,#27870); +#27868 = CARTESIAN_POINT('',(0.25,107.22496558516,95.014665606836)); +#27869 = DIRECTION('',(1.,0.,0.)); +#27870 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27871 = ADVANCED_FACE('',(#27872),#27890,.T.); +#27872 = FACE_BOUND('',#27873,.T.); +#27873 = EDGE_LOOP('',(#27874,#27875,#27882,#27883)); +#27874 = ORIENTED_EDGE('',*,*,#27852,.F.); +#27875 = ORIENTED_EDGE('',*,*,#27876,.F.); +#27876 = EDGE_CURVE('',#27762,#27844,#27877,.T.); +#27877 = CIRCLE('',#27878,6.7); +#27878 = AXIS2_PLACEMENT_3D('',#27879,#27880,#27881); +#27879 = CARTESIAN_POINT('',(14.65,34.192862198504,101.27580567238)); +#27880 = DIRECTION('',(1.,0.,0.)); +#27881 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27882 = ORIENTED_EDGE('',*,*,#27761,.T.); +#27883 = ORIENTED_EDGE('',*,*,#27884,.F.); +#27884 = EDGE_CURVE('',#27853,#27764,#27885,.T.); +#27885 = CIRCLE('',#27886,6.7); +#27886 = AXIS2_PLACEMENT_3D('',#27887,#27888,#27889); +#27887 = CARTESIAN_POINT('',(6.65,34.192862198504,101.27580567238)); +#27888 = DIRECTION('',(-1.,0.,0.)); +#27889 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27890 = CYLINDRICAL_SURFACE('',#27891,6.7); +#27891 = AXIS2_PLACEMENT_3D('',#27892,#27893,#27894); +#27892 = CARTESIAN_POINT('',(0.25,34.192862198504,101.27580567238)); +#27893 = DIRECTION('',(1.,0.,0.)); +#27894 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27895 = ADVANCED_FACE('',(#27896),#27929,.T.); +#27896 = FACE_BOUND('',#27897,.T.); +#27897 = EDGE_LOOP('',(#27898,#27908,#27914,#27915,#27923)); +#27898 = ORIENTED_EDGE('',*,*,#27899,.F.); +#27899 = EDGE_CURVE('',#27900,#27902,#27904,.T.); +#27900 = VERTEX_POINT('',#27901); +#27901 = CARTESIAN_POINT('',(14.65,109.12707861775,95.632699595586)); +#27902 = VERTEX_POINT('',#27903); +#27903 = CARTESIAN_POINT('',(6.65,109.12707861775,95.632699595586)); +#27904 = LINE('',#27905,#27906); +#27905 = CARTESIAN_POINT('',(0.25,109.12707861775,95.632699595586)); +#27906 = VECTOR('',#27907,1.); +#27907 = DIRECTION('',(-1.,0.,0.)); +#27908 = ORIENTED_EDGE('',*,*,#27909,.F.); +#27909 = EDGE_CURVE('',#27621,#27900,#27910,.T.); +#27910 = LINE('',#27911,#27912); +#27911 = CARTESIAN_POINT('',(14.65,100.31303041526,122.75955064424)); +#27912 = VECTOR('',#27913,1.); +#27913 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#27914 = ORIENTED_EDGE('',*,*,#27620,.T.); +#27915 = ORIENTED_EDGE('',*,*,#27916,.T.); +#27916 = EDGE_CURVE('',#27623,#27917,#27919,.T.); +#27917 = VERTEX_POINT('',#27918); +#27918 = CARTESIAN_POINT('',(6.65,123.81465026716,50.429002129102)); +#27919 = LINE('',#27920,#27921); +#27920 = CARTESIAN_POINT('',(7.65,124.12366726154,49.477945612807)); +#27921 = VECTOR('',#27922,1.); +#27922 = DIRECTION('',(-0.707106781187,-0.218508012224,0.672498511964)); +#27923 = ORIENTED_EDGE('',*,*,#27924,.F.); +#27924 = EDGE_CURVE('',#27902,#27917,#27925,.T.); +#27925 = LINE('',#27926,#27927); +#27926 = CARTESIAN_POINT('',(6.65,115.925452494,74.709456237092)); +#27927 = VECTOR('',#27928,1.); +#27928 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#27929 = PLANE('',#27930); +#27930 = AXIS2_PLACEMENT_3D('',#27931,#27932,#27933); +#27931 = CARTESIAN_POINT('',(6.25,115.925452494,74.709456237092)); +#27932 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27933 = DIRECTION('',(1.,0.,-0.)); +#27934 = ADVANCED_FACE('',(#27935),#27962,.T.); +#27935 = FACE_BOUND('',#27936,.T.); +#27936 = EDGE_LOOP('',(#27937,#27947,#27954,#27955)); +#27937 = ORIENTED_EDGE('',*,*,#27938,.T.); +#27938 = EDGE_CURVE('',#27939,#27941,#27943,.T.); +#27939 = VERTEX_POINT('',#27940); +#27940 = CARTESIAN_POINT('',(6.65,93.510777757999,123.29067104888)); +#27941 = VERTEX_POINT('',#27942); +#27942 = CARTESIAN_POINT('',(14.65,93.510777757999,123.29067104888)); +#27943 = LINE('',#27944,#27945); +#27944 = CARTESIAN_POINT('',(0.25,93.510777757999,123.29067104888)); +#27945 = VECTOR('',#27946,1.); +#27946 = DIRECTION('',(1.,0.,0.)); +#27947 = ORIENTED_EDGE('',*,*,#27948,.F.); +#27948 = EDGE_CURVE('',#27900,#27941,#27949,.T.); +#27949 = CIRCLE('',#27950,80.); +#27950 = AXIS2_PLACEMENT_3D('',#27951,#27952,#27953); +#27951 = CARTESIAN_POINT('',(14.65,33.04255731414,70.91134004559)); +#27952 = DIRECTION('',(1.,0.,0.)); +#27953 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27954 = ORIENTED_EDGE('',*,*,#27899,.T.); +#27955 = ORIENTED_EDGE('',*,*,#27956,.F.); +#27956 = EDGE_CURVE('',#27939,#27902,#27957,.T.); +#27957 = CIRCLE('',#27958,80.); +#27958 = AXIS2_PLACEMENT_3D('',#27959,#27960,#27961); +#27959 = CARTESIAN_POINT('',(6.65,33.04255731414,70.91134004559)); +#27960 = DIRECTION('',(-1.,0.,0.)); +#27961 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27962 = CYLINDRICAL_SURFACE('',#27963,80.); +#27963 = AXIS2_PLACEMENT_3D('',#27964,#27965,#27966); +#27964 = CARTESIAN_POINT('',(0.25,33.04255731414,70.91134004559)); +#27965 = DIRECTION('',(1.,0.,0.)); +#27966 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#27967 = ADVANCED_FACE('',(#27968),#27986,.T.); +#27968 = FACE_BOUND('',#27969,.T.); +#27969 = EDGE_LOOP('',(#27970,#27971,#27978,#27979)); +#27970 = ORIENTED_EDGE('',*,*,#27780,.T.); +#27971 = ORIENTED_EDGE('',*,*,#27972,.F.); +#27972 = EDGE_CURVE('',#27941,#27772,#27973,.T.); +#27973 = CIRCLE('',#27974,6.7); +#27974 = AXIS2_PLACEMENT_3D('',#27975,#27976,#27977); +#27975 = CARTESIAN_POINT('',(14.65,88.446564295826,118.90390207736)); +#27976 = DIRECTION('',(1.,0.,0.)); +#27977 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#27978 = ORIENTED_EDGE('',*,*,#27938,.F.); +#27979 = ORIENTED_EDGE('',*,*,#27980,.F.); +#27980 = EDGE_CURVE('',#27781,#27939,#27981,.T.); +#27981 = CIRCLE('',#27982,6.7); +#27982 = AXIS2_PLACEMENT_3D('',#27983,#27984,#27985); +#27983 = CARTESIAN_POINT('',(6.65,88.446564295826,118.90390207736)); +#27984 = DIRECTION('',(-1.,0.,0.)); +#27985 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#27986 = CYLINDRICAL_SURFACE('',#27987,6.7); +#27987 = AXIS2_PLACEMENT_3D('',#27988,#27989,#27990); +#27988 = CARTESIAN_POINT('',(0.25,88.446564295826,118.90390207736)); +#27989 = DIRECTION('',(1.,0.,0.)); +#27990 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#27991 = ADVANCED_FACE('',(#27992,#28003,#28018,#28029,#28040,#28051), + #28062,.F.); +#27992 = FACE_BOUND('',#27993,.T.); +#27993 = EDGE_LOOP('',(#27994)); +#27994 = ORIENTED_EDGE('',*,*,#27995,.T.); +#27995 = EDGE_CURVE('',#27996,#27996,#27998,.T.); +#27996 = VERTEX_POINT('',#27997); +#27997 = CARTESIAN_POINT('',(6.65,107.51028254005,95.107370705148)); +#27998 = CIRCLE('',#27999,39.3); +#27999 = AXIS2_PLACEMENT_3D('',#28000,#28001,#28002); +#28000 = CARTESIAN_POINT('',(6.65,70.133761449651,82.963002826213)); +#28001 = DIRECTION('',(1.,0.,0.)); +#28002 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28003 = FACE_BOUND('',#28004,.T.); +#28004 = EDGE_LOOP('',(#28005,#28006,#28012,#28013,#28014,#28015,#28016, + #28017)); +#28005 = ORIENTED_EDGE('',*,*,#27924,.T.); +#28006 = ORIENTED_EDGE('',*,*,#28007,.T.); +#28007 = EDGE_CURVE('',#27917,#27821,#28008,.T.); +#28008 = LINE('',#28009,#28010); +#28009 = CARTESIAN_POINT('',(6.65,45.828015930964,25.089608590357)); +#28010 = VECTOR('',#28011,1.); +#28011 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28012 = ORIENTED_EDGE('',*,*,#27820,.T.); +#28013 = ORIENTED_EDGE('',*,*,#27860,.T.); +#28014 = ORIENTED_EDGE('',*,*,#27884,.T.); +#28015 = ORIENTED_EDGE('',*,*,#27788,.T.); +#28016 = ORIENTED_EDGE('',*,*,#27980,.T.); +#28017 = ORIENTED_EDGE('',*,*,#27956,.T.); +#28018 = FACE_BOUND('',#28019,.T.); +#28019 = EDGE_LOOP('',(#28020)); +#28020 = ORIENTED_EDGE('',*,*,#28021,.T.); +#28021 = EDGE_CURVE('',#28022,#28022,#28024,.T.); +#28022 = VERTEX_POINT('',#28023); +#28023 = CARTESIAN_POINT('',(6.65,33.662543950035,102.33962080964)); +#28024 = CIRCLE('',#28025,1.); +#28025 = AXIS2_PLACEMENT_3D('',#28026,#28027,#28028); +#28026 = CARTESIAN_POINT('',(6.65,32.711487433739,102.03060381527)); +#28027 = DIRECTION('',(1.,0.,0.)); +#28028 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28029 = FACE_BOUND('',#28030,.T.); +#28030 = EDGE_LOOP('',(#28031)); +#28031 = ORIENTED_EDGE('',*,*,#28032,.F.); +#28032 = EDGE_CURVE('',#28033,#28033,#28035,.T.); +#28033 = VERTEX_POINT('',#28034); +#28034 = CARTESIAN_POINT('',(6.65,52.017216976885,45.849745804676)); +#28035 = CIRCLE('',#28036,1.); +#28036 = AXIS2_PLACEMENT_3D('',#28037,#28038,#28039); +#28037 = CARTESIAN_POINT('',(6.65,51.06616046059,45.540728810301)); +#28038 = DIRECTION('',(-1.,0.,0.)); +#28039 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28040 = FACE_BOUND('',#28041,.T.); +#28041 = EDGE_LOOP('',(#28042)); +#28042 = ORIENTED_EDGE('',*,*,#28043,.T.); +#28043 = EDGE_CURVE('',#28044,#28044,#28046,.T.); +#28044 = VERTEX_POINT('',#28045); +#28045 = CARTESIAN_POINT('',(6.65,90.152418955007,120.69429383649)); +#28046 = CIRCLE('',#28047,1.); +#28047 = AXIS2_PLACEMENT_3D('',#28048,#28049,#28050); +#28048 = CARTESIAN_POINT('',(6.65,89.201362438712,120.38527684212)); +#28049 = DIRECTION('',(1.,0.,0.)); +#28050 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28051 = FACE_BOUND('',#28052,.T.); +#28052 = EDGE_LOOP('',(#28053)); +#28053 = ORIENTED_EDGE('',*,*,#28054,.F.); +#28054 = EDGE_CURVE('',#28055,#28055,#28057,.T.); +#28055 = VERTEX_POINT('',#28056); +#28056 = CARTESIAN_POINT('',(6.65,108.50709198185,64.204418831527)); +#28057 = CIRCLE('',#28058,1.); +#28058 = AXIS2_PLACEMENT_3D('',#28059,#28060,#28061); +#28059 = CARTESIAN_POINT('',(6.65,107.55603546556,63.895401837152)); +#28060 = DIRECTION('',(-1.,0.,0.)); +#28061 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28062 = PLANE('',#28063); +#28063 = AXIS2_PLACEMENT_3D('',#28064,#28065,#28066); +#28064 = CARTESIAN_POINT('',(6.65,70.133761449651,82.963002826213)); +#28065 = DIRECTION('',(1.,0.,0.)); +#28066 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28067 = ADVANCED_FACE('',(#28068),#28103,.F.); +#28068 = FACE_BOUND('',#28069,.F.); +#28069 = EDGE_LOOP('',(#28070,#28081,#28088,#28095,#28096)); +#28070 = ORIENTED_EDGE('',*,*,#28071,.F.); +#28071 = EDGE_CURVE('',#28072,#28074,#28076,.T.); +#28072 = VERTEX_POINT('',#28073); +#28073 = CARTESIAN_POINT('',(7.25,106.93964863027,94.921960508523)); +#28074 = VERTEX_POINT('',#28075); +#28075 = CARTESIAN_POINT('',(7.25,33.327874269028,71.004045143903)); +#28076 = CIRCLE('',#28077,38.7); +#28077 = AXIS2_PLACEMENT_3D('',#28078,#28079,#28080); +#28078 = CARTESIAN_POINT('',(7.25,70.133761449651,82.963002826213)); +#28079 = DIRECTION('',(-1.,0.,0.)); +#28080 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#28081 = ORIENTED_EDGE('',*,*,#28082,.T.); +#28082 = EDGE_CURVE('',#28072,#28083,#28085,.T.); +#28083 = VERTEX_POINT('',#28084); +#28084 = CARTESIAN_POINT('',(7.95,106.93964863027,94.921960508523)); +#28085 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28086,#28087),.UNSPECIFIED., + .F.,.F.,(2,2),(0.6,1.3),.PIECEWISE_BEZIER_KNOTS.); +#28086 = CARTESIAN_POINT('',(7.25,106.93964863027,94.921960508523)); +#28087 = CARTESIAN_POINT('',(7.95,106.93964863027,94.921960508523)); +#28088 = ORIENTED_EDGE('',*,*,#28089,.T.); +#28089 = EDGE_CURVE('',#28083,#28083,#28090,.T.); +#28090 = CIRCLE('',#28091,38.7); +#28091 = AXIS2_PLACEMENT_3D('',#28092,#28093,#28094); +#28092 = CARTESIAN_POINT('',(7.95,70.133761449651,82.963002826213)); +#28093 = DIRECTION('',(-1.,0.,0.)); +#28094 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28095 = ORIENTED_EDGE('',*,*,#28082,.F.); +#28096 = ORIENTED_EDGE('',*,*,#28097,.F.); +#28097 = EDGE_CURVE('',#28074,#28072,#28098,.T.); +#28098 = CIRCLE('',#28099,38.7); +#28099 = AXIS2_PLACEMENT_3D('',#28100,#28101,#28102); +#28100 = CARTESIAN_POINT('',(7.25,70.133761449651,82.963002826213)); +#28101 = DIRECTION('',(-1.,0.,0.)); +#28102 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#28103 = CYLINDRICAL_SURFACE('',#28104,38.7); +#28104 = AXIS2_PLACEMENT_3D('',#28105,#28106,#28107); +#28105 = CARTESIAN_POINT('',(6.65,70.133761449651,82.963002826213)); +#28106 = DIRECTION('',(1.,0.,0.)); +#28107 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28108 = ADVANCED_FACE('',(#28109),#28127,.F.); +#28109 = FACE_BOUND('',#28110,.F.); +#28110 = EDGE_LOOP('',(#28111,#28120,#28125,#28126)); +#28111 = ORIENTED_EDGE('',*,*,#28112,.T.); +#28112 = EDGE_CURVE('',#28113,#28113,#28115,.T.); +#28113 = VERTEX_POINT('',#28114); +#28114 = CARTESIAN_POINT('',(12.65,52.017216976885,45.849745804676)); +#28115 = CIRCLE('',#28116,1.); +#28116 = AXIS2_PLACEMENT_3D('',#28117,#28118,#28119); +#28117 = CARTESIAN_POINT('',(12.65,51.06616046059,45.540728810301)); +#28118 = DIRECTION('',(-1.,0.,0.)); +#28119 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28120 = ORIENTED_EDGE('',*,*,#28121,.F.); +#28121 = EDGE_CURVE('',#28033,#28113,#28122,.T.); +#28122 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28123,#28124),.UNSPECIFIED., + .F.,.F.,(2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#28123 = CARTESIAN_POINT('',(6.65,52.017216976885,45.849745804676)); +#28124 = CARTESIAN_POINT('',(12.65,52.017216976885,45.849745804676)); +#28125 = ORIENTED_EDGE('',*,*,#28032,.F.); +#28126 = ORIENTED_EDGE('',*,*,#28121,.T.); +#28127 = CYLINDRICAL_SURFACE('',#28128,1.); +#28128 = AXIS2_PLACEMENT_3D('',#28129,#28130,#28131); +#28129 = CARTESIAN_POINT('',(0.25,51.06616046059,45.540728810301)); +#28130 = DIRECTION('',(1.,0.,0.)); +#28131 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28132 = ADVANCED_FACE('',(#28133),#28143,.F.); +#28133 = FACE_BOUND('',#28134,.F.); +#28134 = EDGE_LOOP('',(#28135,#28136,#28141,#28142)); +#28135 = ORIENTED_EDGE('',*,*,#27350,.F.); +#28136 = ORIENTED_EDGE('',*,*,#28137,.F.); +#28137 = EDGE_CURVE('',#28022,#27351,#28138,.T.); +#28138 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28139,#28140),.UNSPECIFIED., + .F.,.F.,(2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#28139 = CARTESIAN_POINT('',(6.65,33.662543950035,102.33962080964)); +#28140 = CARTESIAN_POINT('',(12.65,33.662543950035,102.33962080964)); +#28141 = ORIENTED_EDGE('',*,*,#28021,.T.); +#28142 = ORIENTED_EDGE('',*,*,#28137,.T.); +#28143 = CYLINDRICAL_SURFACE('',#28144,1.); +#28144 = AXIS2_PLACEMENT_3D('',#28145,#28146,#28147); +#28145 = CARTESIAN_POINT('',(0.25,32.711487433739,102.03060381527)); +#28146 = DIRECTION('',(1.,0.,0.)); +#28147 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28148 = ADVANCED_FACE('',(#28149),#28167,.F.); +#28149 = FACE_BOUND('',#28150,.F.); +#28150 = EDGE_LOOP('',(#28151,#28160,#28165,#28166)); +#28151 = ORIENTED_EDGE('',*,*,#28152,.T.); +#28152 = EDGE_CURVE('',#28153,#28153,#28155,.T.); +#28153 = VERTEX_POINT('',#28154); +#28154 = CARTESIAN_POINT('',(12.65,108.50709198185,64.204418831527)); +#28155 = CIRCLE('',#28156,1.); +#28156 = AXIS2_PLACEMENT_3D('',#28157,#28158,#28159); +#28157 = CARTESIAN_POINT('',(12.65,107.55603546556,63.895401837152)); +#28158 = DIRECTION('',(-1.,0.,0.)); +#28159 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28160 = ORIENTED_EDGE('',*,*,#28161,.F.); +#28161 = EDGE_CURVE('',#28055,#28153,#28162,.T.); +#28162 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28163,#28164),.UNSPECIFIED., + .F.,.F.,(2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#28163 = CARTESIAN_POINT('',(6.65,108.50709198185,64.204418831527)); +#28164 = CARTESIAN_POINT('',(12.65,108.50709198185,64.204418831527)); +#28165 = ORIENTED_EDGE('',*,*,#28054,.F.); +#28166 = ORIENTED_EDGE('',*,*,#28161,.T.); +#28167 = CYLINDRICAL_SURFACE('',#28168,1.); +#28168 = AXIS2_PLACEMENT_3D('',#28169,#28170,#28171); +#28169 = CARTESIAN_POINT('',(0.25,107.55603546556,63.895401837152)); +#28170 = DIRECTION('',(1.,0.,0.)); +#28171 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28172 = ADVANCED_FACE('',(#28173),#28183,.F.); +#28173 = FACE_BOUND('',#28174,.F.); +#28174 = EDGE_LOOP('',(#28175,#28176,#28181,#28182)); +#28175 = ORIENTED_EDGE('',*,*,#27361,.F.); +#28176 = ORIENTED_EDGE('',*,*,#28177,.F.); +#28177 = EDGE_CURVE('',#28044,#27362,#28178,.T.); +#28178 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28179,#28180),.UNSPECIFIED., + .F.,.F.,(2,2),(6.4,12.4),.PIECEWISE_BEZIER_KNOTS.); +#28179 = CARTESIAN_POINT('',(6.65,90.152418955007,120.69429383649)); +#28180 = CARTESIAN_POINT('',(12.65,90.152418955007,120.69429383649)); +#28181 = ORIENTED_EDGE('',*,*,#28043,.T.); +#28182 = ORIENTED_EDGE('',*,*,#28177,.T.); +#28183 = CYLINDRICAL_SURFACE('',#28184,1.); +#28184 = AXIS2_PLACEMENT_3D('',#28185,#28186,#28187); +#28185 = CARTESIAN_POINT('',(0.25,89.201362438712,120.38527684212)); +#28186 = DIRECTION('',(1.,0.,0.)); +#28187 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28188 = ADVANCED_FACE('',(#28189),#28200,.F.); +#28189 = FACE_BOUND('',#28190,.F.); +#28190 = EDGE_LOOP('',(#28191,#28192,#28197,#28198,#28199)); +#28191 = ORIENTED_EDGE('',*,*,#27995,.T.); +#28192 = ORIENTED_EDGE('',*,*,#28193,.F.); +#28193 = EDGE_CURVE('',#28072,#27996,#28194,.T.); +#28194 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28195,#28196),.UNSPECIFIED., + .F.,.F.,(2,2),(0.282842712475,1.131370849898), + .PIECEWISE_BEZIER_KNOTS.); +#28195 = CARTESIAN_POINT('',(7.249999999821,106.9396486301, + 94.921960508468)); +#28196 = CARTESIAN_POINT('',(6.649999999282,107.51028253936, + 95.107370704926)); +#28197 = ORIENTED_EDGE('',*,*,#28071,.T.); +#28198 = ORIENTED_EDGE('',*,*,#28097,.T.); +#28199 = ORIENTED_EDGE('',*,*,#28193,.T.); +#28200 = CONICAL_SURFACE('',#28201,38.5,0.7853981625); +#28201 = AXIS2_PLACEMENT_3D('',#28202,#28203,#28204); +#28202 = CARTESIAN_POINT('',(7.45,70.133761449651,82.963002826213)); +#28203 = DIRECTION('',(-1.,0.,0.)); +#28204 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#28205 = ADVANCED_FACE('',(#28206),#28216,.F.); +#28206 = FACE_BOUND('',#28207,.F.); +#28207 = EDGE_LOOP('',(#28208,#28209,#28214,#28215)); +#28208 = ORIENTED_EDGE('',*,*,#28089,.F.); +#28209 = ORIENTED_EDGE('',*,*,#28210,.F.); +#28210 = EDGE_CURVE('',#27533,#28083,#28211,.T.); +#28211 = B_SPLINE_CURVE_WITH_KNOTS('',1,(#28212,#28213),.UNSPECIFIED., + .F.,.F.,(2,2),(1.004859172656E-14,3.818376618407), + .PIECEWISE_BEZIER_KNOTS.); +#28212 = CARTESIAN_POINT('',(10.65,104.37179603627,94.087614623711)); +#28213 = CARTESIAN_POINT('',(7.949999997577,106.93964862796, + 94.921960507775)); +#28214 = ORIENTED_EDGE('',*,*,#27532,.T.); +#28215 = ORIENTED_EDGE('',*,*,#28210,.T.); +#28216 = CONICAL_SURFACE('',#28217,36.,0.7853981625); +#28217 = AXIS2_PLACEMENT_3D('',#28218,#28219,#28220); +#28218 = CARTESIAN_POINT('',(10.65,70.133761449651,82.963002826213)); +#28219 = DIRECTION('',(-1.,0.,0.)); +#28220 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#28221 = ADVANCED_FACE('',(#28222),#28228,.T.); +#28222 = FACE_BOUND('',#28223,.T.); +#28223 = EDGE_LOOP('',(#28224,#28225,#28226,#28227)); +#28224 = ORIENTED_EDGE('',*,*,#27828,.F.); +#28225 = ORIENTED_EDGE('',*,*,#28007,.F.); +#28226 = ORIENTED_EDGE('',*,*,#27916,.F.); +#28227 = ORIENTED_EDGE('',*,*,#27747,.F.); +#28228 = PLANE('',#28229); +#28229 = AXIS2_PLACEMENT_3D('',#28230,#28231,#28232); +#28230 = CARTESIAN_POINT('',(7.65,41.340983800763,22.580221249386)); +#28231 = DIRECTION('',(-0.707106781187,0.218508012224,-0.672498511964)); +#28232 = DIRECTION('',(5.551115123126E-17,-0.951056516295, + -0.309016994375)); +#28233 = ADVANCED_FACE('',(#28234),#28245,.T.); +#28234 = FACE_BOUND('',#28235,.T.); +#28235 = EDGE_LOOP('',(#28236,#28237,#28238,#28244)); +#28236 = ORIENTED_EDGE('',*,*,#27518,.F.); +#28237 = ORIENTED_EDGE('',*,*,#27677,.F.); +#28238 = ORIENTED_EDGE('',*,*,#28239,.F.); +#28239 = EDGE_CURVE('',#27561,#27670,#28240,.T.); +#28240 = LINE('',#28241,#28242); +#28241 = CARTESIAN_POINT('',(25.555601520927,104.55392706561, + 43.503786898431)); +#28242 = VECTOR('',#28243,1.); +#28243 = DIRECTION('',(0.258198889747,0.231974221834,-0.937827965961)); +#28244 = ORIENTED_EDGE('',*,*,#27569,.F.); +#28245 = PLANE('',#28246); +#28246 = AXIS2_PLACEMENT_3D('',#28247,#28248,#28249); +#28247 = CARTESIAN_POINT('',(12.65,93.884129373533,87.532517925022)); +#28248 = DIRECTION('',(-0.258819045103,-0.91865005135,-0.298487495629)); +#28249 = DIRECTION('',(0.965925826289,-0.246151539386, + -7.997948340457E-02)); +#28250 = ADVANCED_FACE('',(#28251),#28276,.F.); +#28251 = FACE_BOUND('',#28252,.T.); +#28252 = EDGE_LOOP('',(#28253,#28263,#28269,#28270)); +#28253 = ORIENTED_EDGE('',*,*,#28254,.F.); +#28254 = EDGE_CURVE('',#28255,#28257,#28259,.T.); +#28255 = VERTEX_POINT('',#28256); +#28256 = CARTESIAN_POINT('',(19.65,111.40290448898,40.087408115707)); +#28257 = VERTEX_POINT('',#28258); +#28258 = CARTESIAN_POINT('',(19.65,116.15818707046,41.632493087582)); +#28259 = LINE('',#28260,#28261); +#28260 = CARTESIAN_POINT('',(19.65,42.886068772638,17.824938667911)); +#28261 = VECTOR('',#28262,1.); +#28262 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28263 = ORIENTED_EDGE('',*,*,#28264,.F.); +#28264 = EDGE_CURVE('',#27654,#28255,#28265,.T.); +#28265 = LINE('',#28266,#28267); +#28266 = CARTESIAN_POINT('',(19.65,106.61586797346,54.820391591382)); +#28267 = VECTOR('',#28268,1.); +#28268 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#28269 = ORIENTED_EDGE('',*,*,#27653,.F.); +#28270 = ORIENTED_EDGE('',*,*,#28271,.F.); +#28271 = EDGE_CURVE('',#28257,#27646,#28272,.T.); +#28272 = LINE('',#28273,#28274); +#28273 = CARTESIAN_POINT('',(19.65,106.41488733105,71.619286293343)); +#28274 = VECTOR('',#28275,1.); +#28275 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28276 = PLANE('',#28277); +#28277 = AXIS2_PLACEMENT_3D('',#28278,#28279,#28280); +#28278 = CARTESIAN_POINT('',(19.65,81.888398549794,46.785949737633)); +#28279 = DIRECTION('',(1.,0.,0.)); +#28280 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28281 = ADVANCED_FACE('',(#28282),#28307,.T.); +#28282 = FACE_BOUND('',#28283,.T.); +#28283 = EDGE_LOOP('',(#28284,#28294,#28300,#28301)); +#28284 = ORIENTED_EDGE('',*,*,#28285,.T.); +#28285 = EDGE_CURVE('',#28286,#28288,#28290,.T.); +#28286 = VERTEX_POINT('',#28287); +#28287 = CARTESIAN_POINT('',(26.993314992156,116.15818707046, + 41.632493087582)); +#28288 = VERTEX_POINT('',#28289); +#28289 = CARTESIAN_POINT('',(26.993314992156,111.40290448898, + 40.087408115707)); +#28290 = LINE('',#28291,#28292); +#28291 = CARTESIAN_POINT('',(26.993314992156,42.886068772638, + 17.824938667911)); +#28292 = VECTOR('',#28293,1.); +#28293 = DIRECTION('',(6.247150620202E-16,-0.951056516295, + -0.309016994375)); +#28294 = ORIENTED_EDGE('',*,*,#28295,.T.); +#28295 = EDGE_CURVE('',#28288,#28255,#28296,.T.); +#28296 = LINE('',#28297,#28298); +#28297 = CARTESIAN_POINT('',(75.,111.40290448898,40.087408115707)); +#28298 = VECTOR('',#28299,1.); +#28299 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#28300 = ORIENTED_EDGE('',*,*,#28254,.T.); +#28301 = ORIENTED_EDGE('',*,*,#28302,.F.); +#28302 = EDGE_CURVE('',#28286,#28257,#28303,.T.); +#28303 = LINE('',#28304,#28305); +#28304 = CARTESIAN_POINT('',(6.25,116.15818707046,41.632493087582)); +#28305 = VECTOR('',#28306,1.); +#28306 = DIRECTION('',(-1.,1.715388910778E-17,-5.279424210553E-17)); +#28307 = PLANE('',#28308); +#28308 = AXIS2_PLACEMENT_3D('',#28309,#28310,#28311); +#28309 = CARTESIAN_POINT('',(75.,42.886068772638,17.824938667911)); +#28310 = DIRECTION('',(5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#28311 = DIRECTION('',(-3.538835890993E-15,-0.951056516295, + -0.309016994375)); +#28312 = ADVANCED_FACE('',(#28313),#28331,.T.); +#28313 = FACE_BOUND('',#28314,.T.); +#28314 = EDGE_LOOP('',(#28315,#28316,#28317,#28318,#28324,#28325)); +#28315 = ORIENTED_EDGE('',*,*,#27560,.T.); +#28316 = ORIENTED_EDGE('',*,*,#28239,.T.); +#28317 = ORIENTED_EDGE('',*,*,#27669,.F.); +#28318 = ORIENTED_EDGE('',*,*,#28319,.F.); +#28319 = EDGE_CURVE('',#28288,#27662,#28320,.T.); +#28320 = LINE('',#28321,#28322); +#28321 = CARTESIAN_POINT('',(25.65356903,109.85781951711,44.842690697183 + )); +#28322 = VECTOR('',#28323,1.); +#28323 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#28324 = ORIENTED_EDGE('',*,*,#28285,.F.); +#28325 = ORIENTED_EDGE('',*,*,#28326,.F.); +#28326 = EDGE_CURVE('',#27548,#28286,#28327,.T.); +#28327 = LINE('',#28328,#28329); +#28328 = CARTESIAN_POINT('',(17.721281296557,105.46505544218, + 74.542568260785)); +#28329 = VECTOR('',#28330,1.); +#28330 = DIRECTION('',(0.258819045103,0.298487495629,-0.91865005135)); +#28331 = PLANE('',#28332); +#28332 = AXIS2_PLACEMENT_3D('',#28333,#28334,#28335); +#28333 = CARTESIAN_POINT('',(25.65356903,109.85781951711,44.842690697183 + )); +#28334 = DIRECTION('',(0.965925826289,-7.997948340457E-02,0.246151539386 + )); +#28335 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#28336 = ADVANCED_FACE('',(#28337),#28345,.T.); +#28337 = FACE_BOUND('',#28338,.T.); +#28338 = EDGE_LOOP('',(#28339,#28340,#28341,#28342,#28343,#28344)); +#28339 = ORIENTED_EDGE('',*,*,#27547,.F.); +#28340 = ORIENTED_EDGE('',*,*,#28326,.T.); +#28341 = ORIENTED_EDGE('',*,*,#28302,.T.); +#28342 = ORIENTED_EDGE('',*,*,#28271,.T.); +#28343 = ORIENTED_EDGE('',*,*,#27645,.T.); +#28344 = ORIENTED_EDGE('',*,*,#27400,.T.); +#28345 = PLANE('',#28346); +#28346 = AXIS2_PLACEMENT_3D('',#28347,#28348,#28349); +#28347 = CARTESIAN_POINT('',(6.25,106.41488733105,71.619286293343)); +#28348 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28349 = DIRECTION('',(1.,0.,-0.)); +#28350 = ADVANCED_FACE('',(#28351),#28357,.F.); +#28351 = FACE_BOUND('',#28352,.T.); +#28352 = EDGE_LOOP('',(#28353,#28354,#28355,#28356)); +#28353 = ORIENTED_EDGE('',*,*,#27661,.F.); +#28354 = ORIENTED_EDGE('',*,*,#28264,.T.); +#28355 = ORIENTED_EDGE('',*,*,#28295,.F.); +#28356 = ORIENTED_EDGE('',*,*,#28319,.T.); +#28357 = PLANE('',#28358); +#28358 = AXIS2_PLACEMENT_3D('',#28359,#28360,#28361); +#28359 = CARTESIAN_POINT('',(19.821657496078,106.1196079236, + 56.347722977005)); +#28360 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28361 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#28362 = ADVANCED_FACE('',(#28363),#28366,.F.); +#28363 = FACE_BOUND('',#28364,.T.); +#28364 = EDGE_LOOP('',(#28365)); +#28365 = ORIENTED_EDGE('',*,*,#28152,.T.); +#28366 = PLANE('',#28367); +#28367 = AXIS2_PLACEMENT_3D('',#28368,#28369,#28370); +#28368 = CARTESIAN_POINT('',(12.65,81.888398549794,46.785949737633)); +#28369 = DIRECTION('',(1.,0.,0.)); +#28370 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28371 = ADVANCED_FACE('',(#28372),#28442,.F.); +#28372 = FACE_BOUND('',#28373,.T.); +#28373 = EDGE_LOOP('',(#28374,#28385,#28394,#28403,#28409,#28410,#28411, + #28412,#28413,#28414,#28415,#28416,#28417,#28418,#28426,#28435)); +#28374 = ORIENTED_EDGE('',*,*,#28375,.F.); +#28375 = EDGE_CURVE('',#28376,#28378,#28380,.T.); +#28376 = VERTEX_POINT('',#28377); +#28377 = CARTESIAN_POINT('',(14.65,88.762610929421,122.5903793288)); +#28378 = VERTEX_POINT('',#28379); +#28379 = CARTESIAN_POINT('',(14.65,31.770318139601,104.07246086791)); +#28380 = CIRCLE('',#28381,77.); +#28381 = AXIS2_PLACEMENT_3D('',#28382,#28383,#28384); +#28382 = CARTESIAN_POINT('',(14.65,82.185424230274,45.871798690702)); +#28383 = DIRECTION('',(1.,0.,0.)); +#28384 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28385 = ORIENTED_EDGE('',*,*,#28386,.F.); +#28386 = EDGE_CURVE('',#28387,#28376,#28389,.T.); +#28387 = VERTEX_POINT('',#28388); +#28388 = CARTESIAN_POINT('',(14.65,91.243219491354,121.32644613626)); +#28389 = CIRCLE('',#28390,3.7); +#28390 = AXIS2_PLACEMENT_3D('',#28391,#28392,#28393); +#28391 = CARTESIAN_POINT('',(14.65,88.446564295826,118.90390207736)); +#28392 = DIRECTION('',(1.,0.,0.)); +#28393 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28394 = ORIENTED_EDGE('',*,*,#28395,.F.); +#28395 = EDGE_CURVE('',#28396,#28387,#28398,.T.); +#28396 = VERTEX_POINT('',#28397); +#28397 = CARTESIAN_POINT('',(14.65,106.27390906886,94.705648612461)); +#28398 = CIRCLE('',#28399,77.); +#28399 = AXIS2_PLACEMENT_3D('',#28400,#28401,#28402); +#28400 = CARTESIAN_POINT('',(14.65,33.04255731414,70.91134004559)); +#28401 = DIRECTION('',(1.,0.,0.)); +#28402 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28403 = ORIENTED_EDGE('',*,*,#28404,.F.); +#28404 = EDGE_CURVE('',#27631,#28396,#28405,.T.); +#28405 = LINE('',#28406,#28407); +#28406 = CARTESIAN_POINT('',(14.65,106.27390906886,94.705648612461)); +#28407 = VECTOR('',#28408,1.); +#28408 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28409 = ORIENTED_EDGE('',*,*,#27630,.F.); +#28410 = ORIENTED_EDGE('',*,*,#27909,.T.); +#28411 = ORIENTED_EDGE('',*,*,#27948,.T.); +#28412 = ORIENTED_EDGE('',*,*,#27972,.T.); +#28413 = ORIENTED_EDGE('',*,*,#27771,.T.); +#28414 = ORIENTED_EDGE('',*,*,#27876,.T.); +#28415 = ORIENTED_EDGE('',*,*,#27843,.T.); +#28416 = ORIENTED_EDGE('',*,*,#27804,.T.); +#28417 = ORIENTED_EDGE('',*,*,#27731,.F.); +#28418 = ORIENTED_EDGE('',*,*,#28419,.F.); +#28419 = EDGE_CURVE('',#28420,#27724,#28422,.T.); +#28420 = VERTEX_POINT('',#28421); +#28421 = CARTESIAN_POINT('',(14.65,33.993613830435,71.220357039965)); +#28422 = LINE('',#28423,#28424); +#28423 = CARTESIAN_POINT('',(14.65,33.993613830435,71.220357039965)); +#28424 = VECTOR('',#28425,1.); +#28425 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#28426 = ORIENTED_EDGE('',*,*,#28427,.F.); +#28427 = EDGE_CURVE('',#28428,#28420,#28430,.T.); +#28428 = VERTEX_POINT('',#28429); +#28429 = CARTESIAN_POINT('',(14.65,30.506384947063,101.59185230598)); +#28430 = CIRCLE('',#28431,77.); +#28431 = AXIS2_PLACEMENT_3D('',#28432,#28433,#28434); +#28432 = CARTESIAN_POINT('',(14.65,107.22496558516,95.014665606836)); +#28433 = DIRECTION('',(1.,0.,0.)); +#28434 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28435 = ORIENTED_EDGE('',*,*,#28436,.F.); +#28436 = EDGE_CURVE('',#28378,#28428,#28437,.T.); +#28437 = CIRCLE('',#28438,3.7); +#28438 = AXIS2_PLACEMENT_3D('',#28439,#28440,#28441); +#28439 = CARTESIAN_POINT('',(14.65,34.192862198504,101.27580567238)); +#28440 = DIRECTION('',(1.,0.,0.)); +#28441 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28442 = PLANE('',#28443); +#28443 = AXIS2_PLACEMENT_3D('',#28444,#28445,#28446); +#28444 = CARTESIAN_POINT('',(14.65,88.446564295826,118.90390207736)); +#28445 = DIRECTION('',(-1.,0.,0.)); +#28446 = DIRECTION('',(-0.,-0.951056516295,-0.309016994375)); +#28447 = ADVANCED_FACE('',(#28448),#28464,.F.); +#28448 = FACE_BOUND('',#28449,.F.); +#28449 = EDGE_LOOP('',(#28450,#28456,#28457,#28463)); +#28450 = ORIENTED_EDGE('',*,*,#28451,.F.); +#28451 = EDGE_CURVE('',#27443,#28378,#28452,.T.); +#28452 = LINE('',#28453,#28454); +#28453 = CARTESIAN_POINT('',(12.65,31.770318139601,104.07246086791)); +#28454 = VECTOR('',#28455,1.); +#28455 = DIRECTION('',(1.,0.,0.)); +#28456 = ORIENTED_EDGE('',*,*,#27451,.F.); +#28457 = ORIENTED_EDGE('',*,*,#28458,.T.); +#28458 = EDGE_CURVE('',#27452,#28428,#28459,.T.); +#28459 = LINE('',#28460,#28461); +#28460 = CARTESIAN_POINT('',(12.65,30.506384947063,101.59185230598)); +#28461 = VECTOR('',#28462,1.); +#28462 = DIRECTION('',(1.,0.,0.)); +#28463 = ORIENTED_EDGE('',*,*,#28436,.F.); +#28464 = CYLINDRICAL_SURFACE('',#28465,3.7); +#28465 = AXIS2_PLACEMENT_3D('',#28466,#28467,#28468); +#28466 = CARTESIAN_POINT('',(12.65,34.192862198504,101.27580567238)); +#28467 = DIRECTION('',(1.,0.,0.)); +#28468 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28469 = ADVANCED_FACE('',(#28470),#28481,.F.); +#28470 = FACE_BOUND('',#28471,.F.); +#28471 = EDGE_LOOP('',(#28472,#28473,#28474,#28480)); +#28472 = ORIENTED_EDGE('',*,*,#28458,.F.); +#28473 = ORIENTED_EDGE('',*,*,#27460,.F.); +#28474 = ORIENTED_EDGE('',*,*,#28475,.T.); +#28475 = EDGE_CURVE('',#27461,#28420,#28476,.T.); +#28476 = LINE('',#28477,#28478); +#28477 = CARTESIAN_POINT('',(12.65,33.993613830435,71.220357039965)); +#28478 = VECTOR('',#28479,1.); +#28479 = DIRECTION('',(1.,0.,0.)); +#28480 = ORIENTED_EDGE('',*,*,#28427,.F.); +#28481 = CYLINDRICAL_SURFACE('',#28482,77.); +#28482 = AXIS2_PLACEMENT_3D('',#28483,#28484,#28485); +#28483 = CARTESIAN_POINT('',(12.65,107.22496558516,95.014665606836)); +#28484 = DIRECTION('',(1.,0.,0.)); +#28485 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28486 = ADVANCED_FACE('',(#28487),#28493,.F.); +#28487 = FACE_BOUND('',#28488,.T.); +#28488 = EDGE_LOOP('',(#28489,#28490,#28491,#28492)); +#28489 = ORIENTED_EDGE('',*,*,#28419,.T.); +#28490 = ORIENTED_EDGE('',*,*,#27723,.T.); +#28491 = ORIENTED_EDGE('',*,*,#27469,.T.); +#28492 = ORIENTED_EDGE('',*,*,#28475,.T.); +#28493 = PLANE('',#28494); +#28494 = AXIS2_PLACEMENT_3D('',#28495,#28496,#28497); +#28495 = CARTESIAN_POINT('',(12.65,33.993613830435,71.220357039965)); +#28496 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28497 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28498 = ADVANCED_FACE('',(#28499),#28515,.F.); +#28499 = FACE_BOUND('',#28500,.F.); +#28500 = EDGE_LOOP('',(#28501,#28507,#28508,#28514)); +#28501 = ORIENTED_EDGE('',*,*,#28502,.T.); +#28502 = EDGE_CURVE('',#28387,#27425,#28503,.T.); +#28503 = LINE('',#28504,#28505); +#28504 = CARTESIAN_POINT('',(12.65,91.243219491354,121.32644613626)); +#28505 = VECTOR('',#28506,1.); +#28506 = DIRECTION('',(-1.,0.,0.)); +#28507 = ORIENTED_EDGE('',*,*,#27433,.F.); +#28508 = ORIENTED_EDGE('',*,*,#28509,.F.); +#28509 = EDGE_CURVE('',#28376,#27434,#28510,.T.); +#28510 = LINE('',#28511,#28512); +#28511 = CARTESIAN_POINT('',(12.65,88.762610929421,122.5903793288)); +#28512 = VECTOR('',#28513,1.); +#28513 = DIRECTION('',(-1.,0.,0.)); +#28514 = ORIENTED_EDGE('',*,*,#28386,.F.); +#28515 = CYLINDRICAL_SURFACE('',#28516,3.7); +#28516 = AXIS2_PLACEMENT_3D('',#28517,#28518,#28519); +#28517 = CARTESIAN_POINT('',(12.65,88.446564295826,118.90390207736)); +#28518 = DIRECTION('',(1.,0.,0.)); +#28519 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28520 = ADVANCED_FACE('',(#28521),#28532,.F.); +#28521 = FACE_BOUND('',#28522,.F.); +#28522 = EDGE_LOOP('',(#28523,#28529,#28530,#28531)); +#28523 = ORIENTED_EDGE('',*,*,#28524,.T.); +#28524 = EDGE_CURVE('',#28396,#27417,#28525,.T.); +#28525 = LINE('',#28526,#28527); +#28526 = CARTESIAN_POINT('',(12.65,106.27390906886,94.705648612461)); +#28527 = VECTOR('',#28528,1.); +#28528 = DIRECTION('',(-1.,0.,0.)); +#28529 = ORIENTED_EDGE('',*,*,#27424,.F.); +#28530 = ORIENTED_EDGE('',*,*,#28502,.F.); +#28531 = ORIENTED_EDGE('',*,*,#28395,.F.); +#28532 = CYLINDRICAL_SURFACE('',#28533,77.); +#28533 = AXIS2_PLACEMENT_3D('',#28534,#28535,#28536); +#28534 = CARTESIAN_POINT('',(12.65,33.04255731414,70.91134004559)); +#28535 = DIRECTION('',(1.,0.,0.)); +#28536 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28537 = ADVANCED_FACE('',(#28538),#28544,.F.); +#28538 = FACE_BOUND('',#28539,.T.); +#28539 = EDGE_LOOP('',(#28540,#28541,#28542,#28543)); +#28540 = ORIENTED_EDGE('',*,*,#28404,.T.); +#28541 = ORIENTED_EDGE('',*,*,#28524,.T.); +#28542 = ORIENTED_EDGE('',*,*,#27416,.T.); +#28543 = ORIENTED_EDGE('',*,*,#27638,.T.); +#28544 = PLANE('',#28545); +#28545 = AXIS2_PLACEMENT_3D('',#28546,#28547,#28548); +#28546 = CARTESIAN_POINT('',(12.65,106.27390906886,94.705648612461)); +#28547 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28548 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28549 = ADVANCED_FACE('',(#28550),#28556,.F.); +#28550 = FACE_BOUND('',#28551,.F.); +#28551 = EDGE_LOOP('',(#28552,#28553,#28554,#28555)); +#28552 = ORIENTED_EDGE('',*,*,#28451,.T.); +#28553 = ORIENTED_EDGE('',*,*,#28375,.F.); +#28554 = ORIENTED_EDGE('',*,*,#28509,.T.); +#28555 = ORIENTED_EDGE('',*,*,#27442,.F.); +#28556 = CYLINDRICAL_SURFACE('',#28557,77.); +#28557 = AXIS2_PLACEMENT_3D('',#28558,#28559,#28560); +#28558 = CARTESIAN_POINT('',(12.65,82.185424230274,45.871798690702)); +#28559 = DIRECTION('',(1.,0.,0.)); +#28560 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28561 = ADVANCED_FACE('',(#28562),#28565,.F.); +#28562 = FACE_BOUND('',#28563,.T.); +#28563 = EDGE_LOOP('',(#28564)); +#28564 = ORIENTED_EDGE('',*,*,#28112,.T.); +#28565 = PLANE('',#28566); +#28566 = AXIS2_PLACEMENT_3D('',#28567,#28568,#28569); +#28567 = CARTESIAN_POINT('',(12.65,81.888398549794,46.785949737633)); +#28568 = DIRECTION('',(1.,0.,0.)); +#28569 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28570 = ADVANCED_FACE('',(#28571),#28596,.F.); +#28571 = FACE_BOUND('',#28572,.T.); +#28572 = EDGE_LOOP('',(#28573,#28574,#28582,#28590)); +#28573 = ORIENTED_EDGE('',*,*,#27700,.F.); +#28574 = ORIENTED_EDGE('',*,*,#28575,.F.); +#28575 = EDGE_CURVE('',#28576,#27693,#28578,.T.); +#28576 = VERTEX_POINT('',#28577); +#28577 = CARTESIAN_POINT('',(26.993314992156,61.947965641641, + 24.01852440821)); +#28578 = LINE('',#28579,#28580); +#28579 = CARTESIAN_POINT('',(25.65356903,60.402880669766,28.773806989686 + )); +#28580 = VECTOR('',#28581,1.); +#28581 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#28582 = ORIENTED_EDGE('',*,*,#28583,.F.); +#28583 = EDGE_CURVE('',#28584,#28576,#28586,.T.); +#28584 = VERTEX_POINT('',#28585); +#28585 = CARTESIAN_POINT('',(19.65,61.947965641641,24.01852440821)); +#28586 = LINE('',#28587,#28588); +#28587 = CARTESIAN_POINT('',(75.,61.947965641641,24.01852440821)); +#28588 = VECTOR('',#28589,1.); +#28589 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#28590 = ORIENTED_EDGE('',*,*,#28591,.T.); +#28591 = EDGE_CURVE('',#28584,#27701,#28592,.T.); +#28592 = LINE('',#28593,#28594); +#28593 = CARTESIAN_POINT('',(19.65,57.16092912612,38.751507883885)); +#28594 = VECTOR('',#28595,1.); +#28595 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28596 = PLANE('',#28597); +#28597 = AXIS2_PLACEMENT_3D('',#28598,#28599,#28600); +#28598 = CARTESIAN_POINT('',(19.821657496078,56.664669076256, + 40.278839269508)); +#28599 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28600 = DIRECTION('',(0.,-0.309016994375,0.951056516295)); +#28601 = ADVANCED_FACE('',(#28602),#28629,.T.); +#28602 = FACE_BOUND('',#28603,.T.); +#28603 = EDGE_LOOP('',(#28604,#28605,#28606,#28607,#28615,#28623)); +#28604 = ORIENTED_EDGE('',*,*,#27599,.F.); +#28605 = ORIENTED_EDGE('',*,*,#27372,.T.); +#28606 = ORIENTED_EDGE('',*,*,#27716,.T.); +#28607 = ORIENTED_EDGE('',*,*,#28608,.T.); +#28608 = EDGE_CURVE('',#27709,#28609,#28611,.T.); +#28609 = VERTEX_POINT('',#28610); +#28610 = CARTESIAN_POINT('',(19.65,57.192683060165,22.473439436335)); +#28611 = LINE('',#28612,#28613); +#28612 = CARTESIAN_POINT('',(19.65,47.44938332075,52.460232642096)); +#28613 = VECTOR('',#28614,1.); +#28614 = DIRECTION('',(0.,0.309016994375,-0.951056516295)); +#28615 = ORIENTED_EDGE('',*,*,#28616,.T.); +#28616 = EDGE_CURVE('',#28609,#28617,#28619,.T.); +#28617 = VERTEX_POINT('',#28618); +#28618 = CARTESIAN_POINT('',(26.993314992156,57.192683060165, + 22.473439436335)); +#28619 = LINE('',#28620,#28621); +#28620 = CARTESIAN_POINT('',(6.25,57.192683060165,22.473439436335)); +#28621 = VECTOR('',#28622,1.); +#28622 = DIRECTION('',(1.,-1.715388910778E-17,5.279424210553E-17)); +#28623 = ORIENTED_EDGE('',*,*,#28624,.T.); +#28624 = EDGE_CURVE('',#28617,#27591,#28625,.T.); +#28625 = LINE('',#28626,#28627); +#28626 = CARTESIAN_POINT('',(17.721281296557,46.499551431886, + 55.383514609539)); +#28627 = VECTOR('',#28628,1.); +#28628 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#28629 = PLANE('',#28630); +#28630 = AXIS2_PLACEMENT_3D('',#28631,#28632,#28633); +#28631 = CARTESIAN_POINT('',(6.25,47.44938332075,52.460232642096)); +#28632 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28633 = DIRECTION('',(1.,0.,0.)); +#28634 = ADVANCED_FACE('',(#28635),#28646,.F.); +#28635 = FACE_BOUND('',#28636,.T.); +#28636 = EDGE_LOOP('',(#28637,#28638,#28639,#28645)); +#28637 = ORIENTED_EDGE('',*,*,#27708,.F.); +#28638 = ORIENTED_EDGE('',*,*,#28591,.F.); +#28639 = ORIENTED_EDGE('',*,*,#28640,.F.); +#28640 = EDGE_CURVE('',#28609,#28584,#28641,.T.); +#28641 = LINE('',#28642,#28643); +#28642 = CARTESIAN_POINT('',(19.65,42.886068772638,17.824938667911)); +#28643 = VECTOR('',#28644,1.); +#28644 = DIRECTION('',(0.,0.951056516295,0.309016994375)); +#28645 = ORIENTED_EDGE('',*,*,#28608,.F.); +#28646 = PLANE('',#28647); +#28647 = AXIS2_PLACEMENT_3D('',#28648,#28649,#28650); +#28648 = CARTESIAN_POINT('',(19.65,81.888398549794,46.785949737633)); +#28649 = DIRECTION('',(1.,0.,0.)); +#28650 = DIRECTION('',(-0.,0.951056516295,0.309016994375)); +#28651 = ADVANCED_FACE('',(#28652),#28670,.T.); +#28652 = FACE_BOUND('',#28653,.T.); +#28653 = EDGE_LOOP('',(#28654,#28660,#28661,#28662,#28668,#28669)); +#28654 = ORIENTED_EDGE('',*,*,#28655,.F.); +#28655 = EDGE_CURVE('',#28576,#28617,#28656,.T.); +#28656 = LINE('',#28657,#28658); +#28657 = CARTESIAN_POINT('',(26.993314992156,42.886068772638, + 17.824938667911)); +#28658 = VECTOR('',#28659,1.); +#28659 = DIRECTION('',(0.,-0.951056516295,-0.309016994375)); +#28660 = ORIENTED_EDGE('',*,*,#28575,.T.); +#28661 = ORIENTED_EDGE('',*,*,#27692,.F.); +#28662 = ORIENTED_EDGE('',*,*,#28663,.T.); +#28663 = EDGE_CURVE('',#27685,#27580,#28664,.T.); +#28664 = LINE('',#28665,#28666); +#28665 = CARTESIAN_POINT('',(25.555601520927,65.480807706506, + 30.808160825397)); +#28666 = VECTOR('',#28667,1.); +#28667 = DIRECTION('',(-0.258198889747,-0.363570359859,0.895069788768)); +#28668 = ORIENTED_EDGE('',*,*,#27590,.T.); +#28669 = ORIENTED_EDGE('',*,*,#28624,.F.); +#28670 = PLANE('',#28671); +#28671 = AXIS2_PLACEMENT_3D('',#28672,#28673,#28674); +#28672 = CARTESIAN_POINT('',(25.65356903,60.402880669766,28.773806989686 + )); +#28673 = DIRECTION('',(0.965925826289,-7.997948340457E-02,0.246151539386 + )); +#28674 = DIRECTION('',(-0.258819045103,-0.298487495629,0.91865005135)); +#28675 = ADVANCED_FACE('',(#28676),#28682,.T.); +#28676 = FACE_BOUND('',#28677,.T.); +#28677 = EDGE_LOOP('',(#28678,#28679,#28680,#28681)); +#28678 = ORIENTED_EDGE('',*,*,#28640,.T.); +#28679 = ORIENTED_EDGE('',*,*,#28583,.T.); +#28680 = ORIENTED_EDGE('',*,*,#28655,.T.); +#28681 = ORIENTED_EDGE('',*,*,#28616,.F.); +#28682 = PLANE('',#28683); +#28683 = AXIS2_PLACEMENT_3D('',#28684,#28685,#28686); +#28684 = CARTESIAN_POINT('',(75.,42.886068772638,17.824938667911)); +#28685 = DIRECTION('',(5.551115123125E-17,0.309016994375,-0.951056516295 + )); +#28686 = DIRECTION('',(-3.538835890993E-15,-0.951056516295, + -0.309016994375)); +#28687 = ADVANCED_FACE('',(#28688),#28694,.T.); +#28688 = FACE_BOUND('',#28689,.T.); +#28689 = EDGE_LOOP('',(#28690,#28691,#28692,#28693)); +#28690 = ORIENTED_EDGE('',*,*,#27684,.F.); +#28691 = ORIENTED_EDGE('',*,*,#27502,.F.); +#28692 = ORIENTED_EDGE('',*,*,#27579,.F.); +#28693 = ORIENTED_EDGE('',*,*,#28663,.F.); +#28694 = PLANE('',#28695); +#28695 = AXIS2_PLACEMENT_3D('',#28696,#28697,#28698); +#28696 = CARTESIAN_POINT('',(12.65,48.233416591365,72.699702195025)); +#28697 = DIRECTION('',(-0.258819045103,0.91865005135,0.298487495629)); +#28698 = DIRECTION('',(0.965925826289,0.246151539386,7.997948340458E-02) + ); +#28699 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) +GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#28703)) +GLOBAL_UNIT_ASSIGNED_CONTEXT((#28700,#28701,#28702)) +REPRESENTATION_CONTEXT('Context #1', + '3D Context with UNIT and UNCERTAINTY') ); +#28700 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) ); +#28701 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) ); +#28702 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() ); +#28703 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(2.E-06),#28700, + 'distance_accuracy_value','confusion accuracy'); +#28704 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#28705,#28707); +#28705 = ( REPRESENTATION_RELATIONSHIP('','',#27343,#10) +REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#28706) +SHAPE_REPRESENTATION_RELATIONSHIP() ); +#28706 = ITEM_DEFINED_TRANSFORMATION('','',#11,#39); +#28707 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item', + #28708); +#28708 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','fan_mount_left','',#5, + #27338,$); +#28709 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#27340)); +#28710 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28711),#28699); +#28711 = STYLED_ITEM('color',(#28712),#27344); +#28712 = PRESENTATION_STYLE_ASSIGNMENT((#28713,#28719)); +#28713 = SURFACE_STYLE_USAGE(.BOTH.,#28714); +#28714 = SURFACE_SIDE_STYLE('',(#28715)); +#28715 = SURFACE_STYLE_FILL_AREA(#28716); +#28716 = FILL_AREA_STYLE('',(#28717)); +#28717 = FILL_AREA_STYLE_COLOUR('',#28718); +#28718 = COLOUR_RGB('',0.,0.399999997426,0.600000020288); +#28719 = CURVE_STYLE('',#28720,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28720 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28721 = COLOUR_RGB('',9.803921802644E-02,9.803921802644E-02, + 9.803921802644E-02); +#28722 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28723),#3493); +#28723 = STYLED_ITEM('color',(#28724),#1431); +#28724 = PRESENTATION_STYLE_ASSIGNMENT((#28725,#28731)); +#28725 = SURFACE_STYLE_USAGE(.BOTH.,#28726); +#28726 = SURFACE_SIDE_STYLE('',(#28727)); +#28727 = SURFACE_STYLE_FILL_AREA(#28728); +#28728 = FILL_AREA_STYLE('',(#28729)); +#28729 = FILL_AREA_STYLE_COLOUR('',#28730); +#28730 = COLOUR_RGB('',0.399999997426,0.399999997426,1.); +#28731 = CURVE_STYLE('',#28732,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28732 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28733 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28734),#1412); +#28734 = STYLED_ITEM('color',(#28735),#57); +#28735 = PRESENTATION_STYLE_ASSIGNMENT((#28736,#28741)); +#28736 = SURFACE_STYLE_USAGE(.BOTH.,#28737); +#28737 = SURFACE_SIDE_STYLE('',(#28738)); +#28738 = SURFACE_STYLE_FILL_AREA(#28739); +#28739 = FILL_AREA_STYLE('',(#28740)); +#28740 = FILL_AREA_STYLE_COLOUR('',#28718); +#28741 = CURVE_STYLE('',#28742,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28742 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28743 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28744),#12561); +#28744 = STYLED_ITEM('color',(#28745),#6114); +#28745 = PRESENTATION_STYLE_ASSIGNMENT((#28746,#28752)); +#28746 = SURFACE_STYLE_USAGE(.BOTH.,#28747); +#28747 = SURFACE_SIDE_STYLE('',(#28748)); +#28748 = SURFACE_STYLE_FILL_AREA(#28749); +#28749 = FILL_AREA_STYLE('',(#28750)); +#28750 = FILL_AREA_STYLE_COLOUR('',#28751); +#28751 = COLOUR_RGB('',0.600000020288,0.600000020288,0.600000020288); +#28752 = CURVE_STYLE('',#28753,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28753 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28754 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28755),#6095); +#28755 = STYLED_ITEM('color',(#28756),#3512); +#28756 = PRESENTATION_STYLE_ASSIGNMENT((#28757,#28763)); +#28757 = SURFACE_STYLE_USAGE(.BOTH.,#28758); +#28758 = SURFACE_SIDE_STYLE('',(#28759)); +#28759 = SURFACE_STYLE_FILL_AREA(#28760); +#28760 = FILL_AREA_STYLE('',(#28761)); +#28761 = FILL_AREA_STYLE_COLOUR('',#28762); +#28762 = COLOUR_RGB('',0.8745098253,0.8745098253,0.8745098253); +#28763 = CURVE_STYLE('',#28764,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28764 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28765 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28766),#27013); +#28766 = STYLED_ITEM('color',(#28767),#12580); +#28767 = PRESENTATION_STYLE_ASSIGNMENT((#28768,#28774)); +#28768 = SURFACE_STYLE_USAGE(.BOTH.,#28769); +#28769 = SURFACE_SIDE_STYLE('',(#28770)); +#28770 = SURFACE_STYLE_FILL_AREA(#28771); +#28771 = FILL_AREA_STYLE('',(#28772)); +#28772 = FILL_AREA_STYLE_COLOUR('',#28773); +#28773 = COLOUR_RGB('',0.,0.600000020288,1.); +#28774 = CURVE_STYLE('',#28775,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28775 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +#28776 = MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',( + #28777),#27325); +#28777 = STYLED_ITEM('color',(#28778),#27032); +#28778 = PRESENTATION_STYLE_ASSIGNMENT((#28779,#28784)); +#28779 = SURFACE_STYLE_USAGE(.BOTH.,#28780); +#28780 = SURFACE_SIDE_STYLE('',(#28781)); +#28781 = SURFACE_STYLE_FILL_AREA(#28782); +#28782 = FILL_AREA_STYLE('',(#28783)); +#28783 = FILL_AREA_STYLE_COLOUR('',#28762); +#28784 = CURVE_STYLE('',#28785,POSITIVE_LENGTH_MEASURE(0.1),#28721); +#28785 = DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous'); +ENDSEC; +END-ISO-10303-21; diff --git a/harmony/ACKNOWLEDGEMENTS.md b/harmony/ACKNOWLEDGEMENTS.md new file mode 100644 index 00000000..eb99c525 --- /dev/null +++ b/harmony/ACKNOWLEDGEMENTS.md @@ -0,0 +1,277 @@ + +# Acknowledgements + +Harmony is built on top of wonderful software provided by: + +## Pico-SDK + +Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd. + +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 the copyright holder 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. + +## Pico-Extras + +Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd. + +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 the copyright holder 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. + +## BTStack + +Copyright (C) 2009 BlueKitchen GmbH +All rights reserved + +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 the copyright holders nor the names of contributors may + be used to endorse or promote products derived from this software without + specific prior written permission. + +4. Any redistribution, use, or modification is done solely for personal benefit + and not for any commercial purpose or for monetary gain. + +THIS SOFTWARE IS PROVIDED BY BLUEKITCHEN GMBH 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 BLUEKITCHEN GMBH 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. + +Please inquire about commercial licensing options at +contact@bluekitchen-gmbh.com + +## CMSIS-DSP + + 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 diff --git a/harmony/BillOfMaterials.md b/harmony/BillOfMaterials.md new file mode 100644 index 00000000..29bc5de3 --- /dev/null +++ b/harmony/BillOfMaterials.md @@ -0,0 +1,20 @@ +| **Item** | **Link** | **QTY** | +| ------------------------------- | ------------------------------------------------------------ | ------- | +| **Raspberry Pi Pico W** | https://www.adafruit.com/product/5544 | 1 | +| **12V Power Supply** | https://www.adafruit.com/product/4880 | 1 | +| **5V Step-Down Converter** | https://www.adafruit.com/product/1466 | 1 | +| **Barrel Jack** | https://www.digikey.com/en/products/detail/tensility-international-corp/54-00063/6206244 | 1 | +| **Power Switch** | https://www.digikey.com/en/products/detail/e-switch/RR3112ABLKBLKNFF0/1589375 | 1 | +| **Speakers** | https://www.adafruit.com/product/1314 | 2 | +| **Amplifier** | https://www.adafruit.com/product/1752 | 1 | +| **Digital to Analog Converter** | https://www.adafruit.com/product/3678 | 1 | +| **Opto Coupler** | 4N35 | 1 | +| **Diodes** | 1N4001, RL207 | 1 | +| **Power Mosfet** | IRFZ44N | 1 | +| **Permanent Magnets** | https://www.kjmagnetics.com/d41-neodymium-disc-magnet?srsltid=AfmBOoqX5QSYfH9Br4u6VB6d0PGNB2tcBJuptexQ-pBq5WYRsY6VNTj8 | 6 | +| **Electromagnet** | https://www.adafruit.com/product/3875 | 1 | +| **Ferrofluid** | https://www.amazon.com/dp/B0DBW2NH7X/ | 1 | +| **Volume Encoder** | https://www.digikey.com/en/products/detail/bourns-inc/PEC11R-4025F-S0024/4699199 | 1 | +| **Volume Knob** | https://www.digikey.com/en/products/detail/kilo-international/OEDNI-63-2-7/5970329 | 1 | +| **Buttons** | https://www.adafruit.com/product/1505 | 3 | +| **LED Strip** | https://www.adafruit.com/product/1506 | 1 | diff --git a/harmony/CMakeLists.txt b/harmony/CMakeLists.txt new file mode 100644 index 00000000..d53dbd08 --- /dev/null +++ b/harmony/CMakeLists.txt @@ -0,0 +1,212 @@ +cmake_minimum_required(VERSION 3.29) +include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake) +include($ENV{PICO_EXTRAS_PATH}/external/pico_extras_import.cmake) + +project(app) +pico_sdk_init() + +set(CMSISCORE "$ENV{PICO_SDK_PATH}/src/rp2_common/cmsis/stub/CMSIS/Core") +set(DISABLEFLOAT16 ON) +include(FetchContent) +FetchContent_Declare(cmsisdsp + GIT_REPOSITORY https://github.com/ARM-software/CMSIS-DSP.git + GIT_TAG "v1.16.2" +) +FetchContent_MakeAvailable(cmsisdsp) + + + +add_executable(app) + +pico_generate_pio_header(app ${CMAKE_CURRENT_LIST_DIR}/Sources/PIOPrograms/I2S.pio) +pico_generate_pio_header(app ${CMAKE_CURRENT_LIST_DIR}/Sources/PIOPrograms/QuadratureEncoder.pio) +pico_generate_pio_header(app ${CMAKE_CURRENT_LIST_DIR}/Sources/PIOPrograms/WS2812.pio) + +# Which Pico SDK libraries are we using. This also automatically sets up header +# search paths (via target_include_directories / INTERFACE_INCLUDE_DIRECTORIES). +target_link_libraries(app + pico_cyw43_arch_lwip_threadsafe_background + pico_multicore + pico_stdlib + + pico_btstack_ble + pico_btstack_classic + pico_btstack_sbc_common + pico_btstack_sbc_decoder + pico_btstack_sbc_encoder + pico_btstack_cyw43 + + # FIXME: remove + pico_audio + hardware_adc + hardware_dma + hardware_i2c + hardware_pio + hardware_irq +) + +# Make our "config headers" (e.g. lwipopts.h) discoverable by libraries themselves. +target_include_directories(app PRIVATE + "${CMAKE_CURRENT_LIST_DIR}/include" + "${CMAKE_CURRENT_LIST_DIR}/dsp" + "${CMAKE_CURRENT_LIST_DIR}/platform" + "${cmsisdsp_SOURCE_DIR}/Include" +) + +# Uncomment to debug lwIP. +# target_compile_definitions(app PRIVATE PICO_DEBUG_MALLOC=1) +# target_compile_definitions(pico_standard_link INTERFACE "LWIP_DEBUG=1") +# target_compile_definitions(pico_standard_link INTERFACE "WANT_HCI_DUMP=1") +target_compile_definitions(app PRIVATE "PICO_AUDIO_I2S_DATA_PIN=26") +target_compile_definitions(app PRIVATE "PICO_AUDIO_I2S_CLOCK_PIN_BASE=27") + +# Gather compile definitions from all dependencies +set_property(GLOBAL PROPERTY visited_targets "") +set_property(GLOBAL PROPERTY compilerdefs_list "") + +function(gather_compile_definitions_recursive target) + # Get the current value of visited_targets + get_property(visited_targets GLOBAL PROPERTY visited_targets) + + # make sure we don't visit the same target twice + # and that we don't visit the special generator expressions + if (${target} MATCHES "\\\$<" OR ${target} MATCHES "::@" OR ${target} IN_LIST visited_targets) + return() + endif() + + # Append the target to visited_targets + list(APPEND visited_targets ${target}) + set_property(GLOBAL PROPERTY visited_targets "${visited_targets}") + + # Get the current value of compilerdefs_list + get_property(compilerdefs_list GLOBAL PROPERTY compilerdefs_list) + + get_target_property(target_definitions ${target} INTERFACE_COMPILE_DEFINITIONS) + if (target_definitions) + # Append the target definitions to compilerdefs_list + list(APPEND compilerdefs_list ${target_definitions}) + set_property(GLOBAL PROPERTY compilerdefs_list "${compilerdefs_list}") + endif() + + get_target_property(target_linked_libs ${target} INTERFACE_LINK_LIBRARIES) + if (target_linked_libs) + foreach(linked_target ${target_linked_libs}) + # Recursively gather compile definitions from dependencies + gather_compile_definitions_recursive(${linked_target}) + endforeach() + endif() +endfunction() + +gather_compile_definitions_recursive(app) + +add_dependencies(app CMSISDSP) +target_link_libraries(app + ${cmsisdsp_BINARY_DIR}/Source/libCMSISDSP.a +) + +target_include_directories(app PRIVATE +# ${CMAKE_CURRENT_LIST_DIR}/dsp +# ${CMAKE_CURRENT_LIST_DIR}/platform + ${cmsisdsp_SOURCE_DIR}/Include + ${PICO_SDK_PATH}/src/rp2_common/cmsis/stub/CMSIS/Core/Include +) + + +get_property(COMPILE_DEFINITIONS GLOBAL PROPERTY compilerdefs_list) + +# Parse compiler definitions into a format that swiftc can understand +list(REMOVE_DUPLICATES COMPILE_DEFINITIONS) +list(PREPEND COMPILE_DEFINITIONS "") # adds a semicolon at the beginning +string(REPLACE "$" "$" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") +string(REPLACE ";" " -Xcc -D" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS} ") +message("COMPILE_DEFINITIONS: ${COMPILE_DEFINITIONS}") + +get_target_property(var pico_standard_link INTERFACE_COMPILE_OPTIONS) +set_target_properties(pico_standard_link PROPERTIES INTERFACE_COMPILE_OPTIONS "") + +# Compute -Xcc flags to set up the C and C++ header search paths for Swift (for +# the bridging header). +set(SWIFT_INCLUDES) +foreach(dir ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() +foreach(dir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-Xcc ") + string(CONCAT SWIFT_INCLUDES ${SWIFT_INCLUDES} "-I${dir} ") +endforeach() + +# Swift compiler flags to build in Embedded Swift mode, optimize for size, +# choose the right ISA, ABI, etc. +target_compile_options(app PUBLIC "$<$:SHELL: + -target armv6m-none-none-eabi + -Xfrontend -function-sections -wmo -parse-as-library -Osize + -enable-experimental-feature Embedded + -enable-experimental-feature Extern + -enable-experimental-feature Span + -enable-experimental-feature SymbolLinkageMarkers + + -assert-config Debug + + -Xcc -mfloat-abi=soft -Xcc -fshort-enums + -Xcc -D__APPLE_CC__ + + -Xcc -I${CMAKE_CURRENT_LIST_DIR}/include + + -pch-output-dir /tmp + -Xfrontend -enable-single-module-llvm-emission + + ${SWIFT_INCLUDES} + ${COMPILE_DEFINITIONS} + + -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/Sources/Application/BridgingHeader.h + >") + +# Enable Swift support in CMake, force Whole Module builds (required by Embedded +# Swift), and use "CMAKE_Swift_COMPILER_WORKS" to skip the trial compilations +# which don't (yet) correctly work when cross-compiling. +set(CMAKE_Swift_COMPILER_WORKS YES) +set(CMAKE_Swift_COMPILATION_MODE_DEFAULT wholemodule) +set(CMAKE_Swift_COMPILATION_MODE wholemodule) +enable_language(Swift) + +# Don't link via the Swift driver, it doesn't understand some GNU linker +# arguments, and it's not necessary for Embedded Swift. +set_property(TARGET app PROPERTY LINKER_LANGUAGE C) + +# List of Swift and C source files to build. +target_sources(app + PRIVATE + Sources/Application/Button.swift + Sources/Application/ButtonTimes.swift + Sources/Application/LEDStrip.swift + Sources/Application/Logging.swift + Sources/Application/Main.swift + Sources/Application/QuadratureEncoder.swift + Sources/Application/Stubs.swift + + Sources/Audio/AudioAnalyzer.swift + Sources/Audio/AudioBuffer.swift + Sources/Audio/AudioBufferTransport.swift + Sources/Audio/AudioEngine.swift + Sources/Audio/AudioI2S.swift + Sources/Audio/AudioPico.swift + Sources/Audio/MAX9744.swift + Sources/Audio/Resampler.swift + Sources/Audio/Ring.swift + Sources/Audio/RingBuffer.swift + Sources/Audio/SpinLock.swift + Sources/Audio/TPA2016D2.swift + + Sources/Bluetooth/A2DP.swift + Sources/Bluetooth/AVRCP.swift + Sources/Bluetooth/HCI.swift + Sources/Bluetooth/SBC.swift + Sources/Bluetooth/SDP.swift + + Sources/PIOPrograms/I2S.pio + Sources/PIOPrograms/QuadratureEncoder.pio + Sources/PIOPrograms/WS2812.pio +) + +pico_add_extra_outputs(app) diff --git a/harmony/README.md b/harmony/README.md new file mode 100644 index 00000000..eefac093 --- /dev/null +++ b/harmony/README.md @@ -0,0 +1,112 @@ +# Harmony + +> [!NOTE] +> This README is still under construction. + +Harmony is a Bluetooth speaker and Ferrofluidic music visualizer. + +## Table of Contents + +- [Overview](#overview) +- [Features](#features) +- [Bill of Materials](#bill-of-materials) +- [Compiling the firmware](#compiling-the-firmware) +- [Flashing and running](#flashing-and-running) +- [Monitoring UART](#monitoring-uart) +- [Hardware Setup](#hardware-setup) +- [Software Architecture](#software-architecture) + +## Overview + +Harmony combines Bluetooth audio streaming with the visual effects of a ferrofluid display reacting to the music's rhythm and bass. + +> [!WARNING] +> This project involves power electronics which can be dangerous. Take proper +> safety precautions and consult a qualified professional if unsure. + +## Features + +- Bluetooth audio streaming (using the SBC codec) +- Ferrofluid visualization synchronized with music +- Volume and playback controls +- Customizable LED lighting effects + +## Bill of Materials + +A detailed Bill of Materials (BOM) can be found in `BillOfMaterials.md`. This document lists all the necessary components for building Harmony. + +## Compiling the firmware + +The firmware for Harmony is built using CMake and requires the Raspberry Pi Pico SDK. + +1. Ensure you have the Pico SDK set up on your system. See the official Raspberry Pi Pico documentation for instructions: [https://www.raspberrypi.com/documentation/pico/getting-started/](https://www.raspberrypi.com/documentation/pico/getting-started/) + +2. Clone the swift-embedded-examples repository (if not already done): + ```bash + git clone https://github.com/apple/swift-embedded-examples.git + cd harmony + ``` + +3. Set the necessary environment variables: + ```bash + export TOOLCHAINS='' # e.g., gcc-arm-none-eabi + export PICO_BOARD=pico_w + export PICO_SDK_PATH='' # e.g., ../pico-sdk + export PICO_EXTRAS_PATH='' # e.g., ../pico-extras + export PICO_TOOLCHAIN_PATH='' # e.g., /usr/bin + ``` + +4. Generate the build files using CMake: + ```bash + cmake -B build -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=On + ``` + +5. Build the firmware: + ```bash + cmake --build build + ``` + +## Flashing and running + +To flash the compiled firmware onto the Raspberry Pi Pico, you'll need OpenOCD. + +1. Connect your Pico to your computer using a USB cable and put it into BOOTSEL mode by holding the BOOTSEL button while plugging it in. + +2. Run OpenOCD with the appropriate configuration files: + ```bash + openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000" -c "program build/app.elf verify reset exit" + ``` + +## Monitoring UART + +For debugging and monitoring, you can connect to the Pico's UART using a serial terminal program like `screen`. + +1. Identify the serial port connected to your Pico. You can usually find it using `ls /dev/cu.usbmodem*` on macOS or by checking the Device Manager on Windows. + +2. Connect to the UART using `screen`: + ```bash + screen /dev/cu.usbmodem<...> 115200 + ``` + (Replace `<...>` with the correct port identifier) + +## Hardware Setup + +> [!NOTE] +> This README is still under construction. + +## Software Architecture + +> [!NOTE] +> This README is still under construction. + +The firmware is designed with a modular architecture for efficient audio processing and visualization control. + +- **Bluetooth Handlers:** Manage the Bluetooth connection and incoming audio stream using the SBC codec. +- **SBC Ring Buffer:** Stores the decoded SBC audio data for further processing. +- **Audio Decoder:** Decodes the SBC encoded audio stream into PCM (Pulse Code Modulation) format. +- **PCM Ring Buffer:** Stores the decoded PCM audio data. +- **Audio Analyzer:** Analyzes the PCM audio data to extract relevant information like amplitude and frequency. This data is used to control the ferrofluid display. +- **Audio Driver:** Sends the PCM audio data to the DAC (Digital-to-Analog Converter). +- **DAC:** Converts the digital audio signal to an analog signal. +- **Amplifier:** Amplifies the analog audio signal to drive the speaker. +- **Electromagnet Driver:** Controls the electromagnet based on the analyzed audio data, creating the ferrofluid movements. diff --git a/harmony/Sources/Application/BridgingHeader.h b/harmony/Sources/Application/BridgingHeader.h new file mode 100644 index 00000000..74f7f34a --- /dev/null +++ b/harmony/Sources/Application/BridgingHeader.h @@ -0,0 +1,69 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +#pragma once + +// C Stdlib +#include + +// Pico SDK +#include +#include +#include + +#include +#include +#include +#include +#include + +// Bluetooth SDK +#include +#include +#include +#include + +// PIO Programs +#include "I2S.pio.h" +#include "QuadratureEncoder.pio.h" +#include "WS2812.pio.h" + +#undef ISB +#include "arm_math.h" + +// Shims +static inline pio_hw_t* _pio0(void) { return pio0; } +static inline pio_hw_t* _pio1(void) { return pio1; } +static inline int32_t _errno() { return errno; } + +static const q15_t _samples_512[512] = { + // 10000 Hz + // 0, 32419, 9435, -29673, -18071, 24413, 25176, -17086, -30149, 8311, 32568, 1166, -32228, -10546, 29159, 19033, -23619, -25907, 16079, 30587, -7177, -32676, -2332, 31997, 11644, -28608, -19971, 22796, 26605, -15052, -30986, 6034, 32742, 3494, -31725, -12728, 28021, 20883, -21943, -27269, 14006, 31346, -4883, -32767, -4652, 31413, 13795, -27398, -21769, 21062, 27899, -12943, -31666, 3726, 32751, 5805, -31061, -14845, 26741, 22627, -20155, -28493, 11862, 31946, -2565, -32692, -6949, 30670, 15876, -26049, -23457, 19222, 29052, -10767, -32185, 1400, 32593, 8085, -30240, -16886, 25325, 24257, -18265, -29573, 9658, 32384, -233, -32452, -9211, 29771, 17876, -24568, -25026, 17285, 30057, -8537, -32541, -933, 32270, 10325, -29265, -18842, 23781, 25763, -16282, -30502, 7405, 32658, 2099, -32047, -11426, 28721, 19785, -22963, -26468, 15259, 30909, -6263, -32732, -3262, 31783, 12512, -28141, -20703, 22116, 27139, -14217, -31277, 5114, 32766, 4421, -31479, -13583, 27525, 21594, -21241, -27776, 13157, 31605, -3958, -32757, -5575, 31135, 14636, -26875, -22458, 20339, 28377, -12080, -31893, 2797, 32707, 6721, -30751, -15671, 26190, 23293, -19411, -28943, 10987, 32141, -1633, -32616, -7859, 30329, 16686, -25472, -24099, 18458, 29472, -9881, -32347, 466, 32483, 8987, -29868, -17679, 24722, 24875, -17483, -29963, 8762, 32513, 700, -32309, -10103, 29369, 18651, -23941, -25619, 16484, 30416, -7632, -32638, -1866, 32094, 11207, -28833, -19598, 23129, 26330, -15466, -30831, 6492, 32721, 3030, -31839, -12296, 28260, 20521, -22287, -27008, 14427, 31207, -5344, -32762, -4190, 31543, 13370, -27651, -21418, 21418, 27651, -13370, -31543, 4190, 32762, 5344, -31207, -14427, 27008, 22287, -20521, -28260, 12296, 31839, -3030, -32721, -6492, 30831, 15466, -26330, -23129, 19598, 28833, -11207, -32094, 1866, 32638, 7632, -30416, -16484, 25619, 23941, -18651, -29369, 10103, 32309, -700, -32513, -8762, 29963, 17483, -24875, -24722, 17679, 29868, -8987, -32483, -466, 32347, 9881, -29472, -18458, 24099, 25472, -16686, -30329, 7859, 32616, 1633, -32141, -10987, 28943, 19411, -23293, -26190, 15671, 30751, -6721, -32707, -2797, 31893, 12080, -28377, -20339, 22458, 26875, -14636, -31135, 5575, 32757, 3958, -31605, -13157, 27776, 21241, -21594, -27525, 13583, 31479, -4421, -32766, -5114, 31277, 14217, -27139, -22116, 20703, 28141, -12512, -31783, 3262, 32732, 6263, -30909, -15259, 26468, 22963, -19785, -28721, 11426, 32047, -2099, -32658, -7405, 30502, 16282, -25763, -23781, 18842, 29265, -10325, -32270, 933, 32541, 8537, -30057, -17285, 25026, 24568, -17876, -29771, 9211, 32452, 233, -32384, -9658, 29573, 18265, -24257, -25325, 16886, 30240, -8085, -32593, -1400, 32185, 10767, -29052, -19222, 23457, 26049, -15876, -30670, 6949, 32692, 2565, -31946, -11862, 28493, 20155, -22627, -26741, 14845, 31061, -5805, -32751, -3726, 31666, 12943, -27899, -21062, 21769, 27398, -13795, -31413, 4652, 32767, 4883, -31346, -14006, 27269, 21943, -20883, -28021, 12728, 31725, -3494, -32742, -6034, 30986, 15052, -26605, -22796, 19971, 28608, -11644, -31997, 2332, 32676, 7177, -30587, -16079, 25907, 23619, -19033, -29159, 10546, 32228, -1166, -32568, -8311, 30149, 17086, -25176, -24413, 18071, 29673, -9435, -32419, 0, 32419, 9435, -29673, -18071, 24413, 25176, -17086, -30149, 8311, 32568, 1166, -32228, -10546, 29159, 19033, -23619, -25907, 16079, 30587, -7177, -32676, -2332, 31997, 11644, -28608, -19971, 22796, 26605, -15052, -30986, 6034, 32742, 3494, -31725, -12728, 28021, 20883, -21943, -27269, 14006, 31346, -4883, -32767, -4652, 31413, 13795, -27398, -21769, 21062, 27899, -12943, -31666, 3726, 32751, 5805, -31061, -14845, 26741, 22627, -20155, -28493, 11862, 31946, -2565, -32692, -6949, 30670, 15876, -26049, -23457 + // 100 Hz + // 0, 466, 933, 1400, 1866, 2332, 2797, 3262, 3726, 4190, 4652, 5114, 5575, 6034, 6492, 6949, 7405, 7859, 8311, 8762, 9211, 9658, 10103, 10546, 10987, 11426, 11862, 12296, 12728, 13157, 13583, 14006, 14427, 14845, 15259, 15671, 16079, 16484, 16886, 17285, 17679, 18071, 18458, 18842, 19222, 19598, 19971, 20339, 20703, 21062, 21418, 21769, 22116, 22458, 22796, 23129, 23457, 23781, 24099, 24413, 24722, 25026, 25325, 25619, 25907, 26190, 26468, 26741, 27008, 27269, 27525, 27776, 28021, 28260, 28493, 28721, 28943, 29159, 29369, 29573, 29771, 29963, 30149, 30329, 30502, 30670, 30831, 30986, 31135, 31277, 31413, 31543, 31666, 31783, 31893, 31997, 32094, 32185, 32270, 32347, 32419, 32483, 32541, 32593, 32638, 32676, 32707, 32732, 32751, 32762, 32767, 32766, 32757, 32742, 32721, 32692, 32658, 32616, 32568, 32513, 32452, 32384, 32309, 32228, 32141, 32047, 31946, 31839, 31725, 31605, 31479, 31346, 31207, 31061, 30909, 30751, 30587, 30416, 30240, 30057, 29868, 29673, 29472, 29265, 29052, 28833, 28608, 28377, 28141, 27899, 27651, 27398, 27139, 26875, 26605, 26330, 26049, 25763, 25472, 25176, 24875, 24568, 24257, 23941, 23619, 23293, 22963, 22627, 22287, 21943, 21594, 21241, 20883, 20521, 20155, 19785, 19411, 19033, 18651, 18265, 17876, 17483, 17086, 16686, 16282, 15876, 15466, 15052, 14636, 14217, 13795, 13370, 12943, 12512, 12080, 11644, 11207, 10767, 10325, 9881, 9435, 8987, 8537, 8085, 7632, 7177, 6721, 6263, 5805, 5344, 4883, 4421, 3958, 3494, 3030, 2565, 2099, 1633, 1166, 700, 233, -233, -700, -1166, -1633, -2099, -2565, -3030, -3494, -3958, -4421, -4883, -5344, -5805, -6263, -6721, -7177, -7632, -8085, -8537, -8987, -9435, -9881, -10325, -10767, -11207, -11644, -12080, -12512, -12943, -13370, -13795, -14217, -14636, -15052, -15466, -15876, -16282, -16686, -17086, -17483, -17876, -18265, -18651, -19033, -19411, -19785, -20155, -20521, -20883, -21241, -21594, -21943, -22287, -22627, -22963, -23293, -23619, -23941, -24257, -24568, -24875, -25176, -25472, -25763, -26049, -26330, -26605, -26875, -27139, -27398, -27651, -27899, -28141, -28377, -28608, -28833, -29052, -29265, -29472, -29673, -29868, -30057, -30240, -30416, -30587, -30751, -30909, -31061, -31207, -31346, -31479, -31605, -31725, -31839, -31946, -32047, -32141, -32228, -32309, -32384, -32452, -32513, -32568, -32616, -32658, -32692, -32721, -32742, -32757, -32766, -32767, -32762, -32751, -32732, -32707, -32676, -32638, -32593, -32541, -32483, -32419, -32347, -32270, -32185, -32094, -31997, -31893, -31783, -31666, -31543, -31413, -31277, -31135, -30986, -30831, -30670, -30502, -30329, -30149, -29963, -29771, -29573, -29369, -29159, -28943, -28721, -28493, -28260, -28021, -27776, -27525, -27269, -27008, -26741, -26468, -26190, -25907, -25619, -25325, -25026, -24722, -24413, -24099, -23781, -23457, -23129, -22796, -22458, -22116, -21769, -21418, -21062, -20703, -20339, -19971, -19598, -19222, -18842, -18458, -18071, -17679, -17285, -16886, -16484, -16079, -15671, -15259, -14845, -14427, -14006, -13583, -13157, -12728, -12296, -11862, -11426, -10987, -10546, -10103, -9658, -9211, -8762, -8311, -7859, -7405, -6949, -6492, -6034, -5575, -5114, -4652, -4190, -3726, -3262, -2797, -2332, -1866, -1400, -933, -466, 0, 466, 933, 1400, 1866, 2332, 2797, 3262, 3726, 4190, 4652, 5114, 5575, 6034, 6492, 6949, 7405, 7859, 8311, 8762, 9211, 9658, 10103, 10546, 10987, 11426, 11862, 12296, 12728, 13157, 13583, 14006, 14427, 14845, 15259, 15671, 16079, 16484, 16886, 17285, 17679, 18071, 18458, 18842, 19222, 19598, 19971, 20339, 20703, 21062, 21418, 21769, 22116, 22458, 22796, 23129, 23457, 23781, 24099, 24413, 24722, 25026, 25325, 25619, 25907, 26190, 26468, 26741, 27008, 27269, 27525 + // Random + // -23267, -28627, -22857, 28240, 13800, 30726, -24151, 26079, -13476, -12798, 13052, 13852, -22637, -6154, -3815, -12039, 25243, -1585, -19939, -8784, -28265, -26459, -11751, 11175, 29945, 6392, 2017, -26312, 705, 3937, 15719, 15254, 2106, -19522, -11782, 14779, 17287, -573, -4131, 1598, -17359, -2321, 29406, 10983, -1820, 10484, 2547, 21179, -8994, -2079, -27106, 10036, 24048, 20759, -22663, 30870, -23019, -6484, 10645, 28446, 5694, 29587, 2716, 28330, -31127, -24224, 11747, 4653, 25607, 2060, -13584, 18776, 3286, 4279, -23640, -19751, -29165, -26461, 1009, -26, 24934, 1737, 25904, 13741, 26638, -9855, 24739, 1151, 1288, 27717, -14507, 31321, 14853, 30335, 6779, -25100, -31174, 21443, -26019, 10443, -16230, -7792, -17010, 22850, 26999, -22520, -3965, -28776, 20422, 32717, -13509, 615, 3751, 14471, -31442, 331, -4401, -13910, -9235, -22272, -20351, -18042, -12559, -26528, -21608, -10967, -10773, 7318, 29416, 11987, -18385, 18446, -7565, -1826, 5991, -1501, -18115, 11245, -26602, 26281, -27812, 606, 10535, -24038, -9512, -28585, 17743, -23902, -5358, 14428, -6620, -11902, 29990, -1351, 229, 505, -20824, 2948, -10728, -8917, -30529, -8611, 10386, 8405, 29667, 1259, -933, 27763, 15110, -7538, 2579, -2260, 16781, 3587, 987, 10675, -12646, -26337, -15515, 10036, -10923, 19627, 23472, -19409, -25964, -15233, -12738, -17699, 21449, 12398, 31055, 3204, 10120, -5165, 28072, 3534, 8925, 8718, 12006, -14307, 3727, -2169, -9054, -32745, -27455, -2414, -30904, -27071, 29227, -1711, -32026, 16670, 4041, 11990, -6825, 19509, -10102, -5291, 14789, 13031, 27966, 3079, -30755, 18652, 8718, 17518, 27673, -21518, 26194, -7598, 8682, -30879, -26492, 25542, -683, 29625, -18786, -11302, 14478, -25560, 2884, 16250, -17512, -5658, 10514, -32180, 19268, 13426, -17484, 15865, 12636, 5169, -8869, 24014, 26874, 21372, -31006, 1717, 28024, 1712, 24846, 28640, 14211, 38, -32053, -23226, 4101, 10121, 17271, 67, 20471, -265, 17592, -17786, -14468, 836, 24620, -10300, -31533, 18124, -27177, 8895, -14010, 3583, 4616, -370, -1692, -24560, 7943, -15712, -548, 22854, 6585, -6472, -3219, -5611, -6953, 27266, 32132, -9528, 27921, -5179, 25555, -1361, 7012, 20560, -9756, 20686, -28590, -9269, 23420, -6441, -26236, -26378, -16303, -4482, -32143, 879, 28814, -15829, 13154, -32500, 10497, -15844, 27537, 12933, 24326, -8289, -25445, 5613, 3783, 19422, 13656, -28388, 10940, 23522, -8935, -10820, -23230, -6261, 8161, 16840, -23319, -14576, -20202, 9909, 14492, 17965, 830, 2347, -11266, -8371, -9564, -4490, 10044, -1236, -14600, 27197, 31869, 9030, 28833, 27173, -31152, 4385, 31150, 24565, -17190, 15066, 31896, -18756, 20622, -3244, -11415, 28206, 824, 11787, 17574, -32303, 23499, -23228, 24135, 29557, 11106, -12688, -1300, 16113, 4289, 8128, -10194, 8058, -24081, -13334, -22492, -20062, -21175, -31592, 11336, 26112, -14411, 29755, 8660, -19490, -11577, 17292, -8281, -2277, 3554, 4593, -2709, -5323, -8179, 10204, -17385, 18261, -301, 12645, -14775, -12287, -16381, 29835, -25494, 17111, 17776, 19593, 2789, 17686, -30471, -23637, -29774, -16137, 14721, -22862, 4031, -29039, -22289, 11175, 10518, -15373, 695, -23720, -24736, 14425, -9407, -25318, 2501, -5415, -21451, -20293, -19032, 27457, 28601, -11034, -9415, -8598, -30687, -26219, 31028, 9152, -20955, -30113, 31446, -23025, -14905, 384, -738, -871, 43, -5814, -6575, -12151, 13081, 14489, -3276, -24880, -27900, 5863, 7411, -21359, -26944, -9252, 15265, -12092, -8907, 17623, -13430, -3138, 23092, 10217, 13241, 1005, 11791, -12903, -12487, -13885, -8748, -7247, -12551, 1132, 16750, 29330, 9297, -22940, -2912, 7094, -3066, 20032, -13050, -26769, -32399, -23202, 13843, 18265 + // Mixed content + 0, 20065, 20774, 14478, 7238, -8053, -16118, -4051, 7534, 6075, 3660, -2261, -17285, -20472, -3071, 12656, 19351, 24507, 16764, -5807, -17284, -11343, -5570, 1128, 11683, 7992, -8598, -12980, -4950, 2096, 14516, 28344, 21538, 414, -11404, -16217, -18132, -4858, 13563, 13604, 3724, 32, -4475, -6513, 8151, 23989, 20258, 8508, -1704, -17249, -25082, -10049, 8615, 14091, 16355, 14067, -790, -9122, 1929, 12576, 13845, 15030, 7381, -13670, -23561, -13069, -737, 10830, 25231, 24491, 6096, -4544, -2850, -1845, 4676, 16574, 12215, -5964, -14129, -13027, -9898, 6065, 27202, 28380, 14823, 5084, -5222, -13918, -4550, 11428, 11365, 3816, -424, -9456, -14133, 1869, 21552, 25413, 22684, 15389, -4598, -19263, -11696, 681, 5865, 12445, 12521, -2447, -10764, -435, 10586, 17554, 26412, 21788, -1044, -16380, -15529, -11888, -1615, 16659, 20446, 7035, -458, -336, -1161, 7875, 23559, 21483, 4371, -7233, -15614, -21255, -8114, 14640, 21499, 16945, 13025, 2104, -8840, -766, 13847, 14491, 9531, 3725, -12102, -23332, -11514, 7094, 16637, 24423, 24493, 6412, -9454, -6591, -251, 3352, 11817, 11634, -5689, -16853, -11022, -2732, 8793, 26686, 29578, 11646, -3250, -9050, -14188, -8191, 9209, 13344, 2263, -4056, -7008, -10299, 1348, 22278, 26522, 16272, 6387, -8487, -23100, -16775, 1463, 8630, 9698, 10245, -523, -11784, -3252, 12037, 16701, 18293, 14505, -5708, -23916, -20524, -9316, -5, 14238, 20734, 7077, -5948, -4177, -816, 3751, 15842, 16850, -1764, -16792, -19304, -19174, -8705, 14023, 23853, 14256, 5119, -2037, -11764, -8128, 8128, 11764, 2037, -5119, -14256, -23853, -14023, 8705, 19174, 19304, 16792, 1764, -16850, -15842, -3751, 816, 4177, 5948, -7077, -20734, -14238, 5, 9316, 20524, 23916, 5708, -14505, -18293, -16701, -12037, 3252, 11784, 523, -10245, -9698, -8630, -1463, 16775, 23100, 8487, -6387, -16272, -26522, -22278, -1348, 10299, 7008, 4056, -2263, -13344, -9209, 8191, 14188, 9050, 3250, -11646, -29578, -26686, -8793, 2732, 11022, 16853, 5689, -11634, -11817, -3352, 251, 6591, 9454, -6412, -24493, -24423, -16637, -7094, 11514, 23332, 12102, -3725, -9531, -14491, -13847, 766, 8840, -2104, -13025, -16945, -21499, -14640, 8114, 21255, 15614, 7233, -4371, -21483, -23559, -7875, 1161, 336, 458, -7035, -20446, -16659, 1615, 11888, 15529, 16380, 1044, -21788, -26412, -17554, -10586, 435, 10764, 2447, -12521, -12445, -5865, -681, 11696, 19263, 4598, -15389, -22684, -25413, -21552, -1869, 14133, 9456, 424, -3816, -11365, -11428, 4550, 13918, 5222, -5084, -14823, -28380, -27202, -6065, 9898, 13027, 14129, 5964, -12215, -16574, -4676, 1845, 2850, 4544, -6096, -24491, -25231, -10830, 737, 13069, 23561, 13670, -7381, -15030, -13845, -12576, -1929, 9122, 790, -14067, -16355, -14091, -8615, 10049, 25082, 17249, 1704, -8508, -20258, -23989, -8151, 6513, 4475, -32, -3724, -13604, -13563, 4858, 18132, 16217, 11404, -414, -21538, -28344, -14516, -2096, 4950, 12980, 8598, -7992, -11683, -1128, 5570, 11343, 17284, 5807, -16764, -24507, -19351, -12656, 3071, 20472, 17285, 2261, -3660, -6075, -7534, 4051, 16118, 8053, -7238, -14478, -20774, -20065, 0, 20065, 20774, 14478, 7238, -8053, -16118, -4051, 7534, 6075, 3660, -2261, -17285, -20472, -3071, 12656, 19351, 24507, 16764, -5807, -17284, -11343, -5570, 1128, 11683, 7992, -8598, -12980, -4950, 2096, 14516, 28344, 21538, 414, -11404, -16217, -18132, -4858, 13563, 13604, 3724, 32, -4475, -6513, 8151, 23989, 20258, 8508, -1704, -17249, -25082, -10049, 8615, 14091, 16355, 14067, -790, -9122, 1929, 12576, 13845, 15030, 7381, -13670, -23561, -13069, -737, 10830, 25231, 24491, 6096 +}; + +const q15_t* samples_512(void) { + return _samples_512; +} + +static const q15_t _samples_64[64] = { + 0, 16209, 4717, -14836, -9035, 12206, 12588, -8543, -15074, 4155, 16284, 583, -16114, -5273, 14579, 9516, -11809, -12953, 8039, 15293, -3588, -16338, -1166, 15998, 5822, -14304, -9985, 11398, 13302, -7526, -15493, 3017, 16371, 1747, -15862, -6364, 14010, 10441, -10971, -13634, 7003, 15673, -2441, -16383, -2326, 15706, 6897, -13699, -10884, 10531, 13949, -6471, -15833, 1863, 16375, 2902, -15530, -7422, 13370, 11313, -10077, -14246, 5931, 15973 +}; + +const q15_t* samples_64(void) { + return _samples_64; +} + diff --git a/harmony/Sources/Application/Button.swift b/harmony/Sources/Application/Button.swift new file mode 100644 index 00000000..03867b54 --- /dev/null +++ b/harmony/Sources/Application/Button.swift @@ -0,0 +1,29 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct Button: ~Copyable { + var pin: UInt32 + + init(pin: UInt32, onPress callback: @convention(c) (UInt32, UInt32) -> Void) { + self.pin = pin + + gpio_init(pin) + gpio_set_dir(pin, false) // input + gpio_pull_up(pin) // pull up the pin + gpio_set_irq_enabled_with_callback( + pin, UInt32(GPIO_IRQ_EDGE_FALL.rawValue), true, callback) + } + + deinit { + gpio_deinit(self.pin) + } +} + diff --git a/harmony/Sources/Application/ButtonTimes.swift b/harmony/Sources/Application/ButtonTimes.swift new file mode 100644 index 00000000..63d53b47 --- /dev/null +++ b/harmony/Sources/Application/ButtonTimes.swift @@ -0,0 +1,42 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct ButtonTimes { + typealias Times = ( + UInt32, UInt32, UInt32, UInt32, + UInt32, UInt32, UInt32, UInt32, + UInt32, UInt32, UInt32, UInt32) + static let count = 12 + static let rawSize = MemoryLayout.size + static let reboundSize = Self.count * MemoryLayout.size + + private var times: Times = + (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + + subscript(_ index: some FixedWidthInteger) -> UInt32 { + get { + precondition(Self.rawSize == Self.reboundSize) + return withUnsafePointer(to: self.times) { + $0.withMemoryRebound(to: UInt32.self, capacity: Self.count) { + $0[Int(index)] + } + } + } + set { + precondition(Self.rawSize == Self.reboundSize) + return withUnsafeMutablePointer(to: &self.times) { + $0.withMemoryRebound(to: UInt32.self, capacity: Self.count) { + $0[Int(index)] = newValue + } + } + } + } +} diff --git a/harmony/Sources/Application/LEDStrip.swift b/harmony/Sources/Application/LEDStrip.swift new file mode 100644 index 00000000..f8f058b5 --- /dev/null +++ b/harmony/Sources/Application/LEDStrip.swift @@ -0,0 +1,92 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct LEDStrip: ~Copyable { + var dataPin: UInt32 + var ledCount: Int + + var pio: UInt32 + var pioSm: UInt32 + var pioHw: PIO + var pioOffset: UInt32 + + init( + dataPin: UInt32, + ledCount: Int, + // FIXME: change to `PIO` + pio: UInt32, + pioSm: UInt32 + ) { + self.dataPin = dataPin + self.ledCount = ledCount + self.pio = pio + self.pioSm = pioSm + self.pioHw = + switch self.pio { + case 0: _pio0() + case 1: _pio1() + default: fatalError("Invalid PIO index") + } + self.pioOffset = 0 + + pio_gpio_init(self.pioHw, self.dataPin) + + // FIXME: lower quadrature_encoder_program_init max_step_rate + pio_sm_claim(self.pioHw, self.pioSm) + self.pioOffset = withUnsafePointer(to: ws2812_program) { + UInt32(pio_add_program(self.pioHw, $0)) + } + ws2812_program_init(self.pioHw, self.pioSm, self.pioOffset, self.dataPin, 800000, false) + } + + deinit { + withUnsafePointer(to: ws2812_program) { + pio_remove_program_and_unclaim_sm($0, self.pioHw, self.pioSm, self.pioOffset) + } + + gpio_deinit(self.dataPin) + } +} + +extension LEDStrip { + // mutating func putPixel(pixelGRB: UInt32) { + // pio_sm_put_blocking(self.pioHw, self.pioSm, pixelGRB << 8) + // } + + // func urgb_u32(_ r: UInt8, _ g: UInt8, _ b: UInt8) -> UInt32 { + // (UInt32(r) << 8) | (UInt32(g) << 16) | UInt32(b) + // } + + // mutating func patternSnakes(t: UInt32) { + // for i in 0..> 1)) % 64 + // if x < 10 { + // putPixel(pixelGRB: urgb_u32(0xff, 0, 0)) + // } else if x >= 15 && x < 25 { + // putPixel(pixelGRB: urgb_u32(0, 0xff, 0)) + // } else if x >= 30 && x < 40 { + // putPixel(pixelGRB: urgb_u32(0, 0, 0xff)) + // } else { + // putPixel(pixelGRB: 0) + // } + // } + // } + + mutating func setColor(red: UInt8, green: UInt8, blue: UInt8) { + for _ in 0.. StreamingSerialMessage, + terminator: StaticString = "\n" +) { + _ = message() + SerialPrinter().write(terminator) +} + +/// An implementation of `CharacterPrinter` that calls `putchar` to write to serial. +struct SerialPrinter: CharacterPrinter { + func write(rawByte: UInt8) { + _ = putchar(CInt(rawByte)) + } + + func write(contentsOf: Self) { + // Don't need to handle nested SerialPrinter objects: they will have + // already written out to serial. + } +} + +// String interpolation objects cast to this type will be streamed +// to serial via calls to `putchar`. +typealias StreamingSerialMessage = StreamingMessage + +/// This file provides functionality for logging interpolated strings without +/// requiring construction of String types (which are not available in Embedded +/// Swift). + +/// Types that implement `Loggable` are able to be logged using the +/// `StreamingInterpolation` mechanisms. +/// +/// The `write` function should write a human-readable instance of the object to +/// the passed-in `Printer` type: +/// +/// struct MyType: Loggable { +/// func write(to printer: Printer) { +/// printer.write("A static string") +/// printer.write(42) +/// printer.write(anyLoggableItem) +/// printer.write("A more \(complex) string \(interpolation)") +/// } +/// } +protocol Loggable: ~Copyable { + func write(to: Printer) +} + +/// A type that supports printing individual characters. +/// +/// Characters can either be streamed directly out to a log (e.g. stdout), or +/// buffered any manually written out by the user. +protocol CharacterPrinter { + /// Initialize a new instance. + /// + /// Unfortunately, Swift calls this from within the compiler's generated + /// code, with a fresh object created each time string interpolation is + /// used, and no chance to have any instance variables. + init() + + /// Write a single byte to output. + func write(rawByte: UInt8) + + /// Write the contents of the given `CharacterPrinter` to this + /// `CharacterPrinter`. + /// + /// This method is required to be implemented so that implementors of the + /// `Loggable` protocol can themselves use String Interpolation. + /// + /// Implementations of `CharacterPrinter` that don't buffer anything (for + /// example, if they just forward characters directly to `stdout`) need not + /// do anything here. However, implementations of `CharacterPrinter` that + /// are attempting to buffer the text will need to append the contents of + /// the child `CharacterPrinter` into the parent `CharacterPrinter`. + func write(contentsOf: Self) +} + +// Convenience functions for writing basic objects to a CharacterPrinter. +// +// Most types should either just implement `Loggable` (preferred), or implement +// their type as an overload to `StreamingInterpolation.appendInterpolation` +// directly (for generic types or types requiring additional parameters). +extension CharacterPrinter { + /// Write the given object that implements the `Loggable` interface to the + /// printer. + func write(_ value: some Loggable) { + value.write(to: self) + } + + /// Write an integer to the printer. + func write(_ value: some FixedWidthInteger) { + value.write(to: self) + } + + /// Write the given buffer to the printer. + /// + /// This function will print the entire buffer, including NUL bytes and + /// anything following them. To print NUL-terminated strings, see the + /// overload `write(nulTerminated)`. + func write(contentsOf buffer: UnsafeBufferPointer) { + self.write(contentsOf: UnsafeRawBufferPointer(buffer)) + } + + /// Write the given buffer to the printer. + /// + /// This function will print the entire buffer, including NUL bytes and + /// anything following them. To print NUL-terminated strings, see the + /// overload `write(nulTerminated)`. + @inline(never) // avoid aggressive inlining of non-perf-sensitive code + func write(contentsOf buffer: UnsafeRawBufferPointer) { + for c in buffer { + self.write(rawByte: c) + } + } + + /// Write a NULL-terminated (C style) string to the printer. + @inline(never) // avoid aggressive inlining of non-perf-sensitive code + func write(nullTerminated value: UnsafeBufferPointer) { + for c in value { + if c == 0 { + break + } + self.write(rawByte: UInt8(c)) + } + } + + // Write the given interpolated string to this character printer. + // + // This allows implementations of `Loggable` to themselves use interpolated + // strings: + // + // ``` + // class MyClass: Loggable { + // func write(printer: P) { + // printer.write("hello, \(self.world)") + // } + // } + // ``` + @_disfavoredOverload + func write(_ value: @autoclosure () -> StreamingMessage) { + self.write(contentsOf: value().printer) + } +} + +// Loggable implementation for various types. +extension Bool: Loggable { + func write(to printer: Printer) { + if self { + printer.write("true") + } else { + printer.write("false") + } + } +} + +extension StaticString: Loggable { + func write(to printer: Printer) { + self.withUTF8Buffer { + printer.write(contentsOf: $0) + } + } +} + +extension UnsafeRawBufferPointer: Loggable { + func write(to printer: Printer) { + let base = UInt(bitPattern: self.baseAddress) + printer.write("\(hex: base), count: \(self.count)") + } +} + +extension UnsafeMutableRawBufferPointer: Loggable { + func write(to printer: Printer) { + printer.write(UnsafeRawBufferPointer(self)) + } +} + +extension CharacterPrinter { + // Write the given UInt64 to a CharacterPrinter. + // + // We use this function so that all integer sizes can reuse the same version of + // the code in the compiled binary. + @inline(never) + fileprivate func write(value: UInt64, isNegative: Bool, radix: Int) { + precondition(radix == 10 || radix == 16) + + // Special case for zero, which otherwise would have no digits printed for + // it in the algorithm below. + if value == 0 { + if radix == 16 { + self.write("0x0") + } else { + self.write("0") + } + return + } + + // Convert the given digit to its ASCII code. + func _ascii(_ digit: UInt8) -> UInt8 { + if digit < 10 { + UInt8(("0" as Unicode.Scalar).value) + digit + } else { + UInt8(("a" as Unicode.Scalar).value) + (digit - 10) + } + } + + // Render to a temporary buffer. + // + // Worst case: 64-bit type and radix 10, requires `ceil(log_10(2**64)) == 20` + // characters to render. We use another for the negative sign, and another two + // for the `0x` prefix on base 16. + withUnsafeTemporaryAllocation(byteCount: 32, alignment: 1) { buffer in + var index = buffer.count - 1 + var value = value + while value != 0 { + let (quotient, remainder) = value.quotientAndRemainder( + dividingBy: UInt64(radix)) + buffer[index] = _ascii(UInt8(truncatingIfNeeded: remainder)) + index -= 1 + value = quotient + } + if radix == 16 { + buffer[index - 1] = UInt8(("0" as Unicode.Scalar).value) + buffer[index - 0] = UInt8(("x" as Unicode.Scalar).value) + index -= 2 + } + if isNegative { + buffer[index] = UInt8(("-" as Unicode.Scalar).value) + index -= 1 + } + let start = index + 1 + let end = buffer.count - 1 + let count = end - start + 1 + self.write( + contentsOf: + UnsafeBufferPointer( + start: buffer.baseAddress?.advanced(by: start).assumingMemoryBound( + to: UInt8.self), count: count)) + } + } +} + +// Functionality to write FixedWidthInteger types to a CharacterPrinter. +extension FixedWidthInteger { + // Write a FixedWidthInteger to the given CharacterPrinter in the given radix. + func write(to printer: some CharacterPrinter, radix: Int = 10) { + precondition(radix == 10 || radix == 16) + precondition(Self.bitWidth <= 64) + + let isNegative = Self.isSigned && self < (0 as Self) + let value = self.magnitude + printer.write(value: UInt64(value), isNegative: isNegative, radix: radix) + } +} + +// Write a `StringInterpolation` to the given `CharacterPrinter` type. +// +// That is, given a type `Printer` implementing the protocol +// `CharacterPrinter`, we will convert types used in string interpolations into +// a form that can be written out to the Printer. +// +// See Swift's documentation on `StringInterpolationProtocol` for details. +struct StreamingInterpolation: StringInterpolationProtocol +{ + typealias StringLiteralType = StaticString + var printer: P = P() + + init(literalCapacity: Int, interpolationCount: Int) {} + + // Write a string literal. + mutating func appendLiteral(_ literal: StaticString) { + printer.write(literal) + } + + // Write a StaticString interpolated variable. + mutating func appendInterpolation( + _ value: StaticString + ) { + printer.write(value) + } + + // Write a basic integer type (Int16, UInt64, etc). + mutating func appendInterpolation( + _ value: some FixedWidthInteger + ) { + printer.write(value) + } +} + +extension StreamingInterpolation { + mutating func appendInterpolation(cString pointer: UnsafePointer?) { + guard var pointer else { + self.printer.write("nil") + return + } + while pointer.pointee != 0 { + self.printer.write(rawByte: pointer.pointee) + pointer = pointer.advanced(by: 1) + } + } + + mutating func appendInterpolation(cString pointer: UnsafePointer?) { + guard var pointer else { + self.printer.write("nil") + return + } + while pointer.pointee != 0 { + self.printer.write(rawByte: UInt8(pointer.pointee)) + pointer = pointer.advanced(by: 1) + } + } + + mutating func appendInterpolation(cString buffer: UnsafeBufferPointer?) + { + guard let buffer else { + self.printer.write("nil") + return + } + for byte in buffer { + guard byte != 0 else { break } + self.printer.write(rawByte: byte) + } + } + +} + +extension StreamingInterpolation { + // Write a basic integer type in hex. + // + // This can be used by writing `"the value in hex is \(hex: value)."`. + mutating func appendInterpolation( + hex value: @autoclosure () -> Word + ) { + value().write(to: printer, radix: 16) + } + + // Write an object conforming to the `Loggable` protocol. + mutating func appendInterpolation( + _ value: @autoclosure () -> some Loggable + ) { + printer.write(value()) + } + + // Write a pointer's value. + mutating func appendInterpolation(_ value: some _Pointer) { + appendInterpolation(hex: UInt(bitPattern: value)) + } + + // Write a generic `UnsafeBufferPointer` value to the stream. + mutating func appendInterpolation( + _ value: @autoclosure () -> UnsafeBufferPointer + ) { + appendInterpolation(hex: UInt(bitPattern: value().baseAddress)) + appendInterpolation(", count: ") + appendInterpolation(value().count) + } + + // Write a generic `UnsafeMutableBufferPointer` value to the stream. + mutating func appendInterpolation( + _ value: @autoclosure () -> UnsafeMutableBufferPointer + ) { + appendInterpolation(UnsafeBufferPointer(value())) + } + +} + +// Initiates a StringInterpolation. +// +// See Swift's documentation on `StringInterpolationProtocol` for details. +struct StreamingMessage: ExpressibleByStringInterpolation { + typealias StringInterpolation = StreamingInterpolation

+ + init(printer: P, stringInterpolation: StreamingInterpolation

) { + self.interpolation = stringInterpolation + } + + init(stringInterpolation: StreamingInterpolation

) { + self.interpolation = stringInterpolation + } + + init(stringLiteral value: StaticString) { + self.interpolation = StreamingInterpolation( + literalCapacity: 0, interpolationCount: 0) + self.interpolation.appendLiteral(value) + } + + var printer: P { interpolation.printer } + + private var interpolation: StreamingInterpolation

+} diff --git a/harmony/Sources/Application/Main.swift b/harmony/Sources/Application/Main.swift new file mode 100644 index 00000000..23eb9897 --- /dev/null +++ b/harmony/Sources/Application/Main.swift @@ -0,0 +1,387 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// swift-format-ignore: AlwaysUseLowerCamelCase, NeverForceUnwrap + +struct A2DPStreamEndpoint { + var a2dp_local_seid: UInt8 = 0 + var media_sbc_codec_configuration: (UInt8, UInt8, UInt8, UInt8) = (0, 0, 0, 0) +} + +var hci_event_callback_registration = btstack_packet_callback_registration_t() +var stream_endpoint = A2DPStreamEndpoint() + +// we support all configurations with bitpool 2-53 +var media_sbc_codec_capabilities: (UInt8, UInt8, UInt8, UInt8) = ( + //(AVDTP_SBC_44100 << 4) | AVDTP_SBC_STEREO, + 0xFF, + //(AVDTP_SBC_BLOCK_LENGTH_16 << 4) | (AVDTP_SBC_SUBBANDS_8 << 2) | AVDTP_SBC_ALLOCATION_METHOD_LOUDNESS, + 0xFF, + 2, 53 +) + +// FIXME: use Vector +let sdp_avdtp_sink_service_buffer = UnsafeMutableRawBufferPointer.allocate( + byteCount: 150, + alignment: MemoryLayout.alignment) +// FIXME: use Vector +let sdp_avrcp_target_service_buffer = UnsafeMutableRawBufferPointer.allocate( + byteCount: 150, + alignment: MemoryLayout.alignment) +// FIXME: use Vector +let sdp_avrcp_controller_service_buffer = + UnsafeMutableRawBufferPointer.allocate( + byteCount: 200, + alignment: MemoryLayout.alignment) +// FIXME: use Vector +let device_id_sdp_service_buffer = UnsafeMutableRawBufferPointer.allocate( + byteCount: 100, + alignment: MemoryLayout.alignment) + +// FIXME: use `Vector` +func buttonCallback(pin: UInt32, event: UInt32) { + guard event & UInt32(GPIO_IRQ_EDGE_FALL.rawValue) != 0 else { return } + Application.shared.buttonPressed(pin: pin) +} + +let BUFFER_SAMPLE_CAPACITY = 512 + + +let LED_STRIP_LED_COUNT = 20 + +let MUTE_BUTTON_PIN: UInt32 = 6 +let ROTARY_ENCODER_A_PIN : UInt32 = 7 +let ROTARY_ENCODER_B_PIN: UInt32 = 8 +let PLAY_PAUSE_BUTTON_PIN: UInt32 = 9 +let PREVIOUS_BUTTON_PIN: UInt32 = 10 +let NEXT_BUTTON_PIN: UInt32 = 11 +let LED_STRIP_PIN: UInt32 = 17 +let EM_DRIVE_PIN: UInt32 = 18 + +let WIRELESS_LED_PIN = UInt32(CYW43_WL_GPIO_LED_PIN) + +struct Application: ~Copyable { + var audioEngine = AudioEngine() + + var audioAnalyzer = AudioAnalyzer() + + let wirelessLedBlinkPeriodMs: UInt32 = 1000 + var wirelessLedBlinkTimer = btstack_timer_source_t() + var wirelessLedBlinkState = false + + let ledStripUpdatePeriodMs: UInt32 = 1000 + var ledStripUpdateTimer = btstack_timer_source_t() + var ledStrip = LEDStrip( + dataPin: LED_STRIP_PIN, + ledCount: LED_STRIP_LED_COUNT, + pio: 0, + pioSm: 1) + + let volumeKnobSamplerPeriodMs: UInt32 = 100 + var volumeKnobSamplerTimer = btstack_timer_source_t() + var volumeKnob = QuadratureEncoder( + pinA: ROTARY_ENCODER_A_PIN, + pinB: ROTARY_ENCODER_B_PIN, + pio: 1, + pioSm: 0) + + var previousPressTimes = ButtonTimes() + + var muteButton = Button( + pin: MUTE_BUTTON_PIN, + onPress: buttonCallback) + var nextButton = Button( + pin: NEXT_BUTTON_PIN, + onPress: buttonCallback) + var playPauseButton = Button( + pin: PLAY_PAUSE_BUTTON_PIN, + onPress: buttonCallback) + var previousButton = Button( + pin: PREVIOUS_BUTTON_PIN, + onPress: buttonCallback) + + mutating func run() { + stdio_init_all() + i2c_init() + + multicore_launch_core1 { + log("core1_main") + Application.shared.audioAnalyzer.run() + } + + log("Hello!") + log("sys clock running at \(clock_get_hz(clk_sys)) Hz") + log("Initializing cyw43_driver") + precondition(cyw43_arch_init() == 0, "cyw43_arch_init failed") + wirelessLedBlink(count: 2) + + gpio_init(EM_DRIVE_PIN) + gpio_set_dir(EM_DRIVE_PIN, true) + + var sdp = ServiceDiscoveryProtocol() + _setup_demo(&sdp) + + + // turn on! + log("Starting BTstack ...") + hci_power_control(HCI_POWER_ON) + wirelessLedBlink(count: 2) + log("[main] Started, starting btstack run loop") + + btstack_run_loop_set_timer_handler(&self.volumeKnobSamplerTimer) { timer in + guard let timer else { return } + Application.shared.volumeKnobSamplerHandler(&timer.pointee) + } + btstack_run_loop_set_timer(&self.volumeKnobSamplerTimer, volumeKnobSamplerPeriodMs) + btstack_run_loop_add_timer(&self.volumeKnobSamplerTimer) + + btstack_run_loop_set_timer_handler(&self.ledStripUpdateTimer) { timer in + guard let timer else { return } + Application.shared.ledStripUpdateHandler(&timer.pointee) + } + btstack_run_loop_set_timer(&self.ledStripUpdateTimer, ledStripUpdatePeriodMs) + btstack_run_loop_add_timer(&self.ledStripUpdateTimer) + + btstack_run_loop_set_timer_handler(&self.wirelessLedBlinkTimer) { timer in + guard let timer else { return } + Application.shared.wirelessLedBlinkHandler(&timer.pointee) + } + btstack_run_loop_set_timer(&self.wirelessLedBlinkTimer, wirelessLedBlinkPeriodMs) + btstack_run_loop_add_timer(&self.wirelessLedBlinkTimer) + + + btstack_run_loop_execute() // btstack_run_loop_execute never returns + _ = sdp // make sure SDP lives until the runloop exits + } +} + +// Timer handlers +extension Application { + mutating func volumeKnobSamplerHandler(_ timer: inout btstack_timer_source_t) { + let scaleFactor: Int32 = 5 + audioEngine.adjustVolume(by: Application.shared.volumeKnob.delta() * scaleFactor) + btstack_run_loop_set_timer(&timer, volumeKnobSamplerPeriodMs) + btstack_run_loop_add_timer(&timer) + } + + mutating func ledStripUpdateHandler(_ timer: inout btstack_timer_source_t) { + ledStrip.setColor( + red: .random(in: 0...255), + green: .random(in: 0...255), + blue: .random(in: 0...255)) + btstack_run_loop_set_timer(&timer, ledStripUpdatePeriodMs) + btstack_run_loop_add_timer(&timer) + } + + mutating func wirelessLedBlinkHandler(_ timer: inout btstack_timer_source_t) { + self.wirelessLedBlinkState.toggle() + cyw43_arch_gpio_put(WIRELESS_LED_PIN, self.wirelessLedBlinkState) + btstack_run_loop_set_timer(&timer, wirelessLedBlinkPeriodMs) + btstack_run_loop_add_timer(&timer) + } +} + +// Button press callbacks +extension Application { + // FIXME: use `time_us_64` + // This is a particularly large debounce time + static let buttonDebounceTimeMs = 150 + mutating func buttonPressed(pin: UInt32) { + let currentTime = to_ms_since_boot(get_absolute_time()) + guard currentTime - previousPressTimes[pin] > Self.buttonDebounceTimeMs else { + log("soft debounce \(pin)") + return + } + previousPressTimes[pin] = currentTime + + switch pin { + case MUTE_BUTTON_PIN: + self.toggleMute() + case NEXT_BUTTON_PIN: + self.nextTrack() + case PLAY_PAUSE_BUTTON_PIN: + self.playPauseTrack() + case PREVIOUS_BUTTON_PIN: + self.previousTrack() + default: + // ignore + break + } + } + + mutating func toggleMute() { + self.audioEngine.toggleMute() + } + + mutating func nextTrack() { + log("avrcp_controller_forward") + avrcp_controller_forward(avrcp_connection.avrcp_cid) + } + + mutating func playPauseTrack() { + // FIXME: this state management is almost certainly wrong + if audioEngine.running { + log("avrcp_controller_stop") + avrcp_controller_pause(avrcp_connection.avrcp_cid) + } else { + log("avrcp_controller_play") + avrcp_controller_play(avrcp_connection.avrcp_cid) + } + } + + mutating func previousTrack() { + log("avrcp_controller_backward") + avrcp_controller_backward(avrcp_connection.avrcp_cid) + } +} + +extension Application { + func wirelessLedBlink(count: UInt32) { + for _ in 0.. Int32 { + let value = quadrature_encoder_get_count(self.pioHw, self.pioSm) + self.previousValue = value + return value + } + + mutating func delta() -> Int32 { + let value = quadrature_encoder_get_count(self.pioHw, self.pioSm) + // NOTE: Thanks to two's complement arithmetic `delta`` will always be + // correct even when `value`` wraps around `Int32.max` / `Int32.min`. + let delta = value &- self.previousValue + self.previousValue = value + return delta + } +} diff --git a/harmony/Sources/Application/Stubs.swift b/harmony/Sources/Application/Stubs.swift new file mode 100644 index 00000000..b6e8deb0 --- /dev/null +++ b/harmony/Sources/Application/Stubs.swift @@ -0,0 +1,39 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// Embedded Swift currently requires posix_memalign, but the C libraries in the +// Pico SDK do not provide it. Let's implement it and forward the calls to +// aligned_alloc(3). +@_cdecl("posix_memalign") +public func posix_memalign( + memptr: UnsafeMutablePointer, + alignment: size_t, + size: size_t +) -> Int32 { + if let allocation = aligned_alloc(alignment, size) { + memptr.pointee = allocation + return 0 + } + return _errno() +} + +// FIXME: document +@_cdecl("swift_isEscapingClosureAtFileLocation") +func swift_isEscapingClosureAtFileLocation( + object: UnsafeRawPointer, + filename: UnsafePointer, + filenameLength: Int32, + line: Int32, + column: Int32, + type: UInt +) -> Bool { + false +} diff --git a/harmony/Sources/Audio/AudioAnalyzer.swift b/harmony/Sources/Audio/AudioAnalyzer.swift new file mode 100644 index 00000000..1939fd3f --- /dev/null +++ b/harmony/Sources/Audio/AudioAnalyzer.swift @@ -0,0 +1,94 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct AnalyzedAudioBuffer: ~Copyable { + var enableMagnet: Bool + var buffer: AudioBuffer +} + +struct AudioAnalyzer: ~Copyable { + // FIXME: add soft limit for time magnet can be enabled + + var fft_instance: arm_rfft_instance_q15 + // Used for both sample input and fft magnitude output + var dataBuffer0: UnsafeMutableBufferPointer + // Used for fft output + var dataBuffer1: UnsafeMutableBufferPointer + + init() { + let audioBufferCapacity = BUFFER_SAMPLE_CAPACITY + let fftOutputBufferCapacity = BUFFER_SAMPLE_CAPACITY * 2 // real + complex + + self.fft_instance = arm_rfft_instance_q15() + self.dataBuffer0 = .allocate(capacity: audioBufferCapacity) + self.dataBuffer1 = .allocate(capacity: fftOutputBufferCapacity) + // IMPORTANT: `bitReverseFlag` must be set. I don't understand why based on + // the documentation + arm_rfft_init_q15(&fft_instance, UInt32(audioBufferCapacity), 0, 1) + } + + deinit { + self.dataBuffer1.deallocate() + self.dataBuffer0.deallocate() + } + + mutating func run() { + while true { + guard let buffer = Application.shared.audioEngine.buffers.popFullBuffer() else { continue } + + /// Copy data from buffer to dataBuffer0 (because the fft will modify the data) + precondition(self.dataBuffer0.update(from: buffer.storage).index == self.dataBuffer0.count) + // Perform the fft using the data in dataBuffer0 and store the result in dataBuffer1 + arm_rfft_q15(&self.fft_instance, self.dataBuffer0.baseAddress, self.dataBuffer1.baseAddress) + // Calculate the magnitude of the fft output in dataBuffer1 and store the result in dataBuffer0 + arm_cmplx_mag_q15(self.dataBuffer1.baseAddress, self.dataBuffer0.baseAddress, UInt32(self.dataBuffer0.count)) + + // NOTE: This is probably wrong becasue buffer.storage is stereo data + + // Given we take an fft of audio data at 44100 Hz with a window of 512 + // samples, each output bin of the fft represents a 172 Hz range + // (44100 Hz / 2 / 512 = ~172Hz) + + // 1 Khz + let lowend = + self.dataBuffer0[00] + + self.dataBuffer0[01] + + self.dataBuffer0[02] + + self.dataBuffer0[03] + + self.dataBuffer0[04] + + self.dataBuffer0[05] + + self.dataBuffer0[06] + + self.dataBuffer0[07] + + self.dataBuffer0[08] + + self.dataBuffer0[09] + + self.dataBuffer0[10] + + self.dataBuffer0[10] + + self.dataBuffer0[11] + + self.dataBuffer0[12] + + self.dataBuffer0[13] + + self.dataBuffer0[14] + + self.dataBuffer0[15] + + self.dataBuffer0[16] + + self.dataBuffer0[17] + + self.dataBuffer0[18] + + self.dataBuffer0[19] + + + + let avg = lowend / 20 + + let analyzedBuffer = AnalyzedAudioBuffer( + enableMagnet: avg > (1 << 8), + buffer: buffer) + Application.shared.audioEngine.buffers.pushAnalyzedBuffer(analyzedBuffer) + } + } +} diff --git a/harmony/Sources/Audio/AudioBuffer.swift b/harmony/Sources/Audio/AudioBuffer.swift new file mode 100644 index 00000000..49431b52 --- /dev/null +++ b/harmony/Sources/Audio/AudioBuffer.swift @@ -0,0 +1,28 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct AudioBuffer: ~Copyable { + // FIXME: Raw + var storage: UnsafeMutableBufferPointer + var capacity: Int { self.storage.count } + var count: Int + + init(capacity: Int) { + self.storage = .allocate(capacity: capacity) + self.storage.initialize(repeating: 0) + // FIXME: don't assume filled. + self.count = capacity + } + + deinit { + self.storage.deallocate() + } +} diff --git a/harmony/Sources/Audio/AudioBufferTransport.swift b/harmony/Sources/Audio/AudioBufferTransport.swift new file mode 100644 index 00000000..907637d3 --- /dev/null +++ b/harmony/Sources/Audio/AudioBufferTransport.swift @@ -0,0 +1,54 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct AudioBufferTransport: ~Copyable { + var emptyBuffers: Ring + var fullBuffers: Ring + var analyzedBuffers: Ring + + init(bufferCount: Int, bufferCapacity: Int) { + // Ring buffer needs one extra slot to distinguish between empty and full. + self.emptyBuffers = Ring(capacity: bufferCount + 1) + self.fullBuffers = Ring(capacity: bufferCount + 1) + self.analyzedBuffers = Ring(capacity: bufferCount + 1) + + for _ in 0.. AudioBuffer? { + self.emptyBuffers.pop() + } + + mutating func pushFullBuffer(_ buffer: consuming AudioBuffer) { + self.fullBuffers.push(buffer) + } + + mutating func popFullBuffer() -> AudioBuffer? { + self.fullBuffers.pop() + } + + mutating func pushAnalyzedBuffer(_ buffer: consuming AnalyzedAudioBuffer) { + self.analyzedBuffers.push(buffer) + } + + mutating func popAnalyzedBuffer() -> AnalyzedAudioBuffer? { + self.analyzedBuffers.pop() + } +} diff --git a/harmony/Sources/Audio/AudioEngine.swift b/harmony/Sources/Audio/AudioEngine.swift new file mode 100644 index 00000000..660b2367 --- /dev/null +++ b/harmony/Sources/Audio/AudioEngine.swift @@ -0,0 +1,120 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct AudioEngine: ~Copyable { + var running: Bool + var mute: Bool + var volume: UInt8 + var rawVolume: UInt8 + + var audio_pico: AudioPico + var audio_i2s: AudioI2S + var buffers: AudioBufferTransport + var amp: MAX9744 + + init() { + self.running = false + self.mute = false + self.volume = 0 + self.rawVolume = 30 + + self.audio_pico = AudioPico() + self.audio_i2s = AudioI2S( + data_pin: PICO_AUDIO_I2S_DATA_PIN, + clock_pin_base: PICO_AUDIO_I2S_CLOCK_PIN_BASE, + pio: 0, + pio_sm: 0, + // FIXME: Dont claim on each `media_processing_init`?? + dma_channel: UInt32(dma_claim_unused_channel(true))) + self.buffers = AudioBufferTransport(bufferCount: 8, bufferCapacity: BUFFER_SAMPLE_CAPACITY) + self.amp = MAX9744(i2c: i2c0_inst) + + self.set(volume: 0) + } +} + +extension AudioEngine { + mutating func `init`(_ configuration: MediaCodecConfigurationSBC) { + log(#function) + SBCDecoder.configure(mode: SBC_MODE_STANDARD) + + // setup audio playback + // FIXME: update channel count in resampler + // FIXME: update output sample-rate + + self.audio_i2s.update_pio_frequency( + UInt32(configuration.sampling_frequency)) + + self.running = false + } + + mutating func toggleMute() { + self.mute.toggle() + if self.mute { + self.amp.set(rawVolume: 0) + } else { + self.amp.set(rawVolume: rawVolume) + } + } + + mutating func set(volume: UInt8) { + guard self.volume != volume else { return } + self.volume = volume + // FIXME: + avrcp_target_volume_changed(avrcp_connection.avrcp_cid, volume >> 1) + + // Map volume (0-255) to gain (0-63) + let rawVolume = UInt8((UInt32(volume) * 63) / 255) + guard self.rawVolume != rawVolume else { return } + self.rawVolume = rawVolume + + guard !self.mute else { return } + self.amp.set(rawVolume: rawVolume) + } + + mutating func adjustVolume(by delta: Int32) { + guard delta != 0 else { return } + let volume = Int32(self.volume) + delta + let clamped = UInt8(clamping: volume) + log("Adjust volume by \(delta) to \(clamped)") + self.set(volume: clamped) + } + + mutating func start() { + guard !self.running else { return } + guard self.audio_pico.sbc_frames.count >= OPTIMAL_FRAMES_MIN else { return } + log(#function) + // start audio playback + self.audio_pico.start_stream() + self.audio_i2s.enable(true) + self.running = true + } + + mutating func pause() { + guard self.running else { return } + log(#function) + self.close() + } + + mutating func close() { + log(#function) + + // stop audio playback + self.running = false + self.audio_pico.stop_stream() + self.audio_i2s.enable(false) + + // discard pending data + self.audio_pico.decoded_audio.clear() + self.audio_pico.sbc_frame_size = 0 + self.audio_pico.sbc_frames.clear() + } +} diff --git a/harmony/Sources/Audio/AudioI2S.swift b/harmony/Sources/Audio/AudioI2S.swift new file mode 100644 index 00000000..52e4b96d --- /dev/null +++ b/harmony/Sources/Audio/AudioI2S.swift @@ -0,0 +1,174 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +var zero: UInt32 = 0 + +// FIXME: #define __time_critical_func(func_name) __not_in_flash_func(func_name) +// irq handler for DMA +@_cdecl("audio_i2s_dma_irq_handler") +func audio_i2s_dma_irq_handler() { + Application.shared.audioEngine.audio_i2s.handle_dma_irq() +} + +struct AudioI2S: ~Copyable { + var enabled: Bool + var freq: UInt32 + var playing_buffer: AudioBuffer? + + var pio: UInt32 + var pio_sm: UInt32 + var dma_channel: UInt32 + var pioHw: PIO + + init( + data_pin: UInt32, + clock_pin_base: UInt32, + pio: UInt32, + pio_sm: UInt32, + // FIXME: dma_channel is already claimed + dma_channel: UInt32, + ) { + self.enabled = false + self.freq = 0 + + self.pio = pio + self.pio_sm = pio_sm + self.dma_channel = dma_channel + + let gpioFunc: gpio_function_rp2040 + switch pio { + case 0: + self.pioHw = _pio0() + gpioFunc = GPIO_FUNC_PIO0 + case 1: + self.pioHw = _pio1() + gpioFunc = GPIO_FUNC_PIO1 + default: + fatalError("Invalid PIO index") + } + + gpio_set_function(data_pin, gpioFunc) + gpio_set_function(clock_pin_base, gpioFunc) + gpio_set_function(clock_pin_base + 1, gpioFunc) + + pio_sm_claim(self.pioHw, self.pio_sm) + + let offset = withUnsafePointer(to: audio_i2s_program) { + pio_add_program(self.pioHw, $0) + } + + audio_i2s_program_init( + self.pioHw, self.pio_sm, UInt32(offset), data_pin, clock_pin_base) + + __mem_fence_release() + + var dma_config = dma_channel_get_default_config(dma_channel) + + channel_config_set_dreq( + &dma_config, + UInt32(DREQ_PIO0_TX0.rawValue) + self.pio_sm) + + channel_config_set_transfer_data_size(&dma_config, i2s_dma_configure_size) + dma_channel_configure( + dma_channel, + &dma_config, + // FIXME: .advanced(by: Int(self.pio_sm)) + self.pioHw.pointer(to: \.txf), // dest + nil, // src + 0, // count + false) // trigger + + irq_add_shared_handler( + UInt32(DMA_IRQ_0.rawValue) + PICO_AUDIO_I2S_DMA_IRQ, + audio_i2s_dma_irq_handler, + UInt8(PICO_SHARED_IRQ_HANDLER_DEFAULT_ORDER_PRIORITY)) + dma_irqn_set_channel_enabled(PICO_AUDIO_I2S_DMA_IRQ, dma_channel, true) + } + + mutating func enable(_ enable: Bool) { + guard self.enabled != enable else { return } + self.enabled = enable + + irq_set_enabled(UInt32(DMA_IRQ_0.rawValue) + PICO_AUDIO_I2S_DMA_IRQ, enable) + + if enable { + self.audio_start_dma_transfer() + } else { + // if there was a buffer in flight, it will not be freed by DMA IRQ, + // let's do it manually + self.audio_finish_dma_transfer() + gpio_put(EM_DRIVE_PIN, false) + } + + pio_sm_set_enabled(self.pioHw, self.pio_sm, enable) + } + + mutating func update_pio_frequency(_ sample_freq: UInt32?) { + guard let sample_freq = sample_freq else { return } + guard sample_freq != self.freq else { return } + + let system_clock_frequency = clock_get_hz(clk_sys) + precondition(system_clock_frequency < 0x4000_0000) + // avoid arithmetic overflow + let divider = system_clock_frequency * 4 / sample_freq + precondition(divider < 0x1000000) + pio_sm_set_clkdiv_int_frac( + self.pioHw, self.pio_sm, UInt16(divider >> 8), UInt8(divider & 0xff)) + self.freq = sample_freq + } + + mutating func handle_dma_irq() { + guard dma_irqn_get_channel_status(PICO_AUDIO_I2S_DMA_IRQ, self.dma_channel) + else { return } + dma_irqn_acknowledge_channel(PICO_AUDIO_I2S_DMA_IRQ, self.dma_channel) + + // free the buffer we just finished + self.audio_finish_dma_transfer() + self.audio_start_dma_transfer() + } + + mutating func audio_start_dma_transfer() { + precondition(self.playing_buffer == nil) + + // FIXME: support dynamic frequency shifting + + if let ab = Application.shared.audioEngine.buffers.popAnalyzedBuffer() { + gpio_put(EM_DRIVE_PIN, ab.enableMagnet) + + let ab = ab.buffer + let buf = UnsafeMutableRawBufferPointer(ab.storage) + self.playing_buffer = consume ab + + var c = dma_get_channel_config(self.dma_channel) + channel_config_set_read_increment(&c, true) + dma_channel_set_config(self.dma_channel, &c, false) + dma_channel_transfer_from_buffer_now( + self.dma_channel, + buf.baseAddress, + // FIXME: using capacity instead of ab count + UInt32(buf.count) / 4) + } else { + gpio_put(EM_DRIVE_PIN, false) + log("buffer pool low") + // just play some silence + var c = dma_get_channel_config(self.dma_channel) + channel_config_set_read_increment(&c, false) + dma_channel_set_config(self.dma_channel, &c, false) + dma_channel_transfer_from_buffer_now( + self.dma_channel, &zero, PICO_AUDIO_I2S_SILENCE_BUFFER_SAMPLE_LENGTH) + } + } + + mutating func audio_finish_dma_transfer() { + guard let playingBuffer = self.playing_buffer.take() else { return } + Application.shared.audioEngine.buffers.pushEmptyBuffer(playingBuffer) + } +} diff --git a/harmony/Sources/Audio/AudioPico.swift b/harmony/Sources/Audio/AudioPico.swift new file mode 100644 index 00000000..ef540daf --- /dev/null +++ b/harmony/Sources/Audio/AudioPico.swift @@ -0,0 +1,181 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +extension UnsafeMutableBufferPointer where Element: ~Copyable { + func split(at index: Self.Index) -> (Self, Self) { + (self.extracting(.. + var sbc_frames: RingBuffer + var sbc_frames_in_buffer: Int { + guard sbc_frame_size > 0 else { return 0 } + return self.sbc_frames.count / self.sbc_frame_size + } + + // overflow buffer for not fully used sbc frames, with additional frames for resampling + let decoded_audio_buffer: UnsafeMutableBufferPointer + var decoded_audio: RingBuffer + + init() { + let CHANNELS_PER_FRAME = 2 + let capacity = (128 + 16) * CHANNELS_PER_FRAME + + self.fill_timer = btstack_timer_source_t() + self.resampler = Resampler(channels: CHANNELS_PER_FRAME) + + self.sbc_frame_size = 0 + self.sbc_frame_buffer = UnsafeMutableBufferPointer.allocate( + capacity: MAX_SBC_FRAME_SIZE) + self.sbc_frames = RingBuffer( + capacity: (OPTIMAL_FRAMES_MAX + ADDITIONAL_FRAMES) * MAX_SBC_FRAME_SIZE) + + self.decoded_audio_buffer = .allocate(capacity: capacity) + self.decoded_audio = RingBuffer(capacity: capacity) + } + + mutating func enqueue(sbc_frames: UnsafeMutableBufferPointer, frame_size: Int) + { + self.sbc_frame_size = frame_size + if !self.sbc_frames.write(contentsOf: sbc_frames) { + log("Error: SBC frame buffer overflow") + } + self.updateResamplingFactor() + } + + mutating func updateResamplingFactor() { + let nominal_factor: UInt32 = 0x10000 + let compensation: UInt32 = 0x00100 + + let resampling_factor = + switch self.sbc_frames_in_buffer { + case ..) { + // called from lower-layer but guaranteed to be on main thread + guard self.sbc_frame_size != 0 else { + log("Frame size is 0") + buffer.update(repeating: 0) + return + } + + // first fill from resampled audio + let samplesReadCount = self.decoded_audio.read(into: buffer) + var buffer = buffer.extracting(samplesReadCount...) + + // then start decoding sbc frames into the buffer + while buffer.count > 0, self.sbc_frames.count > self.sbc_frame_size { + // decode frame + let elementsRead = self.sbc_frames.read( + into: self.sbc_frame_buffer, count: self.sbc_frame_size) + precondition( + elementsRead == self.sbc_frame_size, "sbc frame size mismatch") + + SBCDecoder.decode_signed_16( + mode: SBC_MODE_STANDARD, + packet_status_flag: 0, + buffer: UnsafeRawBufferPointer(self.sbc_frame_buffer) + ) { samples, num_channels, sample_rate in + precondition(num_channels == 2, "must be stereo") + + // Resample audio to compensate for the amount of buffered SBC frames + let samples = self.resampler.resample( + samples: .init(samples), + usingTemporaryBuffer: self.decoded_audio_buffer) + + // Store samples in buffer first and excess in the ring buffer. + let (samples_to_copy, samples_to_store) = samples.split( + at: min(samples.count, buffer.count)) + let samplesCopiedCount = buffer.moveUpdate( + fromContentsOf: samples_to_copy) + buffer = buffer.extracting(samplesCopiedCount...) + if !self.decoded_audio.write(contentsOf: samples_to_store) { + log("ERROR: PCM ring buffer full!") + } + } + } + } + + mutating func fill_timer( + _ timer: UnsafeMutablePointer? + ) { + // refill + self.fill_buffers() + + // re-set timer + btstack_run_loop_set_timer(timer, UInt32(DRIVER_POLL_INTERVAL_MS)) + btstack_run_loop_add_timer(timer) + } + + mutating func start_stream() { + // pre-fill buffers + self.fill_buffers() + + // start timer + // FIXME: Use ctx + // NOTE: hardcoded to `Self` because the timer callback has no context + // argument which can be used to pass `self` + btstack_run_loop_set_timer_handler( + &self.fill_timer, { Application.shared.audioEngine.audio_pico.fill_timer($0) }) + btstack_run_loop_set_timer_context(&self.fill_timer, nil) + btstack_run_loop_set_timer( + &self.fill_timer, UInt32(DRIVER_POLL_INTERVAL_MS)) + btstack_run_loop_add_timer(&self.fill_timer) + } + + mutating func stop_stream() { + // stop timer + btstack_run_loop_remove_timer(&self.fill_timer) + } +} diff --git a/harmony/Sources/Audio/MAX9744.swift b/harmony/Sources/Audio/MAX9744.swift new file mode 100644 index 00000000..6c969508 --- /dev/null +++ b/harmony/Sources/Audio/MAX9744.swift @@ -0,0 +1,105 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct MAX9744: ~Copyable { + static let i2cAddress: UInt8 = 0x4B // 7 bit address + static let absoluteVolumeControlRegisterAddress: UInt8 = 0x0 + + static let modulationControlRegisterAddress: UInt8 = 0x1 + static let filterlessModulationBitPattern: UInt8 = 0x0 + static let pwmModulationBitPattern: UInt8 = 0x1 + + static let incrementalVolumeControlRegisterAddress: UInt8 = 0x3 + static let increaseVolumeBitPattern: UInt8 = 0x4 + static let decreaseVolumeBitPattern: UInt8 = 0x5 + + var i2c: i2c_inst_t + + init(i2c: i2c_inst_t) { + self.i2c = i2c + } +} + +extension MAX9744 { + static func validAddress(_ address: UInt8) -> Bool { + switch address { + case Self.absoluteVolumeControlRegisterAddress: true + case Self.filterlessModulationBitPattern: true + case Self.incrementalVolumeControlRegisterAddress: true + default: false + } + } + + mutating func write(address: UInt8, value: UInt8) { + precondition(Self.validAddress(address)) + var data = (address << 6) | value + log("attempting to write \(hex: data)") + let size = MemoryLayout.size(ofValue: data) + let result = i2c_write_blocking( + &self.i2c, + Self.i2cAddress, + &data, + size, + false) + precondition(result == size, "I2C write failed") + } + + mutating func read(address: UInt8) -> UInt8 { + precondition(Self.validAddress(address)) + var data = address << 6 + let size = MemoryLayout.size(ofValue: data) + let readResult = i2c_read_blocking( + &self.i2c, + Self.i2cAddress, + &data, + size, + false) + precondition(readResult == size, "I2C read failed") + return data + } +} + +extension MAX9744 { + /// 6 bit value ranging from 0 (mute) to 63 (+ 9.5 dB) + mutating func set(rawVolume: UInt8) { + precondition(0 <= rawVolume && rawVolume <= 63) + self.write( + address: Self.absoluteVolumeControlRegisterAddress, + value: rawVolume) + } + + enum ModulationMode { + case filterless + case pwm + } + + mutating func set(moduluationMode: ModulationMode) { + let modulationBitPattern = switch moduluationMode { + case .filterless: Self.filterlessModulationBitPattern + case .pwm: Self.pwmModulationBitPattern + } + self.write( + address: Self.modulationControlRegisterAddress, + value: modulationBitPattern) + } + + mutating func increaseVolume() { + self.write( + address: Self.incrementalVolumeControlRegisterAddress, + value: Self.increaseVolumeBitPattern) + } + + mutating func decreaseVolume() { + self.write( + address: Self.incrementalVolumeControlRegisterAddress, + value: Self.decreaseVolumeBitPattern) + } +} diff --git a/harmony/Sources/Audio/Resampler.swift b/harmony/Sources/Audio/Resampler.swift new file mode 100644 index 00000000..ef4cd8bb --- /dev/null +++ b/harmony/Sources/Audio/Resampler.swift @@ -0,0 +1,52 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct Resampler: ~Copyable { + var channels: Int + var context: btstack_resample_t + + init(channels: Int) { + self.channels = channels + self.context = btstack_resample_t() + btstack_resample_init(&self.context, Int32(channels)) + } + + mutating func set(channels: Int) { + self.channels = channels + btstack_resample_init(&self.context, Int32(channels)) + } + + mutating func set(factor: UInt32) { + btstack_resample_set_factor(&self.context, factor) + } + + /// Resamples the given samples using the previously set resampling factor. + /// + /// Returns a slice of the temporary buffer that contains the resampled audio. + mutating func resample( + samples: UnsafeBufferPointer, + usingTemporaryBuffer buffer: UnsafeMutableBufferPointer + ) -> UnsafeMutableBufferPointer { + precondition(samples.count.isMultiple(of: self.channels)) + + // FIXME: understand why this is not `samples.count / self.channels` + // The documentation just calls this parameter `numFrames` which implies + // the sample count should be divided by the channel count. + let inputFrameCount = samples.count + let resampledFrameCount = btstack_resample_block( + &self.context, + samples.baseAddress, + UInt32(inputFrameCount), + buffer.baseAddress) + let resampledSampleCount = Int(resampledFrameCount) * self.channels + return buffer.extracting(..: ~Copyable { + // FIMXE: Use an inline allocation like `Vector` + var storage: UnsafeMutableBufferPointer + var readerIndex: Int + var writerIndex: Int + + init(capacity: Int) { + self.storage = .allocate(capacity: capacity) + self.readerIndex = 0 + self.writerIndex = 0 + } + + deinit { + var readerIndex = self.readerIndex + while self.readerIndex != self.writerIndex { + self.storage.deinitializeElement(at: readerIndex) + readerIndex = (readerIndex + 1) % self.storage.count + } + // FIXME: why can't we use a mutating method here? + // while _ = self.pop() { } + self.storage.deallocate() + } +} + +extension Ring where Element: ~Copyable { + mutating func push(_ element: consuming Element) { + let nextWriterIndex = (self.writerIndex + 1) % self.storage.count + guard nextWriterIndex != self.readerIndex else { fatalError("Overflow") } + self.storage.initializeElement(at: self.writerIndex, to: element) + __dsb() // Make sure the element is written before updating the index + self.writerIndex = nextWriterIndex + } + + mutating func pop() -> Element? { + guard self.readerIndex != self.writerIndex else { return nil } + let element = self.storage.moveElement(from: self.readerIndex) + __dsb() // Make sure the element is read before updating the index + self.readerIndex = (self.readerIndex + 1) % self.storage.count + return element + } +} diff --git a/harmony/Sources/Audio/RingBuffer.swift b/harmony/Sources/Audio/RingBuffer.swift new file mode 100644 index 00000000..11a30d0e --- /dev/null +++ b/harmony/Sources/Audio/RingBuffer.swift @@ -0,0 +1,126 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// FIXME: RingBuffer +struct RingBuffer: ~Copyable { + // FIMXE: Use an inline allocation like `Vector` + var storage: UnsafeMutableBufferPointer + var count: Int + var readerIndex: Int + var writerIndex: Int + + init(capacity: Int) { + self.storage = .allocate(capacity: capacity) + self.readerIndex = 0 + self.writerIndex = 0 + self.count = 0 + } + + deinit { + self.storage.deallocate() + } +} + +extension RingBuffer { + var capacity: Int { self.storage.count } + var availableCapacity: Int { self.capacity - self.count } + var isEmpty: Bool { self.count == 0 } + var isFull: Bool { self.count == self.capacity } +} + +extension RingBuffer { + mutating func clear() { + // Forget about the contents of `storage`, this is safe because + // `Element` is `BitwiseCopyable`. + self.count = 0 + self.readerIndex = 0 + self.writerIndex = 0 + } + + mutating func read( + into buffer: UnsafeMutableBufferPointer, + count: Int? = nil + ) -> Int { + let elementsToRead = min(buffer.count, count ?? Int.max, self.count) + + // Reading 0 elements is a no-op. + guard elementsToRead > 0 else { return elementsToRead } + + // Read the initial elements from the end of the ring buffer. + let elementsUntilEnd = self.capacity - self.readerIndex + let elementsToReadFirstHalf = min(elementsUntilEnd, elementsToRead) + buffer.baseAddress!.update( + from: self.storage.baseAddress! + self.readerIndex, + count: elementsToReadFirstHalf) + self.readerIndex += elementsToReadFirstHalf + + // Update the reader index to wrap if needed. + if self.readerIndex == self.capacity { + self.readerIndex = 0 + } + + // Read the remaining elements from the beginning of the ring buffer. + let elementsToReadSecondHalf = elementsToRead - elementsToReadFirstHalf + precondition(elementsToReadSecondHalf >= 0) + (buffer.baseAddress! + elementsToReadFirstHalf).update( + from: self.storage.baseAddress! + self.readerIndex, + count: elementsToReadSecondHalf) + self.readerIndex += elementsToReadSecondHalf + + // Update bookkeeping with the new count. + self.count -= elementsToRead + + return elementsToRead + } + + mutating func write( + contentsOf buffer: UnsafeMutableBufferPointer + ) -> Bool { + self.write(contentsOf: UnsafeBufferPointer(buffer)) + } + + mutating func write( + contentsOf buffer: UnsafeBufferPointer + ) -> Bool { + let elementsToWrite = buffer.count + + // Writing 0 elements is a no-op. + guard elementsToWrite > 0 else { return true } + // Writing more than the available capacity is an error. + guard elementsToWrite <= self.availableCapacity else { return false } + + // Write the initial elements to the end of the ring buffer. + let elementsUntilEnd = self.capacity - self.writerIndex + let elementsToWriteFirstHalf = min(elementsUntilEnd, elementsToWrite) + (self.storage.baseAddress! + self.writerIndex).update( + from: buffer.baseAddress!, + count: elementsToWriteFirstHalf) + self.writerIndex += elementsToWriteFirstHalf + + // Update the writer index to wrap if needed. + if self.writerIndex == self.capacity { + self.writerIndex = 0 + } + + // Write the remaining elements to the beginning of the ring buffer. + let elementsToWriteSecondHalf = elementsToWrite - elementsToWriteFirstHalf + precondition(elementsToWriteSecondHalf >= 0) + (self.storage.baseAddress! + self.writerIndex).update( + from: buffer.baseAddress! + elementsToWriteFirstHalf, + count: elementsToWriteSecondHalf) + self.writerIndex += elementsToWriteSecondHalf + + // Update bookkeeping with the new count. + self.count += elementsToWrite + + return true + } +} diff --git a/harmony/Sources/Audio/SpinLock.swift b/harmony/Sources/Audio/SpinLock.swift new file mode 100644 index 00000000..8212f04f --- /dev/null +++ b/harmony/Sources/Audio/SpinLock.swift @@ -0,0 +1,38 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +struct SpinLock: ~Copyable { + var _lock: UnsafeMutablePointer + var value: Value + + init(index: Int, initialValue: consuming Value) { + self._lock = spin_lock_init(UInt32(index)) + self.value = initialValue + } +} + +extension SpinLock where Value: ~Copyable { + func lock() -> UInt32 { + spin_lock_blocking(self._lock) + } + + func unlock(irq_mask: UInt32) { + spin_unlock(self._lock, irq_mask) + } + + mutating func withLock( + _ body: (inout Value) throws(Error) -> Result + ) throws(Error) -> Result where Result: ~Copyable { + let irq_mask = self.lock() + defer { self.unlock(irq_mask: irq_mask) } + return try body(&self.value) + } +} diff --git a/harmony/Sources/Audio/TPA2016D2.swift b/harmony/Sources/Audio/TPA2016D2.swift new file mode 100644 index 00000000..59b56640 --- /dev/null +++ b/harmony/Sources/Audio/TPA2016D2.swift @@ -0,0 +1,118 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +func i2c_init() { + i2c_init(&i2c0_inst, 100 * 1000) // 400kHz "Fast Mode" + gpio_set_function(UInt32(PICO_DEFAULT_I2C_SDA_PIN), GPIO_FUNC_I2C) + gpio_set_function(UInt32(PICO_DEFAULT_I2C_SCL_PIN), GPIO_FUNC_I2C) + gpio_pull_up(UInt32(PICO_DEFAULT_I2C_SDA_PIN)) + gpio_pull_up(UInt32(PICO_DEFAULT_I2C_SCL_PIN)) + + // I2C reserves some addresses for special purposes. We exclude these from the scan. + // These are any addresses of the form 000 0xxx or 111 1xxx + func reserved_addr(_ addr: UInt8) -> Bool{ + return (addr & 0x78) == 0 || (addr & 0x78) == 0x78 + } + + log("\nI2C Bus Scan") + log(" 0 1 2 3 4 5 6 7 8 9 A B C D E F") + for addr in UInt8(0) ..< (1 << 7) { + if addr.isMultiple(of: 16) { + log("\(addr >> 4) ", terminator: "") + } + + // Perform a 1-byte dummy read from the probe address. If a slave + // acknowledges this address, the function returns the number of bytes + // transferred. If the address byte is ignored, the function returns + // -1. + + // Skip over any reserved addresses. + var rxdata: UInt8 = 0 + let ret = if reserved_addr(addr) { + Int32(PICO_ERROR_GENERIC.rawValue) + } else { + i2c_read_blocking(&i2c0_inst, addr, &rxdata, 1, false) + } + + log(ret < 0 ? "." : "@", terminator: addr % 16 == 15 ? "\n" : " ") + } + log("Done.\n") +} + +struct TPA2016D2: ~Copyable { + static let address: UInt8 = 0x58 // 7 bit address + static let IC_FUNCTION_CONTROL: UInt8 = 0x1 + static let AGC_ATTACK_CONTROL: UInt8 = 0x2 + static let AGC_RELEASE_CONTROL: UInt8 = 0x3 + static let AGC_HOLD_TIME_CONTROL: UInt8 = 0x4 + static let AGC_FIXED_GAIN_CONTROL: UInt8 = 0x5 + static let AGC_CONTROL_0: UInt8 = 0x6 + static let AGC_CONTROL_1: UInt8 = 0x7 + + var i2c: i2c_inst_t + + init(i2c: i2c_inst_t) { + self.i2c = i2c + + for r in UInt8(0x1) ... 0x7 { + log("Register \(hex: r); read \(hex: self.read(address: r))") + } + + // Immediately configure the amp to our desired defaults. + // Disable AGC (Automatic Gain Control). + self.write(address: Self.AGC_CONTROL_1, value: 0x0) + // Disable Output Limiter + self.write(address: Self.AGC_CONTROL_0, value: 1 << 7) + // Set the attack time to the fastest setting (0.1067 ms per step) + self.write(address: Self.AGC_ATTACK_CONTROL, value: 1) + // Set the release time to the fastest setting (0.0137 s per step) + self.write(address: Self.AGC_RELEASE_CONTROL, value: 1) + // Disable the hold time entirely + self.write(address: Self.AGC_HOLD_TIME_CONTROL, value: 0) + } +} + +extension TPA2016D2 { + mutating func write(address: UInt8, value: UInt8) { + var combined: UInt16 = (UInt16(value) << 8) | UInt16(address) + let result = i2c_write_blocking( + &self.i2c, + Self.address, + &combined, + MemoryLayout.size(ofValue: combined), + false) + precondition(result == 2, "I2C write failed") + // log("Register \(hex: address); wrote \(hex: value) - read \(hex: self.read(address: address))") + } + + mutating func read(address: UInt8) -> UInt8 { + var data = address + let writeResult = i2c_write_blocking(&self.i2c, Self.address, &data, 1, false) + precondition(writeResult == 1, "I2C write failed") + let readResult = i2c_read_blocking(&self.i2c, Self.address, &data, 1, false) + precondition(readResult == 1, "I2C read failed") + return data + } +} + +extension TPA2016D2 { + // scale from 0 to 255 + mutating func set(gain: UInt8) { + precondition(0 <= gain && gain <= 30) + self.write(address: Self.AGC_FIXED_GAIN_CONTROL, value: gain) + } + + mutating func mute(_ mute: Bool) { + var value = self.read(address: Self.IC_FUNCTION_CONTROL) + value = mute ? value | (1 << 5) : value & ~(1 << 5) + self.write(address: Self.IC_FUNCTION_CONTROL, value: value) + } +} diff --git a/harmony/Sources/Audio/Timer.swift b/harmony/Sources/Audio/Timer.swift new file mode 100644 index 00000000..acad420a --- /dev/null +++ b/harmony/Sources/Audio/Timer.swift @@ -0,0 +1,20 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// struct Timer: ~Copyable, ~Escapable { +// var context: UnsafePointer + +// init(context: borrowing Context) dependsOn(context) { +// withUnsafePointerToInstance(context) { context in +// self.context = context +// } +// } +// } \ No newline at end of file diff --git a/harmony/Sources/Bluetooth/A2DP.swift b/harmony/Sources/Bluetooth/A2DP.swift new file mode 100644 index 00000000..ebb257f6 --- /dev/null +++ b/harmony/Sources/Bluetooth/A2DP.swift @@ -0,0 +1,300 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// Advanced Audio Distribution Profile + +struct MediaCodecConfigurationSBC { + var reconfigure: UInt8 + var num_channels: UInt8 + var sampling_frequency: UInt16 + var block_length: UInt8 + var subbands: UInt8 + var min_bitpool_value: UInt8 + var max_bitpool_value: UInt8 + var channel_mode: btstack_sbc_channel_mode_t + var allocation_method: btstack_sbc_allocation_method_t + + init() { + self.reconfigure = 0 + self.num_channels = 0 + self.sampling_frequency = 0 + self.block_length = 0 + self.subbands = 0 + self.min_bitpool_value = 0 + self.max_bitpool_value = 0 + self.channel_mode = SBC_CHANNEL_MODE_MONO + self.allocation_method = SBC_ALLOCATION_METHOD_LOUDNESS + } + + func dump() { + log( + """ + - num_channels: \(self.num_channels) + - sampling_frequency: \(self.sampling_frequency) + - channel_mode: \(self.channel_mode.rawValue) + - block_length: \(self.block_length) + - subbands: \(self.subbands) + - allocation_method: \(self.allocation_method.rawValue) + - bitpool_value [\(self.min_bitpool_value), \(self.max_bitpool_value)] + """) + } +} + +enum StreamState { + case closed + case open + case playing + case paused +} + +struct A2DPConnection { + static var shared = Self() + + var addr: bd_addr_t = (0, 0, 0, 0, 0, 0) + var a2dp_cid: UInt16 = 0 + var a2dp_local_seid: UInt8 = 0 + var stream_state: StreamState = .closed + var sbc_configuration: MediaCodecConfigurationSBC = .init() +} + +@_cdecl("a2dp_sink_packet_handler") +func a2dp_sink_packet_handler( + packet_type: UInt8, + channel: UInt16, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + guard packet_type == HCI_EVENT_PACKET else { return } + guard hci_event_packet_get_type(packet) == HCI_EVENT_A2DP_META else { return } + + let subevent = packet?[2] + switch subevent { + case UInt8(A2DP_SUBEVENT_SIGNALING_MEDIA_CODEC_OTHER_CONFIGURATION): + log("A2DP Sink : Received non SBC codec - not implemented") + + case UInt8(A2DP_SUBEVENT_SIGNALING_MEDIA_CODEC_SBC_CONFIGURATION): + log("A2DP Sink : Received SBC codec configuration") + A2DPConnection.shared.sbc_configuration.reconfigure = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_reconfigure( + packet) + A2DPConnection.shared.sbc_configuration.num_channels = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_num_channels( + packet) + A2DPConnection.shared.sbc_configuration.sampling_frequency = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_sampling_frequency( + packet) + A2DPConnection.shared.sbc_configuration.block_length = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_block_length( + packet) + A2DPConnection.shared.sbc_configuration.subbands = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_subbands(packet) + A2DPConnection.shared.sbc_configuration.min_bitpool_value = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_min_bitpool_value( + packet) + A2DPConnection.shared.sbc_configuration.max_bitpool_value = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_max_bitpool_value( + packet) + + let allocation_method = + a2dp_subevent_signaling_media_codec_sbc_configuration_get_allocation_method( + packet) + + // Adapt Bluetooth spec definition to SBC Encoder expected input + A2DPConnection.shared.sbc_configuration.allocation_method = + (btstack_sbc_allocation_method_t)(allocation_method - 1) + + switch avdtp_channel_mode_t( + a2dp_subevent_signaling_media_codec_sbc_configuration_get_channel_mode( + packet)) + { + case AVDTP_CHANNEL_MODE_JOINT_STEREO: + A2DPConnection.shared.sbc_configuration.channel_mode = + SBC_CHANNEL_MODE_JOINT_STEREO + case AVDTP_CHANNEL_MODE_STEREO: + A2DPConnection.shared.sbc_configuration.channel_mode = + SBC_CHANNEL_MODE_STEREO + case AVDTP_CHANNEL_MODE_DUAL_CHANNEL: + A2DPConnection.shared.sbc_configuration.channel_mode = + SBC_CHANNEL_MODE_DUAL_CHANNEL + case AVDTP_CHANNEL_MODE_MONO: + A2DPConnection.shared.sbc_configuration.channel_mode = + SBC_CHANNEL_MODE_MONO + default: + fatalError() + } + A2DPConnection.shared.sbc_configuration.dump() + + case UInt8(A2DP_SUBEVENT_STREAM_ESTABLISHED): + let status = a2dp_subevent_stream_established_get_status(packet) + guard status == ERROR_CODE_SUCCESS else { + log( + "A2DP Sink : Streaming connection failed, status \(hex: status)" + ) + return + } + + a2dp_subevent_stream_established_get_bd_addr( + packet, &A2DPConnection.shared.addr) + A2DPConnection.shared.a2dp_cid = + a2dp_subevent_stream_established_get_a2dp_cid(packet) + A2DPConnection.shared.a2dp_local_seid = + a2dp_subevent_stream_established_get_local_seid(packet) + A2DPConnection.shared.stream_state = .open + + log( + "A2DP Sink : Streaming connection is established, address \(cString: bd_addr_to_str(&A2DPConnection.shared.addr)), cid \(hex: A2DPConnection.shared.a2dp_cid), local seid \(A2DPConnection.shared.a2dp_local_seid)" + ) + + #if ENABLE_AVDTP_ACCEPTOR_EXPLICIT_START_STREAM_CONFIRMATION + case UInt8(A2DP_SUBEVENT_START_STREAM_REQUESTED): + log( + "A2DP Sink : Explicit Accept to start stream, local_seid %d\n", + a2dp_subevent_start_stream_requested_get_local_seid(packet)) + a2dp_sink_start_stream_accept(a2dp_cid, a2dp_local_seid) + #endif + + case UInt8(A2DP_SUBEVENT_STREAM_STARTED): + log("A2DP Sink : Stream started") + A2DPConnection.shared.stream_state = .playing + if A2DPConnection.shared.sbc_configuration.reconfigure != 0 { + Application.shared.audioEngine.close() + } + // prepare media processing + // audio playback starts when buffer reaches minimal level + Application.shared.audioEngine.`init`(A2DPConnection.shared.sbc_configuration) + + case UInt8(A2DP_SUBEVENT_STREAM_SUSPENDED): + log("A2DP Sink : Stream paused") + A2DPConnection.shared.stream_state = .paused + Application.shared.audioEngine.pause() + + case UInt8(A2DP_SUBEVENT_STREAM_RELEASED): + log("A2DP Sink : Stream released") + A2DPConnection.shared.stream_state = .closed + Application.shared.audioEngine.close() + + case UInt8(A2DP_SUBEVENT_SIGNALING_CONNECTION_RELEASED): + log("A2DP Sink : Signaling connection released") + A2DPConnection.shared.a2dp_cid = 0 + Application.shared.audioEngine.close() + + default: + log("AVRCP Sink : Event \(hex: subevent ?? 0xff) is not parsed") + } +} + +/* @section Handle Media Data Packet + * + * @text Here the audio data, are received through the a2dp_sink_media_handler callback. + * Currently, only the SBC media codec is supported. Hence, the media data consists of the media packet header and the SBC packet. + * The SBC frame will be stored in a ring buffer for later processing (instead of decoding it to PCM right away which would require a much larger buffer). + * If the audio stream wasn't started already and there are enough SBC frames in the ring buffer, start playback. + */ + +func read_media_data_header( + _ packet: UnsafeMutablePointer?, + _ size: Int32, + _ offset: UnsafeMutablePointer, + _ media_header: UnsafeMutablePointer +) -> Bool { + guard let packet else { return false } + let media_header_len: Int32 = 12 // without crc + var pos = Int(offset.pointee) + + if size - Int32(pos) < media_header_len { + log( + "Not enough data to read media packet header, expected \(media_header_len), received \(size-Int32(pos))" + ) + return false + } + + media_header.pointee.version = packet[pos] & 0x03 + media_header.pointee.padding = UInt8(get_bit16(UInt16(packet[pos]), 2)) + media_header.pointee.extension = UInt8(get_bit16(UInt16(packet[pos]), 3)) + media_header.pointee.csrc_count = (packet[pos] >> 4) & 0x0F + pos += 1 + + media_header.pointee.marker = UInt8(get_bit16(UInt16(packet[pos]), 0)) + media_header.pointee.payload_type = (packet[pos] >> 1) & 0x7F + pos += 1 + + media_header.pointee.sequence_number = UInt16( + big_endian_read_16(packet, Int32(pos))) + pos += 2 + + media_header.pointee.timestamp = big_endian_read_32(packet, Int32(pos)) + pos += 4 + + media_header.pointee.synchronization_source = big_endian_read_32( + packet, Int32(pos)) + pos += 4 + offset.pointee = Int32(pos) + return true +} + +func read_sbc_header( + _ packet: UnsafeMutablePointer?, + _ size: Int32, + _ offset: UnsafeMutablePointer, + _ sbc_header: UnsafeMutablePointer +) -> Bool { + guard let packet else { return false } + let sbc_header_len: Int32 = 12 // without crc + var pos: Int32 = offset.pointee + + if size - pos < sbc_header_len { + log( + "Not enough data to read SBC header, expected \(sbc_header_len), received \(size-pos)" + ) + return false + } + + sbc_header.pointee.fragmentation = UInt8( + get_bit16(UInt16(packet[Int(pos)]), 7)) + sbc_header.pointee.starting_packet = UInt8( + get_bit16(UInt16(packet[Int(pos)]), 6)) + sbc_header.pointee.last_packet = UInt8(get_bit16(UInt16(packet[Int(pos)]), 5)) + sbc_header.pointee.num_frames = UInt8(packet[Int(pos)] & 0x0f) + pos += 1 + offset.pointee = pos + return true +} + +@_cdecl("a2dp_sink_media_handler") +func a2dp_sink_media_handler( + seid: UInt8, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + var pos: Int32 = 0 + + var media_header = avdtp_media_packet_header_t() + guard read_media_data_header(packet, Int32(size), &pos, &media_header) else { + log("Failed to read media data header") + return + } + + var sbc_header = avdtp_sbc_codec_header_t() + guard read_sbc_header(packet, Int32(size), &pos, &sbc_header) else { + log("Failed to read SBC header") + return + } + + let packet_length = UInt32(size) - UInt32(pos) + let packet_begin = packet?.advanced(by: Int(pos)) + let sbc_frame_size = Int(packet_length / UInt32(sbc_header.num_frames)) + + let packetBuffer = UnsafeMutableBufferPointer( + start: packet_begin, count: Int(packet_length)) + Application.shared.audioEngine.audio_pico.enqueue( + sbc_frames: packetBuffer, frame_size: sbc_frame_size) + Application.shared.audioEngine.start() +} diff --git a/harmony/Sources/Bluetooth/AVRCP.swift b/harmony/Sources/Bluetooth/AVRCP.swift new file mode 100644 index 00000000..6f5bc44a --- /dev/null +++ b/harmony/Sources/Bluetooth/AVRCP.swift @@ -0,0 +1,286 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// Audio/Video Remote Control Profile + +struct AVRCPConnection { + var addr: bd_addr_t + var avrcp_cid: UInt16 + var playing: Bool + var notifications_supported_by_target: UInt16 +} + +var avrcp_connection = AVRCPConnection( + addr: (0, 0, 0, 0, 0, 0), + avrcp_cid: 0, + playing: false, + notifications_supported_by_target: 0) + +@_cdecl("avrcp_packet_handler") +func avrcp_packet_handler( + packet_type: UInt8, + channel: UInt16, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + guard packet_type == HCI_EVENT_PACKET else { return } + guard hci_event_packet_get_type(packet) == HCI_EVENT_AVRCP_META else { + return + } + + let subevent = packet?[2] + switch subevent { + case UInt8(AVRCP_SUBEVENT_CONNECTION_ESTABLISHED): + log("AVRCP_SUBEVENT_CONNECTION_ESTABLISHED") + let local_cid = avrcp_subevent_connection_established_get_avrcp_cid(packet) + let status = avrcp_subevent_connection_established_get_status(packet) + + if status != ERROR_CODE_SUCCESS { + log("AVRCP: Connection failed, status \(hex: status)") + avrcp_connection.avrcp_cid = 0 + return + } + + avrcp_connection.avrcp_cid = local_cid + var address: bd_addr_t = (0, 0, 0, 0, 0, 0) + avrcp_subevent_connection_established_get_bd_addr(packet, &address) + log( + "AVRCP: Connected to \(cString: bd_addr_to_str(&address)), cid \(hex: avrcp_connection.avrcp_cid)" + ) + + avrcp_target_support_event( + avrcp_connection.avrcp_cid, AVRCP_NOTIFICATION_EVENT_VOLUME_CHANGED) + avrcp_target_support_event( + avrcp_connection.avrcp_cid, AVRCP_NOTIFICATION_EVENT_BATT_STATUS_CHANGED) + let battery_status = AVRCP_BATTERY_STATUS_WARNING + avrcp_target_battery_status_changed( + avrcp_connection.avrcp_cid, battery_status) + + // query supported events: + avrcp_controller_get_supported_events(avrcp_connection.avrcp_cid) + + case UInt8(AVRCP_SUBEVENT_CONNECTION_RELEASED): + log("AVRCP_SUBEVENT_CONNECTION_RELEASED") + log( + "AVRCP: Channel released: cid \(hex: avrcp_subevent_connection_released_get_avrcp_cid(packet))" + ) + avrcp_connection.avrcp_cid = 0 + avrcp_connection.notifications_supported_by_target = 0 + + default: + log("AVRCP: Event \(hex: subevent ?? 0xff) is not parsed") + } +} + +@_cdecl("avrcp_controller_packet_handler") +func avrcp_controller_packet_handler( + packet_type: UInt8, + channel: UInt16, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + guard packet_type == HCI_EVENT_PACKET else { return } + guard hci_event_packet_get_type(packet) == HCI_EVENT_AVRCP_META else { + return + } + guard avrcp_connection.avrcp_cid != 0 else { return } + + let subevent = packet?[2] + switch subevent { + case UInt8(AVRCP_SUBEVENT_GET_CAPABILITY_EVENT_ID): + avrcp_connection.notifications_supported_by_target |= + (1 << avrcp_subevent_get_capability_event_id_get_event_id(packet)) + + case UInt8(AVRCP_SUBEVENT_GET_CAPABILITY_EVENT_ID_DONE): + log("AVRCP Controller: supported notifications by target:") + for event_id in UInt8( + AVRCP_NOTIFICATION_EVENT_FIRST_INDEX.rawValue).. 0 else { break } + let avrcp_subevent_value = UnsafeBufferPointer( + start: avrcp_subevent_now_playing_title_info_get_value(packet), + count: Int(count)) + log("AVRCP Controller: Title \(cString: avrcp_subevent_value)") + + case UInt8(AVRCP_SUBEVENT_NOW_PLAYING_ARTIST_INFO): + let count = avrcp_subevent_now_playing_artist_info_get_value_len(packet) + guard count > 0 else { break } + let avrcp_subevent_value = UnsafeBufferPointer( + start: avrcp_subevent_now_playing_artist_info_get_value(packet), + count: Int(count)) + log("AVRCP Controller: Artist \(cString: avrcp_subevent_value)") + + case UInt8(AVRCP_SUBEVENT_NOW_PLAYING_ALBUM_INFO): + let count = avrcp_subevent_now_playing_album_info_get_value_len(packet) + guard count > 0 else { break } + let avrcp_subevent_value = UnsafeBufferPointer( + start: avrcp_subevent_now_playing_album_info_get_value(packet), + count: Int(count)) + log("AVRCP Controller: Album \(cString: avrcp_subevent_value)") + + case UInt8(AVRCP_SUBEVENT_NOW_PLAYING_GENRE_INFO): + let count = avrcp_subevent_now_playing_genre_info_get_value_len(packet) + guard count > 0 else { break } + let avrcp_subevent_value = UnsafeBufferPointer( + start: avrcp_subevent_now_playing_genre_info_get_value(packet), + count: Int(count)) + log("AVRCP Controller: Genre \(cString: avrcp_subevent_value)") + + case UInt8(AVRCP_SUBEVENT_PLAY_STATUS): + let songLength = avrcp_subevent_play_status_get_song_length(packet) + let songPosition = avrcp_subevent_play_status_get_song_position(packet) + let playStatus = avrcp_play_status2str( + avrcp_subevent_play_status_get_play_status(packet)) + log( + "AVRCP Controller: Song length \(songLength) ms, Song position \(songPosition) ms, Play status \(cString: playStatus)" + ) + + case UInt8(AVRCP_SUBEVENT_OPERATION_COMPLETE): + let operationId = avrcp_operation2str( + avrcp_subevent_operation_complete_get_operation_id(packet)) + log("AVRCP Controller: \(cString: operationId) complete") + + case UInt8(AVRCP_SUBEVENT_OPERATION_START): + let operationId = avrcp_operation2str( + avrcp_subevent_operation_start_get_operation_id(packet)) + log("AVRCP Controller: \(cString: operationId) start") + + case UInt8(AVRCP_SUBEVENT_NOTIFICATION_EVENT_TRACK_REACHED_END): + log("AVRCP Controller: Track reached end") + + case UInt8(AVRCP_SUBEVENT_PLAYER_APPLICATION_VALUE_RESPONSE): + let commandType = avrcp_ctype2str( + avrcp_subevent_player_application_value_response_get_command_type(packet)) + log("AVRCP Controller: Set Player App Value \(cString: commandType)") + + default: + break + } +} + +@_cdecl("avrcp_target_packet_handler") +func avrcp_target_packet_handler( + packet_type: UInt8, + channel: UInt16, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + guard packet_type == HCI_EVENT_PACKET else { return } + guard hci_event_packet_get_type(packet) == HCI_EVENT_AVRCP_META else { + return + } + + let subevent = packet?[2] + switch subevent { + case UInt8(AVRCP_SUBEVENT_NOTIFICATION_VOLUME_CHANGED): + let volume = avrcp_subevent_notification_volume_changed_get_absolute_volume( + packet) + log("AVRCP Target : Volume set to [\(volume) / 127]") + Application.shared.audioEngine.set(volume: volume << 1) + + case UInt8(AVRCP_SUBEVENT_OPERATION): + let operation_id = avrcp_operation_id_t( + avrcp_subevent_operation_get_operation_id(packet)) + let button_state: StaticString = + avrcp_subevent_operation_get_button_pressed(packet) > 0 + ? "PRESS" : "RELEASE" + switch operation_id { + case AVRCP_OPERATION_ID_VOLUME_UP: + log("AVRCP Target : VOLUME UP (\(button_state))") + case AVRCP_OPERATION_ID_VOLUME_DOWN: + log("AVRCP Target : VOLUME DOWN (\(button_state))") + default: + return + } + + default: + log("AVRCP Target : Event \(hex: subevent ?? 0xff) is not parsed") + } +} diff --git a/harmony/Sources/Bluetooth/HCI.swift b/harmony/Sources/Bluetooth/HCI.swift new file mode 100644 index 00000000..e025e281 --- /dev/null +++ b/harmony/Sources/Bluetooth/HCI.swift @@ -0,0 +1,30 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// Host Controller Interface + +@_cdecl("hci_packet_handler") +func hci_packet_handler( + packet_type: UInt8, + channel: UInt16, + packet: UnsafeMutablePointer?, + size: UInt16 +) { + guard packet_type == HCI_EVENT_PACKET else { return } + guard hci_event_packet_get_type(packet) == HCI_EVENT_PIN_CODE_REQUEST else { + return + } + + var address: bd_addr_t = (0, 0, 0, 0, 0, 0) + log("Pin code request - using '0000'") + hci_event_pin_code_request_get_bd_addr(packet, &address) + gap_pin_code_response(&address, "0000") +} diff --git a/harmony/Sources/Bluetooth/SBC.swift b/harmony/Sources/Bluetooth/SBC.swift new file mode 100644 index 00000000..2b9a3093 --- /dev/null +++ b/harmony/Sources/Bluetooth/SBC.swift @@ -0,0 +1,61 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +enum SBCDecoder { + typealias Callback = ( + _ data: UnsafeMutableBufferPointer, + _ num_channels: Int32, + _ sample_rate: Int32 + ) -> Void + + static var context = btstack_sbc_decoder_bluedroid_t() + static var instance: UnsafePointer? = nil + static var callback: Callback? = nil + + static func configure(mode: btstack_sbc_mode_t) { + self.instance = btstack_sbc_decoder_bluedroid_init_instance(&context) + + func decode_callback( + _ data: UnsafeMutablePointer?, + _ num_samples: Int32, + _ num_channels: Int32, + _ sample_rate: Int32, + _ context: UnsafeMutableRawPointer? + ) { + let data = UnsafeMutableBufferPointer( + start: data, count: Int(num_samples)) + Self.callback?(data, num_channels, sample_rate) + } + + instance?.pointee.configure(&context, mode, decode_callback, nil) + } + + static func decode_signed_16( + mode: btstack_sbc_mode_t, + packet_status_flag: UInt8, + buffer: UnsafeRawBufferPointer, + callback: Callback + ) { + guard let instance = Self.instance else { + preconditionFailure("Must call configure prior to decode_signed_16") + } + + return withoutActuallyEscaping(callback) { + Self.callback = $0 + instance.pointee.decode_signed_16( + &Self.context, + packet_status_flag, + buffer.baseAddress, + UInt16(buffer.count)) + Self.callback = nil + } + } +} diff --git a/harmony/Sources/Bluetooth/SDP.swift b/harmony/Sources/Bluetooth/SDP.swift new file mode 100644 index 00000000..d7d37fac --- /dev/null +++ b/harmony/Sources/Bluetooth/SDP.swift @@ -0,0 +1,50 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +// Service Discovery Protocol + +struct ServiceDiscoveryProtocol: ~Copyable { + typealias ServiceRecord = UnsafePointer + typealias ServiceRecordHandle = UInt32 + + init() { + sdp_init() + } + + deinit { + sdp_deinit() + } + + mutating func registerService(record: ServiceRecord) { + precondition(sdp_register_service(record) == 0) + } + + mutating func registerService(record: UnsafeMutableRawBufferPointer) { + precondition(de_get_len(record.baseAddress) <= record.count) + precondition(sdp_register_service(record.baseAddress) == 0) + } + + mutating func unregisterService(handle: ServiceRecordHandle) { + sdp_unregister_service(handle) + } + + mutating func getServiceRecordHandle(for record: ServiceRecord) -> ServiceRecordHandle { + sdp_get_service_record_handle(record) + } + + mutating func makeServiceRecordHandle() -> ServiceRecordHandle { + sdp_create_service_record_handle() + } + + mutating func getServiceRecord(for handle: ServiceRecordHandle) -> ServiceRecord? { + ServiceRecord(sdp_get_record_for_handle(handle)) + } +} diff --git a/harmony/Sources/PIOPrograms/I2S.pio b/harmony/Sources/PIOPrograms/I2S.pio new file mode 100644 index 00000000..7b9ab6ec --- /dev/null +++ b/harmony/Sources/PIOPrograms/I2S.pio @@ -0,0 +1,64 @@ +; +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. +; +; SPDX-License-Identifier: BSD-3-Clause +; + +; Transmit a mono or stereo I2S audio stream as stereo +; This is 16 bits per sample; can be altered by modifying the "set" params, +; or made programmable by replacing "set x" with "mov x, y" and using Y as a config register. +; +; Autopull must be enabled, with threshold set to 32. +; Since I2S is MSB-first, shift direction should be to left. +; Hence the format of the FIFO word is: +; +; | 31 : 16 | 15 : 0 | +; | sample ws=0 | sample ws=1 | +; +; Data is output at 1 bit per clock. Use clock divider to adjust frequency. +; Fractional divider will probably be needed to get correct bit clock period, +; but for common syslck freqs this should still give a constant word select period. +; +; One output pin is used for the data output. +; Two side-set pins are used. Bit 0 is clock, bit 1 is word select. + +; Send 16 bit words to the PIO for mono, 32 bit words for stereo + +.program audio_i2s +.side_set 2 + + ; /--- LRCLK + ; |/-- BCLK +bitloop1: ; || + out pins, 1 side 0b10 + jmp x-- bitloop1 side 0b11 + out pins, 1 side 0b00 + set x, 14 side 0b01 + +bitloop0: + out pins, 1 side 0b00 + jmp x-- bitloop0 side 0b01 + out pins, 1 side 0b10 +public entry_point: + set x, 14 side 0b11 + +% c-sdk { + +static inline void audio_i2s_program_init(PIO pio, uint sm, uint offset, uint data_pin, uint clock_pin_base) { + pio_sm_config sm_config = audio_i2s_program_get_default_config(offset); + + sm_config_set_out_pins(&sm_config, data_pin, 1); + sm_config_set_sideset_pins(&sm_config, clock_pin_base); + sm_config_set_out_shift(&sm_config, false, true, 32); + sm_config_set_fifo_join(&sm_config, PIO_FIFO_JOIN_TX); + + pio_sm_init(pio, sm, offset, &sm_config); + + uint pin_mask = (1u << data_pin) | (3u << clock_pin_base); + pio_sm_set_pindirs_with_mask(pio, sm, pin_mask, pin_mask); + pio_sm_set_pins(pio, sm, 0); // clear pins + + pio_sm_exec(pio, sm, pio_encode_jmp(offset + audio_i2s_offset_entry_point)); +} + +%} diff --git a/harmony/Sources/PIOPrograms/QuadratureEncoder.pio b/harmony/Sources/PIOPrograms/QuadratureEncoder.pio new file mode 100644 index 00000000..37ed3948 --- /dev/null +++ b/harmony/Sources/PIOPrograms/QuadratureEncoder.pio @@ -0,0 +1,148 @@ + +// FROM: https://github.com/raspberrypi/pico-examples/blob/master/pio/quadrature_encoder/quadrature_encoder.pio + +; +; Copyright (c) 2023 Raspberry Pi (Trading) Ltd. +; +; SPDX-License-Identifier: BSD-3-Clause +; +.pio_version 0 // only requires PIO version 0 + +.program quadrature_encoder + +; the code must be loaded at address 0, because it uses computed jumps +.origin 0 + + +; the code works by running a loop that continuously shifts the 2 phase pins into +; ISR and looks at the lower 4 bits to do a computed jump to an instruction that +; does the proper "do nothing" | "increment" | "decrement" action for that pin +; state change (or no change) + +; ISR holds the last state of the 2 pins during most of the code. The Y register +; keeps the current encoder count and is incremented / decremented according to +; the steps sampled + +; the program keeps trying to write the current count to the RX FIFO without +; blocking. To read the current count, the user code must drain the FIFO first +; and wait for a fresh sample (takes ~4 SM cycles on average). The worst case +; sampling loop takes 10 cycles, so this program is able to read step rates up +; to sysclk / 10 (e.g., sysclk 125MHz, max step rate = 12.5 Msteps/sec) + +; 00 state + JMP update ; read 00 + JMP decrement ; read 01 + JMP increment ; read 10 + JMP update ; read 11 + +; 01 state + JMP increment ; read 00 + JMP update ; read 01 + JMP update ; read 10 + JMP decrement ; read 11 + +; 10 state + JMP decrement ; read 00 + JMP update ; read 01 + JMP update ; read 10 + JMP increment ; read 11 + +; to reduce code size, the last 2 states are implemented in place and become the +; target for the other jumps + +; 11 state + JMP update ; read 00 + JMP increment ; read 01 +decrement: + ; note: the target of this instruction must be the next address, so that + ; the effect of the instruction does not depend on the value of Y. The + ; same is true for the "JMP X--" below. Basically "JMP Y--, " + ; is just a pure "decrement Y" instruction, with no other side effects + JMP Y--, update ; read 10 + + ; this is where the main loop starts +.wrap_target +update: + MOV ISR, Y ; read 11 + PUSH noblock + +sample_pins: + ; we shift into ISR the last state of the 2 input pins (now in OSR) and + ; the new state of the 2 pins, thus producing the 4 bit target for the + ; computed jump into the correct action for this state. Both the PUSH + ; above and the OUT below zero out the other bits in ISR + OUT ISR, 2 + IN PINS, 2 + + ; save the state in the OSR, so that we can use ISR for other purposes + MOV OSR, ISR + ; jump to the correct state machine action + MOV PC, ISR + + ; the PIO does not have a increment instruction, so to do that we do a + ; negate, decrement, negate sequence +increment: + MOV Y, ~Y + JMP Y--, increment_cont +increment_cont: + MOV Y, ~Y +.wrap ; the .wrap here avoids one jump instruction and saves a cycle too + + + +% c-sdk { + +#include "hardware/clocks.h" +#include "hardware/gpio.h" + +// max_step_rate is used to lower the clock of the state machine to save power +// if the application doesn't require a very high sampling rate. Passing zero +// will set the clock to the maximum + +static inline void quadrature_encoder_program_init(PIO pio, uint sm, uint pin, int max_step_rate) +{ + pio_sm_set_consecutive_pindirs(pio, sm, pin, 2, false); + pio_gpio_init(pio, pin); + pio_gpio_init(pio, pin + 1); + + gpio_pull_up(pin); + gpio_pull_up(pin + 1); + + pio_sm_config c = quadrature_encoder_program_get_default_config(0); + + sm_config_set_in_pins(&c, pin); // for WAIT, IN + sm_config_set_jmp_pin(&c, pin); // for JMP + // shift to left, autopull disabled + sm_config_set_in_shift(&c, false, false, 32); + // don't join FIFO's + sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_NONE); + + // passing "0" as the sample frequency, + if (max_step_rate == 0) { + sm_config_set_clkdiv(&c, 1.0); + } else { + // one state machine loop takes at most 10 cycles + float div = (float)clock_get_hz(clk_sys) / (10 * max_step_rate); + sm_config_set_clkdiv(&c, div); + } + + pio_sm_init(pio, sm, 0, &c); + pio_sm_set_enabled(pio, sm, true); +} + +static inline int32_t quadrature_encoder_get_count(PIO pio, uint sm) +{ + uint ret; + int n; + + // if the FIFO has N entries, we fetch them to drain the FIFO, + // plus one entry which will be guaranteed to not be stale + n = pio_sm_get_rx_fifo_level(pio, sm) + 1; + while (n > 0) { + ret = pio_sm_get_blocking(pio, sm); + n--; + } + return ret; +} + +%} \ No newline at end of file diff --git a/harmony/Sources/PIOPrograms/WS2812.pio b/harmony/Sources/PIOPrograms/WS2812.pio new file mode 100644 index 00000000..839ce5f2 --- /dev/null +++ b/harmony/Sources/PIOPrograms/WS2812.pio @@ -0,0 +1,49 @@ +; +; Copyright (c) 2020 Raspberry Pi (Trading) Ltd. +; +; SPDX-License-Identifier: BSD-3-Clause +; +.pio_version 0 // only requires PIO version 0 + +.program ws2812 +.side_set 1 + +; The following constants are selected for broad compatibility with WS2812, +; WS2812B, and SK6812 LEDs. Other constants may support higher bandwidths for +; specific LEDs, such as (7,10,8) for WS2812B LEDs. + +.define public T1 3 +.define public T2 3 +.define public T3 4 + +.wrap_target +bitloop: + out x, 1 side 0 [T3 - 1] ; Side-set still takes place when instruction stalls + jmp !x do_zero side 1 [T1 - 1] ; Branch on the bit we shifted out. Positive pulse +do_one: + jmp bitloop side 1 [T2 - 1] ; Continue driving high, for a long pulse +do_zero: + nop side 0 [T2 - 1] ; Or drive low, for a short pulse +.wrap + +% c-sdk { +#include "hardware/clocks.h" + +static inline void ws2812_program_init(PIO pio, uint sm, uint offset, uint pin, float freq, bool rgbw) { + + pio_gpio_init(pio, pin); + pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true); + + pio_sm_config c = ws2812_program_get_default_config(offset); + sm_config_set_sideset_pins(&c, pin); + sm_config_set_out_shift(&c, false, true, rgbw ? 32 : 24); + sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX); + + int cycles_per_bit = ws2812_T1 + ws2812_T2 + ws2812_T3; + float div = clock_get_hz(clk_sys) / (freq * cycles_per_bit); + sm_config_set_clkdiv(&c, div); + + pio_sm_init(pio, sm, offset, &c); + pio_sm_set_enabled(pio, sm, true); +} +%} diff --git a/harmony/Tests/AudioTests/RingBufferTests.swift b/harmony/Tests/AudioTests/RingBufferTests.swift new file mode 100644 index 00000000..70e119e9 --- /dev/null +++ b/harmony/Tests/AudioTests/RingBufferTests.swift @@ -0,0 +1,177 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +import XCTest + +@testable import Core + +extension RingBuffer { + mutating func write(contentsOf array: [Element]) -> Bool { + array.withUnsafeBufferPointer { + self.write(contentsOf: $0) + } + } + + mutating func read(into array: inout [Element], count: Int? = nil) -> Int { + array.withUnsafeMutableBufferPointer { buffer in + self.read(into: buffer, count: count) + } + } + + func assertState( + count: Int, + readerIndex: Int, + writerIndex: Int, + file: StaticString = #filePath, + line: UInt = #line + ) { + XCTAssertEqual( + self.availableCapacity, self.capacity - count, + "incorrect availableCapacity", file: file, line: line) + XCTAssertEqual( + self.isEmpty, (count == 0), "incorrect isEmpty", file: file, line: line) + XCTAssertEqual( + self.isFull, (count == self.capacity), "incorrect isFull", file: file, + line: line) + XCTAssertEqual(self.count, count, "incorrect count", file: file, line: line) + XCTAssertEqual( + self.readerIndex, readerIndex, "incorrect readerIndex", file: file, + line: line) + XCTAssertEqual( + self.writerIndex, writerIndex, "incorrect writerIndex", file: file, + line: line) + if self.isEmpty || self.isFull { + XCTAssertEqual(self.readerIndex, self.writerIndex, file: file, line: line) + } + } +} + +final class RingBufferTests: XCTestCase { + func testInitialization() { + let ringBuffer = RingBuffer(capacity: 10) + XCTAssertEqual(ringBuffer.capacity, 10) + ringBuffer.assertState(count: 0, readerIndex: 0, writerIndex: 0) + } + + func testCapacityAndAvailableCapacity() { + var ringBuffer = RingBuffer(capacity: 5) + ringBuffer.assertState(count: 0, readerIndex: 0, writerIndex: 0) + + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 3) + + XCTAssertTrue(ringBuffer.write(contentsOf: [4, 5])) + ringBuffer.assertState(count: 5, readerIndex: 0, writerIndex: 0) + } + + func testWriteAndRead() { + var ringBuffer = RingBuffer(capacity: 5) + + // Write data to the buffer + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 3) + + // Attempt to read from the buffer + var readBuffer = Array(repeating: 0, count: 3) + let readCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(readCount, 3) + XCTAssertEqual(readBuffer, [1, 2, 3]) + ringBuffer.assertState(count: 0, readerIndex: 3, writerIndex: 3) + } + + func testOverwriteBehavior() { + var ringBuffer = RingBuffer(capacity: 3) + + // Fill buffer to capacity + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 0) + + // Attempt to overwrite when full + XCTAssertFalse(ringBuffer.write(contentsOf: [4])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 0) + + // Read and check if the buffer remains unaltered + var readBuffer = Array(repeating: 0, count: 3) + let readCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(readCount, 3) + XCTAssertEqual(readBuffer, [1, 2, 3]) + ringBuffer.assertState(count: 0, readerIndex: 0, writerIndex: 0) + } + + func testClearBuffer() { + var ringBuffer = RingBuffer(capacity: 5) + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 3) + + ringBuffer.clear() + ringBuffer.assertState(count: 0, readerIndex: 0, writerIndex: 0) + } + + func testWrappingBehavior() { + var ringBuffer = RingBuffer(capacity: 5) + + // Step 1: Write some data to fill part of the buffer + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 3) + + // Step 2: Read some data, advancing the reader index + var readBuffer = Array(repeating: 0, count: 2) + let readCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(readCount, 2) + XCTAssertEqual(readBuffer, [1, 2]) + ringBuffer.assertState(count: 1, readerIndex: 2, writerIndex: 3) + + // Step 3: Write more data, causing the writer index to wrap around + XCTAssertTrue(ringBuffer.write(contentsOf: [4, 5, 6])) + ringBuffer.assertState(count: 4, readerIndex: 2, writerIndex: 1) + + // Step 4: Read remaining data to verify the wrap-around behavior + readBuffer = Array(repeating: 0, count: 4) + let totalReadCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(totalReadCount, 4) + XCTAssertEqual(readBuffer, [3, 4, 5, 6]) + ringBuffer.assertState(count: 0, readerIndex: 1, writerIndex: 1) + } + + func testWrappingWriteOverflowAndWrappingReadUnderflow() { + var ringBuffer = RingBuffer(capacity: 5) + + // Step 1: Fill the buffer almost to capacity + XCTAssertTrue(ringBuffer.write(contentsOf: [1, 2, 3])) + ringBuffer.assertState(count: 3, readerIndex: 0, writerIndex: 3) + + // Step 2: Read some data to advance the reader index + var readBuffer = Array(repeating: 0, count: 2) + let readCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(readCount, 2) + XCTAssertEqual(readBuffer, [1, 2]) + ringBuffer.assertState(count: 1, readerIndex: 2, writerIndex: 3) + + // Step 3: Write more data to cause the writer index to wrap around + XCTAssertTrue(ringBuffer.write(contentsOf: [4, 5, 6])) + // Writer wraps around + ringBuffer.assertState(count: 4, readerIndex: 2, writerIndex: 1) + + // Step 4: Attempt a write that overflows (fails due to lack of capacity) + XCTAssertFalse(ringBuffer.write(contentsOf: [7, 8, 9])) + // State remains unchanged + ringBuffer.assertState(count: 4, readerIndex: 2, writerIndex: 1) + + // Step 5: Read more data than available to test wrapping underflow + readBuffer = Array(repeating: 0, count: 5) + let underflowReadCount = ringBuffer.read(into: &readBuffer) + XCTAssertEqual(underflowReadCount, 4) // Should only read 4 elements + // Validate read data + XCTAssertEqual(readBuffer.prefix(underflowReadCount), [3, 4, 5, 6]) + // Reader wraps around + ringBuffer.assertState(count: 0, readerIndex: 1, writerIndex: 1) + } +} diff --git a/harmony/assets/harmony.jpeg b/harmony/assets/harmony.jpeg new file mode 100644 index 00000000..c8ff0dab Binary files /dev/null and b/harmony/assets/harmony.jpeg differ diff --git a/harmony/include/btstack_config.h b/harmony/include/btstack_config.h new file mode 100644 index 00000000..1b969e1b --- /dev/null +++ b/harmony/include/btstack_config.h @@ -0,0 +1,89 @@ +#ifndef _PICO_BTSTACK_BTSTACK_CONFIG_H +#define _PICO_BTSTACK_BTSTACK_CONFIG_H + +// BTstack features that can be enabled +#define ENABLE_LOG_INFO +#define ENABLE_LOG_ERROR +#define ENABLE_PRINTF_HEXDUMP +#define ENABLE_SCO_OVER_HCI + +#ifdef ENABLE_BLE +#define ENABLE_GATT_CLIENT_PAIRING +#define ENABLE_L2CAP_LE_CREDIT_BASED_FLOW_CONTROL_MODE +#define ENABLE_LE_CENTRAL +#define ENABLE_LE_DATA_LENGTH_EXTENSION +#define ENABLE_LE_PERIPHERAL +#define ENABLE_LE_PRIVACY_ADDRESS_RESOLUTION +#define ENABLE_LE_SECURE_CONNECTIONS +#endif + +#ifdef ENABLE_CLASSIC +#define ENABLE_L2CAP_ENHANCED_RETRANSMISSION_MODE +#define ENABLE_GOEP_L2CAP +#endif + +#if defined (ENABLE_CLASSIC) && defined(ENABLE_BLE) +#define ENABLE_CROSS_TRANSPORT_KEY_DERIVATION +#endif + +// BTstack configuration. buffers, sizes, ... +#define HCI_OUTGOING_PRE_BUFFER_SIZE 4 +#define HCI_ACL_PAYLOAD_SIZE (1691 + 4) +#define HCI_ACL_CHUNK_SIZE_ALIGNMENT 4 +#define MAX_NR_AVDTP_CONNECTIONS 1 +#define MAX_NR_AVDTP_STREAM_ENDPOINTS 1 +#define MAX_NR_AVRCP_CONNECTIONS 2 +#define MAX_NR_BNEP_CHANNELS 1 +#define MAX_NR_BNEP_SERVICES 1 +#define MAX_NR_BTSTACK_LINK_KEY_DB_MEMORY_ENTRIES 2 +#define MAX_NR_GATT_CLIENTS 1 +#define MAX_NR_HCI_CONNECTIONS 2 +#define MAX_NR_HID_HOST_CONNECTIONS 1 +#define MAX_NR_HIDS_CLIENTS 1 +#define MAX_NR_HFP_CONNECTIONS 1 +#define MAX_NR_L2CAP_CHANNELS 4 +#define MAX_NR_L2CAP_SERVICES 3 +#define MAX_NR_RFCOMM_CHANNELS 1 +#define MAX_NR_RFCOMM_MULTIPLEXERS 1 +#define MAX_NR_RFCOMM_SERVICES 1 +#define MAX_NR_SERVICE_RECORD_ITEMS 4 +#define MAX_NR_SM_LOOKUP_ENTRIES 3 +#define MAX_NR_WHITELIST_ENTRIES 16 +#define MAX_NR_LE_DEVICE_DB_ENTRIES 16 + +// Limit number of ACL/SCO Buffer to use by stack to avoid cyw43 shared bus overrun +#define MAX_NR_CONTROLLER_ACL_BUFFERS 3 +#define MAX_NR_CONTROLLER_SCO_PACKETS 3 + +// Enable and configure HCI Controller to Host Flow Control to avoid cyw43 shared bus overrun +#define ENABLE_HCI_CONTROLLER_TO_HOST_FLOW_CONTROL +#define HCI_HOST_ACL_PACKET_LEN 1024 +#define HCI_HOST_ACL_PACKET_NUM 3 +#define HCI_HOST_SCO_PACKET_LEN 120 +#define HCI_HOST_SCO_PACKET_NUM 3 + +// Link Key DB and LE Device DB using TLV on top of Flash Sector interface +#define NVM_NUM_DEVICE_DB_ENTRIES 16 +#define NVM_NUM_LINK_KEYS 16 + +// We don't give btstack a malloc, so use a fixed-size ATT DB. +#define MAX_ATT_DB_SIZE 512 + +// BTstack HAL configuration +#define HAVE_EMBEDDED_TIME_MS + +// map btstack_assert onto Pico SDK assert() +#define HAVE_ASSERT + +// Some USB dongles take longer to respond to HCI reset (e.g. BCM20702A). +#define HCI_RESET_RESEND_TIMEOUT_MS 1000 + +#define ENABLE_SOFTWARE_AES128 +#define ENABLE_MICRO_ECC_FOR_LE_SECURE_CONNECTIONS + +#define HAVE_BTSTACK_STDIN + +// To get the audio demos working even with HCI dump at 115200, this truncates long ACL packets +//#define HCI_DUMP_STDOUT_MAX_SIZE_ACL 100 + +#endif // _PICO_BTSTACK_BTSTACK_CONFIG_H diff --git a/harmony/include/lwipopts.h b/harmony/include/lwipopts.h new file mode 100644 index 00000000..fefe1e4b --- /dev/null +++ b/harmony/include/lwipopts.h @@ -0,0 +1,24 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift.org open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors +// +//===----------------------------------------------------------------------===// + +#ifndef _LWIPOPTS_H +#define _LWIPOPTS_H + +#define NO_SYS 1 +#define LWIP_SOCKET 0 +#define LWIP_NETCONN 0 + +// Watch out: Without this, lwip fails to initialize and crashes inside +// memp_init_pool due to misaligned memory access (the fallback is "1"). +#define MEM_ALIGNMENT 4 + +#endif diff --git a/pico-blink-sdk/CMakeLists.txt b/pico-blink-sdk/CMakeLists.txt index 0553c8e0..63a9a58d 100644 --- a/pico-blink-sdk/CMakeLists.txt +++ b/pico-blink-sdk/CMakeLists.txt @@ -1,38 +1,45 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.29) include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake) +set(CMAKE_Swift_COMPILATION_MODE wholemodule) +set(CMAKE_Swift_COMPILER_WORKS YES) + project(swift-blinky) pico_sdk_init() - -if(APPLE) -execute_process(COMMAND xcrun -f swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE) -else() -execute_process(COMMAND which swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() +enable_language(Swift) set(SWIFT_TARGET "armv6m-none-none-eabi") # default for rp2040 if(PICO_PLATFORM STREQUAL "rp2350-arm-s") message(STATUS "PICO_PLATFORM is set to rp2350-arm-s, using armv7em") set(SWIFT_TARGET "armv7em-none-none-eabi") - list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc" "-mfloat-abi=soft") + list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc -mfloat-abi=soft") elseif(PICO_PLATFORM STREQUAL "rp2040") message(STATUS "PICO_PLATFORM is set to RP2040, using armv6m") - list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc" "-mfloat-abi=soft") + list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc -mfloat-abi=soft") elseif(PICO_PLATFORM STREQUAL "rp2350-riscv") message(STATUS "PICO_PLATFORM is set to rp2350-riscv, using riscv32.") set(SWIFT_TARGET "riscv32-none-none-eabi") - list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc" "-march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb" "-Xcc" "-mabi=ilp32") + list(APPEND CLANG_ARCH_ABI_FLAGS "-Xcc -march=rv32imac_zicsr_zifencei_zba_zbb_zbs_zbkb -Xcc -mabi=ilp32") endif() -add_executable(swift-blinky) +add_executable(swift-blinky + # Source files: + Main.swift +) + +set_target_properties(swift-blinky PROPERTIES LINKER_LANGUAGE CXX) target_link_libraries(swift-blinky pico_stdlib hardware_uart hardware_gpio ) -# Gather compile definitions from all dependencies +# Clear the default COMPILE_OPTIONS which include C specific compiler flags that the Swift compiler will not accept +# Instead, set those options to only apply when compiling C code. +set_target_properties(pico_standard_link PROPERTIES INTERFACE_COMPILE_OPTIONS "") +target_compile_options(pico_standard_link INTERFACE "$<$:SHELL: -ffunction-sections -fdata-sections>") +# Gather C compile definitions from all dependencies set_property(GLOBAL PROPERTY visited_targets "") set_property(GLOBAL PROPERTY compilerdefs_list "") @@ -42,7 +49,7 @@ function(gather_compile_definitions_recursive target) # make sure we don't visit the same target twice # and that we don't visit the special generator expressions - if (${target} MATCHES "\\$<" OR ${target} MATCHES "::@" OR ${target} IN_LIST visited_targets) + if (${target} MATCHES "\\\$<" OR ${target} MATCHES "::@" OR ${target} IN_LIST visited_targets) return() endif() @@ -50,12 +57,10 @@ function(gather_compile_definitions_recursive target) list(APPEND visited_targets ${target}) set_property(GLOBAL PROPERTY visited_targets "${visited_targets}") - # Get the current value of compilerdefs_list - get_property(compilerdefs_list GLOBAL PROPERTY compilerdefs_list) - get_target_property(target_definitions ${target} INTERFACE_COMPILE_DEFINITIONS) if (target_definitions) # Append the target definitions to compilerdefs_list + get_property(compilerdefs_list GLOBAL PROPERTY compilerdefs_list) list(APPEND compilerdefs_list ${target_definitions}) set_property(GLOBAL PROPERTY compilerdefs_list "${compilerdefs_list}") endif() @@ -71,35 +76,38 @@ endfunction() gather_compile_definitions_recursive(swift-blinky) get_property(COMPILE_DEFINITIONS GLOBAL PROPERTY compilerdefs_list) +get_property(INCLUDES GLOBAL PROPERTY includes_list) -# Parse compiler definitions into a format that swiftc can understand +# Convert compiler definitions into a format that swiftc can understand list(REMOVE_DUPLICATES COMPILE_DEFINITIONS) -list(PREPEND COMPILE_DEFINITIONS "") +list(PREPEND COMPILE_DEFINITIONS "") # adds a semicolon at the beginning string(REPLACE "$" "$" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") -string(REPLACE ";" ";-Xcc;-D" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") - -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o - COMMAND - ${SWIFTC} - -target ${SWIFT_TARGET} -Xcc -fshort-enums - ${COMPILE_DEFINITIONS} +string(REPLACE ";" " -Xcc -D" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") + +# Compute -Xcc flags to set up the C and C++ header search paths for Swift (for bridging header). +set(IMPLICIT_INCLUDES) +foreach(dir ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-Xcc ") + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-I${dir} ") +endforeach() +foreach(dir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-Xcc ") + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-I${dir} ") +endforeach() + +target_compile_options(swift-blinky PUBLIC + "$<$:SHELL: + -target ${SWIFT_TARGET} + -enable-experimental-feature Embedded + -parse-as-library + -module-name swift_blinky + ${CLANG_ARCH_ABI_FLAGS} - -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library - $$\( echo '$' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \) - $$\( echo '${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}' | tr ' ' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \) + -Xcc -fshort-enums + -Xfrontend -function-sections -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h - ${CMAKE_CURRENT_LIST_DIR}/Main.swift - -c -o ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o - DEPENDS - ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h - ${CMAKE_CURRENT_LIST_DIR}/Main.swift -) -add_custom_target(swift-blinky-swiftcode DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o) - + ${COMPILE_DEFINITIONS} + ${IMPLICIT_INCLUDES} + >") -target_link_libraries(swift-blinky - ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o -) -add_dependencies(swift-blinky swift-blinky-swiftcode) pico_add_extra_outputs(swift-blinky) diff --git a/pico-blink-sdk/Main.swift b/pico-blink-sdk/Main.swift index 060bc5f7..74c0d7af 100644 --- a/pico-blink-sdk/Main.swift +++ b/pico-blink-sdk/Main.swift @@ -14,7 +14,7 @@ struct Main { static func main() { let led = UInt32(PICO_DEFAULT_LED_PIN) gpio_init(led) - gpio_set_dir(led, /*out*/ true) + gpio_set_dir(led, true) while true { gpio_put(led, true) sleep_ms(250) diff --git a/pico-blink-sdk/README.md b/pico-blink-sdk/README.md index 463c0653..a0b45830 100644 --- a/pico-blink-sdk/README.md +++ b/pico-blink-sdk/README.md @@ -28,7 +28,7 @@ $ export PICO_BOARD='' # Examples: pico, pico2 $ export PICO_PLATFORM='' # Optional; useful if you'd like to compile for RISC-V. Examples: rp2040, rp2350-arm-s, rp2350-riscv $ export PICO_SDK_PATH='' $ export PICO_TOOLCHAIN_PATH='' # A default `brew` install will be located at `/Applications/ArmGNUToolchain/[version]/arm-none-eabi`. This can also be a RISC-V toolchain for the RP2350. -$ cmake -B build -G Ninja . +$ cmake -B build -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=On $ cmake --build build ``` diff --git a/pico-w-blink-sdk/CMakeLists.txt b/pico-w-blink-sdk/CMakeLists.txt index a59fa29f..41cb7fcd 100644 --- a/pico-w-blink-sdk/CMakeLists.txt +++ b/pico-w-blink-sdk/CMakeLists.txt @@ -1,21 +1,30 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.29) include($ENV{PICO_SDK_PATH}/external/pico_sdk_import.cmake) +set(CMAKE_Swift_COMPILATION_MODE wholemodule) +set(CMAKE_Swift_COMPILER_WORKS YES) + project(swift-blinky) pico_sdk_init() +enable_language(Swift) + +add_executable(swift-blinky + # Source files: + Main.swift +) -if(APPLE) -execute_process(COMMAND xcrun -f swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE) -else() -execute_process(COMMAND which swiftc OUTPUT_VARIABLE SWIFTC OUTPUT_STRIP_TRAILING_WHITESPACE) -endif() +set_target_properties(swift-blinky PROPERTIES LINKER_LANGUAGE CXX) -add_executable(swift-blinky) target_link_libraries(swift-blinky pico_stdlib hardware_uart hardware_gpio pico_lwip_arch pico_cyw43_arch_none ) -# Gather compile definitions from all dependencies +# Clear the default COMPILE_OPTIONS which include C specific compiler flags that the Swift compiler will not accept +# Instead, set those options to only apply when compiling C code. +set_target_properties(pico_standard_link PROPERTIES INTERFACE_COMPILE_OPTIONS "") +target_compile_options(pico_standard_link INTERFACE "$<$:SHELL: -ffunction-sections -fdata-sections>") + +# Gather C compile definitions from all dependencies set_property(GLOBAL PROPERTY visited_targets "") set_property(GLOBAL PROPERTY compilerdefs_list "") @@ -25,7 +34,7 @@ function(gather_compile_definitions_recursive target) # make sure we don't visit the same target twice # and that we don't visit the special generator expressions - if (${target} MATCHES "\\$<" OR ${target} MATCHES "::@" OR ${target} IN_LIST visited_targets) + if (${target} MATCHES "\\\$<" OR ${target} MATCHES "::@" OR ${target} IN_LIST visited_targets) return() endif() @@ -33,12 +42,10 @@ function(gather_compile_definitions_recursive target) list(APPEND visited_targets ${target}) set_property(GLOBAL PROPERTY visited_targets "${visited_targets}") - # Get the current value of compilerdefs_list - get_property(compilerdefs_list GLOBAL PROPERTY compilerdefs_list) - get_target_property(target_definitions ${target} INTERFACE_COMPILE_DEFINITIONS) if (target_definitions) # Append the target definitions to compilerdefs_list + get_property(compilerdefs_list GLOBAL PROPERTY compilerdefs_list) list(APPEND compilerdefs_list ${target_definitions}) set_property(GLOBAL PROPERTY compilerdefs_list "${compilerdefs_list}") endif() @@ -54,37 +61,37 @@ endfunction() gather_compile_definitions_recursive(swift-blinky) get_property(COMPILE_DEFINITIONS GLOBAL PROPERTY compilerdefs_list) +get_property(INCLUDES GLOBAL PROPERTY includes_list) -# Parse compiler definitions into a format that swiftc can understand +# Convert compiler definitions into a format that swiftc can understand list(REMOVE_DUPLICATES COMPILE_DEFINITIONS) list(PREPEND COMPILE_DEFINITIONS "") # adds a semicolon at the beginning string(REPLACE "$" "$" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") -string(REPLACE ";" ";-Xcc;-D" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") +string(REPLACE ";" " -Xcc -D" COMPILE_DEFINITIONS "${COMPILE_DEFINITIONS}") -add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o - COMMAND - ${SWIFTC} - -target armv6m-none-none-eabi -Xcc -mfloat-abi=soft -Xcc -fshort-enums - ${COMPILE_DEFINITIONS} - -Xcc -DCYW43_LWIP - -Xcc -DPICO_CYW43_ARCH_THREADSAFE_BACKGROUND - -Xcc -I$ENV{PICO_SDK_PATH}/lib/lwip/src/include - -Xcc -I${CMAKE_CURRENT_LIST_DIR}/include - -Xfrontend -function-sections -enable-experimental-feature Embedded -wmo -parse-as-library - $$\( echo '$' | tr '\;' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \) - $$\( echo '${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}' | tr ' ' '\\n' | sed -e 's/\\\(.*\\\)/-Xcc -I\\1/g' \) +# Compute -Xcc flags to set up the C and C++ header search paths for Swift (for bridging header). +set(IMPLICIT_INCLUDES) +foreach(dir ${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-Xcc ") + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-I${dir} ") +endforeach() +foreach(dir ${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}) + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-Xcc ") + string(CONCAT IMPLICIT_INCLUDES ${IMPLICIT_INCLUDES} "-I${dir} ") +endforeach() + +target_compile_options(swift-blinky PUBLIC + "$<$:SHELL: + -target armv6m-none-none-eabi + -enable-experimental-feature Embedded + -parse-as-library + -module-name swift_blinky + + -Xcc -fshort-enums + -Xfrontend -function-sections -import-bridging-header ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h - ${CMAKE_CURRENT_LIST_DIR}/Main.swift - -c -o ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o - DEPENDS - ${CMAKE_CURRENT_LIST_DIR}/BridgingHeader.h - ${CMAKE_CURRENT_LIST_DIR}/Main.swift -) -add_custom_target(swift-blinky-swiftcode DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o) + ${COMPILE_DEFINITIONS} + ${IMPLICIT_INCLUDES} + >") -target_link_libraries(swift-blinky - ${CMAKE_CURRENT_BINARY_DIR}/_swiftcode.o -) -add_dependencies(swift-blinky swift-blinky-swiftcode) pico_add_extra_outputs(swift-blinky) diff --git a/pico-w-blink-sdk/README.md b/pico-w-blink-sdk/README.md index d8a114af..72702188 100644 --- a/pico-w-blink-sdk/README.md +++ b/pico-w-blink-sdk/README.md @@ -26,7 +26,7 @@ $ export TOOLCHAINS='' $ export PICO_BOARD=pico_w $ export PICO_SDK_PATH='' $ export PICO_TOOLCHAIN_PATH='' -$ cmake -B build -G Ninja . +$ cmake -B build -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=On $ cmake --build build ``` diff --git a/rpi4b-blink/Makefile b/rpi4b-blink/Makefile new file mode 100644 index 00000000..da37442b --- /dev/null +++ b/rpi4b-blink/Makefile @@ -0,0 +1,28 @@ +SWIFT_EXEC ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f swift; else which swift; fi) +CLANG ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f clang; else which clang; fi) +LLVM_OBJCOPY ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f llvm-objcopy; else which llvm-objcopy; fi) + +BUILDROOT := $(shell $(SWIFT_EXEC) build --triple aarch64-none-none-elf -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector --show-bin-path) + +.PHONY: all clean + +all: kernel8.img + +kernel8.img: kernel8.elf + @echo "💾 Converting to binary kernel image with llvm-objcopy..." + $(LLVM_OBJCOPY) -O binary kernel8.elf kernel8.img + @echo "" + @echo "🥳 Done! kernel8.img was saved to this directory." + +kernel8.elf: $(BUILDROOT)/libMainApp.a $(BUILDROOT)/Support.build/boot.S.o link.ld + @echo "🔗 Linking with clang..." + $(CLANG) --target=aarch64-elf -o kernel8.elf $< $^ -fuse-ld=lld -nostdlib -Wl,--unresolved-symbols=ignore-in-object-files -Wl,-T ./link.ld + @echo "" + +$(BUILDROOT)/libMainApp.a $(BUILDROOT)/Support.build/boot.S.o: + @echo "🛠️ Building with Swift Package Manager..." + $(SWIFT_EXEC) build --triple aarch64-none-none-elf -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector + @echo "" + +clean: + rm -rf kernel8.elf kernel8.img .build \ No newline at end of file diff --git a/rpi4b-blink/Package.swift b/rpi4b-blink/Package.swift new file mode 100644 index 00000000..f004c0b8 --- /dev/null +++ b/rpi4b-blink/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version: 6.1 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "RPi4B-Blink", + platforms: [ + .macOS(.v14) + ], + products: [ + .library( + name: "MainApp", + type: .static, + targets: ["MainApp"]) + ], + dependencies: [ + .package( + url: "https://github.com/apple/swift-mmio.git", + branch: "swift-embedded-examples") + ], + targets: [ + .target( + name: "MainApp", + dependencies: [ + .product(name: "MMIO", package: "swift-mmio") + ], + swiftSettings: [ + .enableExperimentalFeature("Embedded"), + .unsafeFlags(["-Xfrontend", "-function-sections"]), + ] + ), + .target(name: "Support"), + + ] +) diff --git a/rpi4b-blink/README.md b/rpi4b-blink/README.md new file mode 100644 index 00000000..b68de6a5 --- /dev/null +++ b/rpi4b-blink/README.md @@ -0,0 +1,24 @@ +# rpi4b-blink + + + +## Requirements + +- A Raspberry Pi 4B board +- An SD Card, with a Raspberry Pi OS installed (this way, we don't need to create the configuration files from scratch). You may backup `kernel8.img` and `config.txt` if you need the Linux install later, since we will change these files. +- LLVM installed (`brew install llvm`) and added to PATH. This is needed to convert the resulted ELF file to binary image format using `llvm-objcopy`. + +## How to build and run this example: + +- Make sure you have a recent nightly Swift toolchain that has Embedded Swift support. +- Build the program, then copy the kernel image to the SD card. +``` console +$ cd rpi4b-blink +$ export TOOLCHAINS='' # Your Swift nightly toolchain identifier +$ make +$ cp kernel8.img /Volumes/bootfs +``` +- If your original OS is not 64-bit, make sure to set `arm_64bit=1` in `config.txt`. +- Place the SD card in your Raspberry Pi 4B, and connect it to power. +- After the boot sequence, the green (ACT) led will start blinking in a regular pattern. + diff --git a/rpi4b-blink/Sources/MainApp/MainApp.swift b/rpi4b-blink/Sources/MainApp/MainApp.swift new file mode 100644 index 00000000..eaef412f --- /dev/null +++ b/rpi4b-blink/Sources/MainApp/MainApp.swift @@ -0,0 +1,82 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +import MMIO + +@Register(bitWidth: 32) +struct GPSET1 { + @ReadWrite(bits: 10..<11, as: Bool.self) + var set: SET +} + +@Register(bitWidth: 32) +struct GPCLR1 { + @ReadWrite(bits: 10..<11, as: Bool.self) + var clear: CLEAR +} + +@Register(bitWidth: 32) +struct GPFSEL4 { + @ReadWrite(bits: 6..<7, as: Bool.self) + var fsel42b1: FSEL42b1 + @ReadWrite(bits: 7..<8, as: Bool.self) + var fsel42b2: FSEL42b2 + @ReadWrite(bits: 8..<9, as: Bool.self) + var fsel42b3: FSEL42b3 +} + +@RegisterBlock +struct GPIO { + @RegisterBlock(offset: 0x200020) + var gpset1: Register + @RegisterBlock(offset: 0x20002c) + var gpclr1: Register + @RegisterBlock(offset: 0x200010) + var gpfsel4: Register +} + +let gpio = GPIO(unsafeAddress: 0xFE00_0000) + +func setLedOutput() { + gpio.gpfsel4.modify { + // setFunction Select 42 (fsel42) to 001 + $0.fsel42b1 = true + $0.fsel42b2 = false + $0.fsel42b3 = false + } +} + +func ledOn() { + gpio.gpset1.modify { + $0.set = true + } +} + +func ledOff() { + gpio.gpclr1.modify { + $0.clear = true + } +} + +@main +struct Main { + + static func main() { + setLedOutput() + + while true { + ledOn() + for _ in 1..<100000 {} // just a delay + ledOff() + for _ in 1..<100000 {} // just a delay + } + } +} diff --git a/rpi4b-blink/Sources/Support/boot.S b/rpi4b-blink/Sources/Support/boot.S new file mode 100644 index 00000000..0a8f8c39 --- /dev/null +++ b/rpi4b-blink/Sources/Support/boot.S @@ -0,0 +1,41 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +.section ".text.boot" + +.global _start + +_start: + // Check processor ID is zero (executing on main core), else hang + mrs x1, mpidr_el1 + and x1, x1, #3 + cbz x1, 2f + // We're not on the main core, so hang in an infinite wait loop +1: wfe + b 1b +2: // We're on the main core! + + // Set stack to start below our code + ldr x1, =_start + mov sp, x1 + + // Clean the BSS section + ldr x1, =__bss_start // Start address + ldr w2, =__bss_size // Size of the section +3: cbz w2, 4f // Quit loop if zero + str xzr, [x1], #8 + sub w2, w2, #1 + cbnz w2, 3b // Loop if non-zero + + // Jump to Swift! +4: bl main + // Halt if Swift returns + b 1b diff --git a/rpi4b-blink/Sources/Support/include/boot.h b/rpi4b-blink/Sources/Support/include/boot.h new file mode 100644 index 00000000..e69de29b diff --git a/rpi4b-blink/assets/rpi4.png b/rpi4b-blink/assets/rpi4.png new file mode 100644 index 00000000..1df6f1c3 Binary files /dev/null and b/rpi4b-blink/assets/rpi4.png differ diff --git a/rpi4b-blink/link.ld b/rpi4b-blink/link.ld new file mode 100644 index 00000000..dfbf0227 --- /dev/null +++ b/rpi4b-blink/link.ld @@ -0,0 +1,19 @@ +SECTIONS +{ + . = 0x80000; /* Kernel load address for AArch64 */ + .text : { KEEP(*(.text.boot)) *(.text .text.* .gnu.linkonce.t*) } + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r*) } + PROVIDE(_data = .); + .data : { *(.data .data.* .gnu.linkonce.d*) } + .bss (NOLOAD) : { + . = ALIGN(16); + __bss_start = .; + *(.bss .bss.*) + *(COMMON) + __bss_end = .; + } + _end = .; + + /DISCARD/ : { *(.comment) *(.gnu*) *(.note*) *(.eh_frame*) } +} +__bss_size = (__bss_end - __bss_start)>>3; diff --git a/rpi5-blink/Makefile b/rpi5-blink/Makefile new file mode 100644 index 00000000..da37442b --- /dev/null +++ b/rpi5-blink/Makefile @@ -0,0 +1,28 @@ +SWIFT_EXEC ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f swift; else which swift; fi) +CLANG ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f clang; else which clang; fi) +LLVM_OBJCOPY ?= $(shell if [ "$(shell uname)" = "Darwin" ]; then xcrun -f llvm-objcopy; else which llvm-objcopy; fi) + +BUILDROOT := $(shell $(SWIFT_EXEC) build --triple aarch64-none-none-elf -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector --show-bin-path) + +.PHONY: all clean + +all: kernel8.img + +kernel8.img: kernel8.elf + @echo "💾 Converting to binary kernel image with llvm-objcopy..." + $(LLVM_OBJCOPY) -O binary kernel8.elf kernel8.img + @echo "" + @echo "🥳 Done! kernel8.img was saved to this directory." + +kernel8.elf: $(BUILDROOT)/libMainApp.a $(BUILDROOT)/Support.build/boot.S.o link.ld + @echo "🔗 Linking with clang..." + $(CLANG) --target=aarch64-elf -o kernel8.elf $< $^ -fuse-ld=lld -nostdlib -Wl,--unresolved-symbols=ignore-in-object-files -Wl,-T ./link.ld + @echo "" + +$(BUILDROOT)/libMainApp.a $(BUILDROOT)/Support.build/boot.S.o: + @echo "🛠️ Building with Swift Package Manager..." + $(SWIFT_EXEC) build --triple aarch64-none-none-elf -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector + @echo "" + +clean: + rm -rf kernel8.elf kernel8.img .build \ No newline at end of file diff --git a/rpi5-blink/Package.resolved b/rpi5-blink/Package.resolved new file mode 100644 index 00000000..1a6f57c0 --- /dev/null +++ b/rpi5-blink/Package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "193ca3f107e2c8dd2da5d091f6259f64b2cbfd6776d1c26bbcfb195b3a0b5045", + "pins" : [ + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "41982a3656a71c768319979febd796c6fd111d5c", + "version" : "1.5.0" + } + }, + { + "identity" : "swift-mmio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-mmio.git", + "state" : { + "branch" : "swift-embedded-examples", + "revision" : "06d96ed4916739f2edafde87f3951b2d2a04df65" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax.git", + "state" : { + "revision" : "0687f71944021d616d34d922343dcef086855920", + "version" : "600.0.1" + } + } + ], + "version" : 3 +} diff --git a/rpi5-blink/Package.swift b/rpi5-blink/Package.swift new file mode 100644 index 00000000..a01f42ef --- /dev/null +++ b/rpi5-blink/Package.swift @@ -0,0 +1,36 @@ +// swift-tools-version: 6.1 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "RPi5-Blink", + platforms: [ + .macOS(.v14) + ], + products: [ + .library( + name: "MainApp", + type: .static, + targets: ["MainApp"]) + ], + dependencies: [ + .package( + url: "https://github.com/apple/swift-mmio.git", + branch: "swift-embedded-examples") + ], + targets: [ + .target( + name: "MainApp", + dependencies: [ + .product(name: "MMIO", package: "swift-mmio") + ], + swiftSettings: [ + .enableExperimentalFeature("Embedded"), + .unsafeFlags(["-Xfrontend", "-function-sections"]), + ] + ), + .target(name: "Support"), + + ] +) diff --git a/rpi5-blink/README.md b/rpi5-blink/README.md new file mode 100644 index 00000000..49c200b2 --- /dev/null +++ b/rpi5-blink/README.md @@ -0,0 +1,25 @@ +# rpi5-blink + + + +## Requirements + +- A Raspberry Pi 5 board +- An SD Card, with a Raspberry Pi OS installed (this way, we don't need to create the configuration files from scratch). You may backup `kernel8.img` and `kernel_2712.img` if you need the Linux install later, since we will change these files. +- LLVM installed (`brew install llvm`) and added to PATH. This is needed to convert the resulted ELF file to binary image format using `llvm-objcopy`. + +## How to build and run this example: + +- Make sure you have a recent nightly Swift toolchain that has Embedded Swift support. +- Build the program, then copy the kernel image to the SD card. +``` console +$ cd rpi5-blink +$ export TOOLCHAINS='' # Your Swift nightly toolchain identifier +$ make +$ cp kernel8.img /Volumes/bootfs # Copy kernel image to SD card +$ rm /Volumes/bootfs/kernel_2712.img # Delete this kernel image so our kernel8.img is used +$ # You can also rename our kernel8.img to kernel_2712.img, or set it to anything you want and specify "kernel=[your-img-name]" in config.txt. +``` +- Place the SD card in your Raspberry Pi 5, and connect it to power. +- After the boot sequence, the green (ACT) led will start blinking in a regular pattern. + diff --git a/rpi5-blink/Sources/MainApp/MainApp.swift b/rpi5-blink/Sources/MainApp/MainApp.swift new file mode 100644 index 00000000..7bbae377 --- /dev/null +++ b/rpi5-blink/Sources/MainApp/MainApp.swift @@ -0,0 +1,56 @@ +import MMIO + +@Register(bitWidth: 32) +struct GIOIODIR { + @ReadWrite(bits: 9..<10, as: Bool.self) + var direction: DIRECTION +} + +@Register(bitWidth: 32) +struct GIODATA { + @ReadWrite(bits: 9..<10, as: Bool.self) + var value: VALUE +} + +@RegisterBlock +struct GPIO { + @RegisterBlock(offset: 0x00008) + var gioiodir: Register + @RegisterBlock(offset: 0x00004) + var giodata: Register +} + +let gpio = GPIO(unsafeAddress: 0x10_7d51_7c00) + +func setLedOutput() { + gpio.gioiodir.modify { + $0.direction = false // 0 is output, 1 is input + } +} + +func ledOn() { + gpio.giodata.modify { + $0.value = true // pin on + } +} + +func ledOff() { + gpio.giodata.modify { + $0.value = false // pin off + } +} + +@main +struct Main { + + static func main() { + setLedOutput() + + while true { + ledOn() + for _ in 1..<100000 {} // just a delay + ledOff() + for _ in 1..<100000 {} // just a delay + } + } +} diff --git a/rpi5-blink/Sources/Support/boot.S b/rpi5-blink/Sources/Support/boot.S new file mode 100644 index 00000000..0a8f8c39 --- /dev/null +++ b/rpi5-blink/Sources/Support/boot.S @@ -0,0 +1,41 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +.section ".text.boot" + +.global _start + +_start: + // Check processor ID is zero (executing on main core), else hang + mrs x1, mpidr_el1 + and x1, x1, #3 + cbz x1, 2f + // We're not on the main core, so hang in an infinite wait loop +1: wfe + b 1b +2: // We're on the main core! + + // Set stack to start below our code + ldr x1, =_start + mov sp, x1 + + // Clean the BSS section + ldr x1, =__bss_start // Start address + ldr w2, =__bss_size // Size of the section +3: cbz w2, 4f // Quit loop if zero + str xzr, [x1], #8 + sub w2, w2, #1 + cbnz w2, 3b // Loop if non-zero + + // Jump to Swift! +4: bl main + // Halt if Swift returns + b 1b diff --git a/rpi5-blink/Sources/Support/include/boot.h b/rpi5-blink/Sources/Support/include/boot.h new file mode 100644 index 00000000..e69de29b diff --git a/rpi5-blink/assets/raspi5.png b/rpi5-blink/assets/raspi5.png new file mode 100644 index 00000000..3fb4451f Binary files /dev/null and b/rpi5-blink/assets/raspi5.png differ diff --git a/rpi5-blink/link.ld b/rpi5-blink/link.ld new file mode 100644 index 00000000..dfbf0227 --- /dev/null +++ b/rpi5-blink/link.ld @@ -0,0 +1,19 @@ +SECTIONS +{ + . = 0x80000; /* Kernel load address for AArch64 */ + .text : { KEEP(*(.text.boot)) *(.text .text.* .gnu.linkonce.t*) } + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r*) } + PROVIDE(_data = .); + .data : { *(.data .data.* .gnu.linkonce.d*) } + .bss (NOLOAD) : { + . = ALIGN(16); + __bss_start = .; + *(.bss .bss.*) + *(COMMON) + __bss_end = .; + } + _end = .; + + /DISCARD/ : { *(.comment) *(.gnu*) *(.note*) *(.eh_frame*) } +} +__bss_size = (__bss_end - __bss_start)>>3; diff --git a/stm32-blink/Board.swift b/stm32-blink/Board.swift new file mode 100644 index 00000000..130932e2 --- /dev/null +++ b/stm32-blink/Board.swift @@ -0,0 +1,115 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2023 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +#if STM32F746G_DISCOVERY + +typealias Board = STM32F746Board +enum STM32F746Board { + static func initialize() { + // (1) AHB1ENR[lecConfig.0] = 1 ... enable clock + setRegisterBit( + baseAddress: RCC.BaseAddress, offset: RCC.Offsets.AHB1ENR, + bit: RCC.AHB1ENRBit(for: ledConfig.0), + value: 1) + // (2) MODER[1] = 1 ... set mode to output + setRegisterTwoBitField( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.MODER, + bitsStartingAt: 2 * ledConfig.1, value: 1) + // (3) OTYPER[1] = 0 ... output type is push-pull + setRegisterBit( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.OTYPER, + bit: ledConfig.1, + value: 0) + // (4) OSPEEDR[1] = 2 ... speed is high + setRegisterTwoBitField( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.OSPEEDR, + bitsStartingAt: 2 * ledConfig.1, value: 2) + // (5) PUPDR[1] = 2 ... set pull to down + setRegisterTwoBitField( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.PUPDR, + bitsStartingAt: 2 * ledConfig.1, value: 2) + + ledOff() + } + + static func ledOn() { + // ODR[1] = 1 + setRegisterBit( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.ODR, bit: 1, + value: 1) + } + + static func ledOff() { + // ODR[1] = 0 + setRegisterBit( + baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.ODR, bit: 1, + value: 0) + } + + static func delay(milliseconds: Int) { + for _ in 0..<10_000 * milliseconds { + nop() + } + } +} + +#elseif NUCLEO_F103RB + +typealias Board = STM32F1Board +enum STM32F1Board { + static func initialize() { + // (1) APB2ENR[ledConfig.0] = 1 ... enable clock + setRegisterBit( + baseAddress: RCC.BaseAddress, offset: RCC.Offsets.APB2ENR, + bit: RCC.APB2ENRBit(for: ledConfig.0), + value: 1) + // (2) CRL.MODE[ledConfig.1] = 0b11 ... set mode to output, high speed + setRegisterTwoBitField( + baseAddress: GPIO.GPIOBaseAddress(for: ledConfig.0), + offset: GPIO.Offsets.CRL, + bitsStartingAt: 4 * ledConfig.1, value: 3) + // (3) CRL.CNF[ledConfig.1] = 0b00 ... general purpose, push-pull + setRegisterTwoBitField( + baseAddress: GPIO.GPIOBaseAddress(for: ledConfig.0), + offset: GPIO.Offsets.CRL, + bitsStartingAt: 4 * ledConfig.1 + 2, value: 0) + + ledOff() + } + + static func ledOn() { + // ODR[ledConfig.1] = 1 + setRegisterBit( + baseAddress: GPIO.GPIOBaseAddress(for: ledConfig.0), + offset: GPIO.Offsets.ODR, bit: ledConfig.1, + value: 1) + } + + static func ledOff() { + // ODR[ledConfig.1] = 0 + setRegisterBit( + baseAddress: GPIO.GPIOBaseAddress(for: ledConfig.0), + offset: GPIO.Offsets.ODR, bit: ledConfig.1, + value: 0) + } + + static func delay(milliseconds: Int) { + for _ in 0..<10_000 * milliseconds { + nop() + } + } +} + +#else + +#error("Unknown board") + +#endif diff --git a/stm32-blink/BridgingHeader.h b/stm32-blink/BridgingHeader.h index 5a160e8b..6b807332 100644 --- a/stm32-blink/BridgingHeader.h +++ b/stm32-blink/BridgingHeader.h @@ -11,16 +11,6 @@ #pragma once -#include - -static inline __attribute((always_inline)) uint32_t volatile_load_uint32_t(const volatile uint32_t * _Nonnull source) { - return *((const volatile uint32_t * _Nonnull) source); -} - -static inline __attribute((always_inline)) void volatile_store_uint32_t(volatile uint32_t * _Nonnull destination, uint32_t value) { - *((volatile uint32_t * _Nonnull) destination) = value; -} - static inline __attribute((always_inline)) void nop() { asm volatile("nop"); } diff --git a/stm32-blink/Main.swift b/stm32-blink/Main.swift index c21650e3..43d23858 100644 --- a/stm32-blink/Main.swift +++ b/stm32-blink/Main.swift @@ -9,59 +9,26 @@ // //===----------------------------------------------------------------------===// -enum STM32F746Board { - static func initialize() { - // Configure pin I1 as an LED +#if STM32F746G_DISCOVERY - // (1) AHB1ENR[i] = 1 ... enable clock - setRegisterBit( - baseAddress: RCC.BaseAddress, offset: RCC.Offsets.AHB1ENR, bit: 8, - value: 1) - // (2) MODER[1] = 1 ... set mode to output - setRegisterTwoBitField( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.MODER, - bitsStartingAt: 2, value: 1) - // (3) OTYPER[1] = 0 ... output type is push-pull - setRegisterBit( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.OTYPER, bit: 1, - value: 0) - // (4) OSPEEDR[1] = 2 ... speed is high - setRegisterTwoBitField( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.OSPEEDR, - bitsStartingAt: 2, value: 2) - // (5) PUPDR[1] = 2 ... set pull to down - setRegisterTwoBitField( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.PUPDR, - bitsStartingAt: 2, value: 2) +// I1 pin aka "Arduino D13" pin on STM32F746 Discovery Board +// https://www.st.com/resource/en/schematic_pack/mb1191-f746ngh6-c01_schematic.pdf +let ledConfig: (GPIOBank, GPIOPin) = (.i, 1) - ledOff() - } +#elseif NUCLEO_F103RB - static func ledOn() { - // ODR[1] = 1 - setRegisterBit( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.ODR, bit: 1, - value: 1) - } +// A5 pin aka "Arduino D13" pin on Nucleo-64 boards +// https://www.st.com/resource/en/user_manual/um1724-stm32-nucleo64-boards-mb1136-stmicroelectronics.pdf +let ledConfig: (GPIOBank, GPIOPin) = (.a, 5) - static func ledOff() { - // ODR[1] = 0 - setRegisterBit( - baseAddress: GPIO.GPIOi_BaseAddress, offset: GPIO.Offsets.ODR, bit: 1, - value: 0) - } +#else - static func delay(milliseconds: Int) { - for _ in 0..<10_000 * milliseconds { - nop() - } - } -} +#error("Unknown board") + +#endif @main struct Main { - typealias Board = STM32F746Board - static func main() { Board.initialize() diff --git a/stm32-blink/README.md b/stm32-blink/README.md index 9289f7d5..5ae799f3 100644 --- a/stm32-blink/README.md +++ b/stm32-blink/README.md @@ -4,19 +4,41 @@ This example shows a simple baremetal firmware for an STM32 board that blinks an -## How to build and run this example: +## Requirements - Connect the STM32F746G-DISCO board via the ST-LINK USB port to your Mac. -- Make sure you have a recent nightly Swift toolchain that has Embedded Swift support. +- Download and install a [recent nightly Swift toolchain](https://swift.org/download). Use the "Development Snapshot" from "main". - Install the [`stlink`](https://github.com/stlink-org/stlink) command line tools, e.g. via `brew install stlink`. + +## Building and running the firmware as Mach-O on macOS + - Build and upload the program to flash memory of the microcontroller: ```console $ cd stm32-blink -$ TOOLCHAINS='' ./build.sh +$ export TOOLCHAINS=$(plutil -extract CFBundleIdentifier raw /Library/Developer/Toolchains/swift-latest.xctoolchain/Info.plist) +$ export STM_BOARD=STM32F746G_DISCOVERY # or NUCLEO_F103RB +$ ./build-macho.sh $ st-flash --reset write .build/blink.bin 0x08000000 ``` - The green LED next to the RESET button should now be blinking in a pattern. +## Building and running the firmware as ELF (on either macOS or Linux) + +- Build and upload the program to flash memory of the microcontroller: +```console +$ cd stm32-blink + +# If on macOS, select the right latest nightly toolchain (on Linux this is not needed): +$ export TOOLCHAINS=$(plutil -extract CFBundleIdentifier raw /Library/Developer/Toolchains/swift-latest.xctoolchain/Info.plist) + +$ export STM_BOARD=STM32F746G_DISCOVERY # or NUCLEO_F103RB +$ ./build-elf.sh +$ st-flash --format ihex --reset write .build/blink.hex +``` +- The green LED next to the RESET button should now be blinking in a pattern. + +## Binary size + The resulting size of the compiled and linked binary is very small (which shouldn't be surprising given that this toy example only blinks an LED), and demonstrates how the Embedded Swift compilation mode doesn't include unnecessary code or data in the resulting program: ```console diff --git a/stm32-blink/Registers.swift b/stm32-blink/Registers.swift index ef22eec9..ccbf13fb 100644 --- a/stm32-blink/Registers.swift +++ b/stm32-blink/Registers.swift @@ -11,45 +11,51 @@ // swift-format-ignore-file -extension UnsafeMutablePointer where Pointee == UInt32 { - func volatileLoad() -> Pointee { - return volatile_load_uint32_t(self) - } +import _Volatile - func volatileStore(_ value: Pointee) { - volatile_store_uint32_t(self, value) - } +#if STM32F746G_DISCOVERY + +// Register definitions for STM32F746NG MCU +// https://www.st.com/resource/en/reference_manual/rm0385-stm32f75xxx-and-stm32f74xxx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf + +enum GPIOBank: Int { + case a, b, c, d, e, f, g, h, i, j, k } +typealias GPIOPin = Int enum RCC { static let BaseAddress = UnsafeMutablePointer(bitPattern: 0x40023800 as UInt)! enum Offsets { - static let CR = 0x0 - static let PLLCFGR = 0x4 - static let CFGR = 0x8 - static let CIR = 0xc - static let AHB1RSTR = 0x10 - static let AHB2RSTR = 0x14 - static let AHB3RSTR = 0x18 - static let APB1RSTR = 0x20 - static let APB2RSTR = 0x24 static let AHB1ENR = 0x30 - static let AHB2ENR = 0x34 - static let AHB3ENR = 0x38 - static let APB1ENR = 0x40 - static let APB2ENR = 0x44 - static let AHB1LPENR = 0x50 - static let AHB2LPENR = 0x54 - static let AHB3LPENR = 0x58 - static let APB1LPENR = 0x60 - static let APB2LPENR = 0x64 - static let BDCR = 0x70 - static let CSR = 0x74 - static let SSCGR = 0x80 - static let PLLI2SCFGR = 0x84 - static let PLLSAICFGR = 0x88 - static let DKCFGR1 = 0x8c - static let DKCFGR2 = 0x90 + } + enum Bits { + static let AHB1ENR_GPIOAEN = 0 + static let AHB1ENR_GPIOBEN = 1 + static let AHB1ENR_GPIOCEN = 2 + static let AHB1ENR_GPIODEN = 3 + static let AHB1ENR_GPIOEEN = 4 + static let AHB1ENR_GPIOFEN = 5 + static let AHB1ENR_GPIOGEN = 6 + static let AHB1ENR_GPIOHEN = 7 + static let AHB1ENR_GPIOIEN = 8 + static let AHB1ENR_GPIOJEN = 9 + static let AHB1ENR_GPIOKEN = 10 + } + + static func AHB1ENRBit(for bank: GPIOBank) -> Int { + return switch bank { + case .a: Bits.AHB1ENR_GPIOAEN + case .b: Bits.AHB1ENR_GPIOBEN + case .c: Bits.AHB1ENR_GPIOCEN + case .d: Bits.AHB1ENR_GPIODEN + case .e: Bits.AHB1ENR_GPIOEEN + case .f: Bits.AHB1ENR_GPIOFEN + case .g: Bits.AHB1ENR_GPIOGEN + case .h: Bits.AHB1ENR_GPIOHEN + case .i: Bits.AHB1ENR_GPIOIEN + case .j: Bits.AHB1ENR_GPIOJEN + case .k: Bits.AHB1ENR_GPIOKEN + } } } @@ -73,30 +79,100 @@ enum GPIO { static let PUPDR = 0xc static let IDR = 0x10 static let ODR = 0x14 - static let BSRR = 0x18 - static let LCKR = 0x1c - static let AFRL = 0x20 - static let AFRH = 0x24 - static let BRR = 0x28 } } +#elseif NUCLEO_F103RB + +// Register definitions for STM32F103RB MCU +// https://www.st.com/resource/en/reference_manual/rm0008-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf + +enum GPIOBank: Int { + case a, b, c, d, e, f, g +} +typealias GPIOPin = Int + +enum RCC { + static let BaseAddress = UnsafeMutablePointer(bitPattern: 0x40021000 as UInt)! + enum Offsets { + static let APB2ENR = 0x18 + } + enum Bits { + static let APB2ENR_IOPAEN = 2 + static let APB2ENR_IOPBEN = 3 + static let APB2ENR_IOPCEN = 4 + static let APB2ENR_IOPDEN = 5 + static let APB2ENR_IOPEEN = 6 + static let APB2ENR_IOPFEN = 7 + static let APB2ENR_IOPGEN = 8 + } + + static func APB2ENRBit(for bank: GPIOBank) -> Int { + return switch bank { + case .a: Bits.APB2ENR_IOPAEN + case .b: Bits.APB2ENR_IOPBEN + case .c: Bits.APB2ENR_IOPCEN + case .d: Bits.APB2ENR_IOPDEN + case .e: Bits.APB2ENR_IOPEEN + case .f: Bits.APB2ENR_IOPFEN + case .g: Bits.APB2ENR_IOPGEN + } + } +} + +enum GPIO { + static let GPIOa_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40010800 as UInt)! + static let GPIOb_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40010c00 as UInt)! + static let GPIOc_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40011000 as UInt)! + static let GPIOd_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40011400 as UInt)! + static let GPIOe_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40011800 as UInt)! + static let GPIOf_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40011c00 as UInt)! + static let GPIOg_BaseAddress = UnsafeMutablePointer(bitPattern: 0x40012000 as UInt)! + + static func GPIOBaseAddress(for bank: GPIOBank) -> UnsafeMutablePointer { + return switch bank { + case .a: GPIOa_BaseAddress + case .b: GPIOb_BaseAddress + case .c: GPIOc_BaseAddress + case .d: GPIOd_BaseAddress + case .e: GPIOe_BaseAddress + case .f: GPIOf_BaseAddress + case .g: GPIOg_BaseAddress + } + } + + enum Offsets { + static let CRL = 0x0 + static let CRH = 0x4 + static let IDR = 0x8 + static let ODR = 0xc + } +} + +#else + +#error("Unknown board") + +#endif + func setRegisterBit(baseAddress: UnsafeMutablePointer, offset: Int, bit: Int, value: Int) { precondition(offset % 4 == 0) precondition(bit >= 0 && bit < 32) precondition(value >= 0 && value < 2) let p = baseAddress.advanced(by: offset / 4) - let previousValue: UInt32 = p.volatileLoad() + let m = VolatileMappedRegister(unsafeBitPattern: UInt(bitPattern: p)) + let previousValue: UInt32 = m.load() let newValue: UInt32 = previousValue & ~(1 << UInt32(bit)) | (UInt32(value) << UInt32(bit)) - p.volatileStore(newValue) + m.store(newValue) } func setRegisterTwoBitField(baseAddress: UnsafeMutablePointer, offset: Int, bitsStartingAt: Int, value: Int) { precondition(offset % 4 == 0) - precondition(bitsStartingAt >= 0 && bitsStartingAt < 16) + precondition(bitsStartingAt >= 0 && bitsStartingAt < 31) precondition(value >= 0 && value < 4) let p = baseAddress.advanced(by: offset / 4) - let previousValue: UInt32 = p.volatileLoad() + let m = VolatileMappedRegister(unsafeBitPattern: UInt(bitPattern: p)) + let previousValue: UInt32 = m.load() let newValue: UInt32 = previousValue & ~(0b11 << UInt32(bitsStartingAt)) | (UInt32(value) << UInt32(bitsStartingAt)) - p.volatileStore(newValue) + m.store(newValue) } diff --git a/stm32-blink/Startup.c b/stm32-blink/Startup.c index 16ea6367..9237afb1 100644 --- a/stm32-blink/Startup.c +++ b/stm32-blink/Startup.c @@ -22,9 +22,16 @@ void interrupt(void) { while (1) {} } -__attribute((used)) __attribute((section("__VECTORS,__text"))) +__attribute((used)) +#if defined(__ELF__) +__attribute((section(".vectors"))) +#elif defined(__MACH__) +__attribute((section("__VECTORS,__text"))) +#else +#error Unknown file format +#endif void *vector_table[114] = { - (void *)0x2000fffc, // initial SP + (void *)0x20001ffc, // initial SP, assume we have 8 KB of SRAM reset, // Reset interrupt, // NMI diff --git a/stm32-blink/build-elf.sh b/stm32-blink/build-elf.sh new file mode 100755 index 00000000..afd9413e --- /dev/null +++ b/stm32-blink/build-elf.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -vex + +# Determine file paths +REPOROOT=$(realpath -- "$(dirname "${BASH_SOURCE[0]}")")/.. +TOOLSROOT="$REPOROOT/Tools" +SRCROOT="$REPOROOT/stm32-blink" +BUILDROOT="$SRCROOT/.build" + +# Clean the build directory +rm -r "$BUILDROOT" || true + +# Setup tools and build flags +TARGET=armv7em-none-none-eabi + +if [[ ! "$STM_BOARD" ]] ; then + echo "STM_BOARD must be set to STM32F746G_DISCOVERY or NUCLEO_F103RB" + exit 1 +fi + +SWIFT_EXEC=${SWIFT_EXEC:-$(which swiftc)} +SWIFT_FLAGS="-target $TARGET -Osize" +SWIFT_FLAGS+=" -import-bridging-header $SRCROOT/BridgingHeader.h -wmo -enable-experimental-feature Embedded" +SWIFT_FLAGS+=" -Xfrontend -function-sections -D${STM_BOARD}" + +CLANG_EXEC=${CLANG_EXEC:-$(which clang)} +CLANG_FLAGS="-target $TARGET -Oz" + +LD_EXEC=${LD_EXEC:-$CLANG_EXEC} +LD_FLAGS="-target $TARGET -fuse-ld=lld -nostdlib -static -Wl,-e,vector_table -Wl,--gc-sections -Wl,-T,$SRCROOT/elf-linkerscript.ld" + +# Create build directory +mkdir -p "$BUILDROOT" + +# Build Swift sources +# shellcheck disable=SC2086 # intentional splitting +"$SWIFT_EXEC" $SWIFT_FLAGS -c $SRCROOT/*.swift -o "$BUILDROOT/blink.o" + +# Build C sources +# shellcheck disable=SC2086 # intentional splitting +"$CLANG_EXEC" $CLANG_FLAGS -c "$SRCROOT/Startup.c" -o "$BUILDROOT/Startup.o" + +# Link objects into executable +# shellcheck disable=SC2086 # intentional splitting +"$LD_EXEC" $LD_FLAGS "$BUILDROOT/blink.o" "$BUILDROOT/Startup.o" -o "$BUILDROOT/blink.elf" + +# Convert to Intel HEX for flashing +"$TOOLSROOT"/elf2hex.py "$BUILDROOT/blink.elf" "$BUILDROOT/blink.hex" + +# Echo final binary path +ls -al "$BUILDROOT/blink.hex" diff --git a/stm32-blink/build-macho.sh b/stm32-blink/build-macho.sh new file mode 100755 index 00000000..b45c44cc --- /dev/null +++ b/stm32-blink/build-macho.sh @@ -0,0 +1,56 @@ +#!/bin/bash + +set -vex + +# Determine file paths +REPOROOT=$(git rev-parse --show-toplevel) +TOOLSROOT="$REPOROOT/Tools" +SRCROOT="$REPOROOT/stm32-blink" +BUILDROOT="$SRCROOT/.build" + +# Clean the build directory +rm -r "$BUILDROOT" || true + +# Setup tools and build flags +TARGET=armv7em-apple-none-macho + +if [[ ! "$STM_BOARD" ]] ; then + echo "STM_BOARD must be set to STM32F746G_DISCOVERY or NUCLEO_F103RB" + exit 1 +fi + +SWIFT_EXEC=${SWIFT_EXEC:-$(xcrun -f swiftc)} +SWIFT_FLAGS="-target $TARGET -Osize" +SWIFT_FLAGS+=" -import-bridging-header $SRCROOT/BridgingHeader.h -wmo -enable-experimental-feature Embedded" +SWIFT_FLAGS+=" -Xcc -D__APPLE__ -Xcc -D__MACH__ -Xcc -ffreestanding" +SWIFT_FLAGS+=" -D${STM_BOARD}" + +CLANG_EXEC=${CLANG_EXEC:-$(xcrun -f clang)} +CLANG_FLAGS="-target $TARGET -Oz" + +LD_EXEC=${LD_EXEC:-$CLANG_EXEC} +LD_FLAGS="-target $TARGET -nostdlib -static -Wl,-e,_reset -dead_strip -Wl,-no_zero_fill_sections -Wl,-segalign,4 -Wl,-segaddr,__VECTORS,0x08000000 -Wl,-seg1addr,0x08000200 -Wl,-pagezero_size,0" + +PYTHON_EXEC=${PYTHON_EXEC:-$(xcrun -f python3)} +MACHO2BIN="$TOOLSROOT/macho2bin.py" + +# Create build directory +mkdir -p "$BUILDROOT" + +# Build Swift sources +# shellcheck disable=SC2086 # intentional splitting +"$SWIFT_EXEC" $SWIFT_FLAGS -c "$SRCROOT/"*.swift -o "$BUILDROOT/blink.o" + +# Build C sources +# shellcheck disable=SC2086 # intentional splitting +"$CLANG_EXEC" $CLANG_FLAGS -c "$SRCROOT/Startup.c" -o "$BUILDROOT/Startup.o" + +# Link objects into executable +# shellcheck disable=SC2086 # intentional splitting +"$LD_EXEC" $LD_FLAGS "$BUILDROOT/blink.o" "$BUILDROOT/Startup.o" -o "$BUILDROOT/blink" + +# Extract sections from executable into flashable binary +"$PYTHON_EXEC" "$MACHO2BIN" "$BUILDROOT/blink" "$BUILDROOT/blink.bin" --base-address 0x08000000 --segments '__TEXT,__DATA,__VECTORS' + +# Echo final binary path +ls -al "$BUILDROOT/blink.bin" diff --git a/stm32-blink/build.sh b/stm32-blink/build.sh deleted file mode 100755 index adc54c8c..00000000 --- a/stm32-blink/build.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -set -vex - -# Determine file paths -REPOROOT=$(git rev-parse --show-toplevel) -TOOLSROOT="$REPOROOT/Tools" -SRCROOT="$REPOROOT/stm32-blink" -BUILDROOT="$SRCROOT/.build" - -# Setup tools and build flags -TARGET=armv7-apple-none-macho - -SWIFT_EXEC=${SWIFT_EXEC:-$(xcrun -f swiftc)} -SWIFT_FLAGS="-target $TARGET -Osize -import-bridging-header $SRCROOT/BridgingHeader.h -wmo -enable-experimental-feature Embedded -Xcc -D__APPLE__ -Xcc -D__MACH__ -Xcc -ffreestanding" - -CLANG_EXEC=${CLANG_EXEC:-$(xcrun -f clang)} -CLANG_FLAGS="-target $TARGET -Oz" - -LD_EXEC=${LD_EXEC:-$CLANG_EXEC} -LD_FLAGS="-target $TARGET -nostdlib -static -Wl,-e,_reset -dead_strip -Wl,-no_zero_fill_sections -Wl,-segalign,4 -Wl,-segaddr,__VECTORS,0x00200000 -Wl,-seg1addr,0x00200200 -Wl,-pagezero_size,0" - -PYTHON_EXEC=${PYTHON_EXEC:-$(xcrun -f python3)} -MACHO2BIN="$TOOLSROOT/macho2bin.py" - -# Create build directory -mkdir -p "$BUILDROOT" - -# Build Swift sources -"$SWIFT_EXEC" "$SWIFT_FLAGS" -c "$SRCROOT/*.swift" -o "$BUILDROOT/blink.o" - -# Build C sources -"$CLANG_EXEC" "$CLANG_FLAGS" -c "$SRCROOT/Startup.c" -o "$BUILDROOT/Startup.o" - -# Link objects into executable -"$LD_EXEC" "$LD_FLAGS" "$BUILDROOT/blink.o" "$BUILDROOT/Startup.o" -o "$BUILDROOT/blink" - -# Extract sections from executable into flashable binary -"$PYTHON_EXEC" "$MACHO2BIN" "$BUILDROOT/blink" "$BUILDROOT/blink.bin" --base-address 0x00200000 --segments '__TEXT,__DATA,__VECTORS' - -# Echo final binary path -ls -al "$BUILDROOT/blink.bin" diff --git a/stm32-blink/elf-linkerscript.ld b/stm32-blink/elf-linkerscript.ld new file mode 100644 index 00000000..98d5f00a --- /dev/null +++ b/stm32-blink/elf-linkerscript.ld @@ -0,0 +1,13 @@ +MEMORY +{ + flash : ORIGIN = 0x08000000, LENGTH = 32K + sram : ORIGIN = 0x20000000, LENGTH = 8K +} + +SECTIONS +{ + .text : { *(.vectors*) ; *(.text*) } > flash + .bss : { *(.bss*) } > sram + .data : { *(.data*) } > sram + /DISCARD/ : { *(.swift_modhash*) } +} diff --git a/stm32-lcd-logo/Main.swift b/stm32-lcd-logo/Main.swift deleted file mode 100644 index fa8d1803..00000000 --- a/stm32-lcd-logo/Main.swift +++ /dev/null @@ -1,66 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -@main -struct Main { - static func main() { - var board = STM32F746Board() - - let blink = { - board.ledOn() - board.delay(milliseconds: 10) - board.ledOff() - board.delay(milliseconds: 20) - } - - board.delay(milliseconds: 10) - - let maxLogoPosition = Point( - x: board.displaySize.width - board.logoLayerSize.width, - y: board.displaySize.height - board.logoLayerSize.height) - - var logoPosition = Point(x: 100, y: 0) - board.moveLogo(to: logoPosition) - - var logoDelta = Point(x: 1, y: 1) - - var iteration = 0 - - while true { - board.delay(milliseconds: 10) - - logoPosition = logoPosition.offset(by: logoDelta) - board.moveLogo(to: logoPosition) - - if logoPosition.x <= 0 || logoPosition.x >= maxLogoPosition.x { - logoDelta.x *= -1 - } - if logoPosition.y <= 0 || logoPosition.y >= maxLogoPosition.y { - logoDelta.y *= -1 - } - - if iteration % 16 == 0 { blink() } - - let backgroundGray: Int - if iteration % 512 < 256 { - backgroundGray = iteration % 256 - } else if iteration % 512 == 256 { - backgroundGray = 255 - } else { - backgroundGray = (512 - (iteration % 512)) % 256 - } - board.setBackgroundColor( - color: Color(r: backgroundGray, g: backgroundGray, b: backgroundGray)) - - iteration += 1 - } - } -} diff --git a/stm32-lcd-logo/Makefile b/stm32-lcd-logo/Makefile index 4bda625a..b04fafbd 100644 --- a/stm32-lcd-logo/Makefile +++ b/stm32-lcd-logo/Makefile @@ -9,53 +9,47 @@ ## ##===----------------------------------------------------------------------===## -# Determine file paths -REPOROOT := $(shell git rev-parse --show-toplevel) -TOOLSROOT := $(REPOROOT)/Tools -SRCROOT := $(REPOROOT)/stm32-lcd-logo -BUILDROOT := $(SRCROOT)/.build - -# Setup tools and build flags -TARGET := armv7-apple-none-macho -BASEADDRESS := 0x00200000 - -SWIFT_EXEC := $(shell xcrun -f swiftc) -SWIFT_FLAGS := -target $(TARGET) -Osize -import-bridging-header $(SRCROOT)/Support/BridgingHeader.h -wmo -enable-experimental-feature Embedded -Xcc -D__APPLE__ -Xcc -D__MACH__ -Xcc -ffreestanding - -CLANG_EXEC := $(shell xcrun -f clang) -CLANG_FLAGS := -target $(TARGET) -Oz - -LD_EXEC := $(CLANG_EXEC) -LD_FLAGS := -target $(TARGET) -static -Wl,-e,_reset -dead_strip -Wl,-no_zero_fill_sections -Wl,-segalign,4 -Wl,-segaddr,__VECTORS,0x00200000 -Wl,-seg1addr,0x00200200 -Wl,-pagezero_size,0 - -PYTHON_EXEC := $(shell xcrun -f python3) -MACHO2BIN := $(TOOLSROOT)/macho2bin.py - -.PHONY: all -all: $(BUILDROOT)/lcd-logo.bin - -$(BUILDROOT): - # Create build directory - mkdir -p $(BUILDROOT) - -$(BUILDROOT)/lcd-logo.o: $(SRCROOT)/Main.swift $(SRCROOT)/Support/*.swift | $(BUILDROOT) - # Build Swift sources - $(SWIFT_EXEC) $(SWIFT_FLAGS) -c $^ -o $@ - -$(BUILDROOT)/Startup.o: $(SRCROOT)/Support/Startup.c | $(BUILDROOT) - # Build C sources - $(CLANG_EXEC) $(CLANG_FLAGS) -c $^ -o $@ - -$(BUILDROOT)/PixelData.o: $(SRCROOT)/Support/PixelData.c | $(BUILDROOT) - # Build C sources - $(CLANG_EXEC) $(CLANG_FLAGS) -c $^ -o $@ - -$(BUILDROOT)/lcd-logo: $(BUILDROOT)/lcd-logo.o $(BUILDROOT)/Startup.o $(BUILDROOT)/PixelData.o - # Link objects into executable - $(LD_EXEC) $(LD_FLAGS) $^ -o $@ - -$(BUILDROOT)/lcd-logo.bin: $(BUILDROOT)/lcd-logo - # Extract sections from executable into flashable binary - $(PYTHON_EXEC) $(MACHO2BIN) $^ $@ --base-address 0x00200000 --segments '__TEXT,__DATA,__VECTORS' - # Echo final binary path - ls -al $(BUILDROOT)/lcd-logo.bin +# Paths +REPOROOT := $(shell git rev-parse --show-toplevel) +TOOLSROOT := $(REPOROOT)/Tools +TOOLSET := $(TOOLSROOT)/Toolsets/stm32f74x-lcd.json +MACHO2BIN := $(TOOLSROOT)/macho2bin.py +SWIFT_BUILD := swift build + +# Flags +ARCH := armv7em +TARGET := $(ARCH)-apple-none-macho +SWIFT_BUILD_ARGS := \ + --configuration release \ + --triple $(TARGET) \ + --toolset $(TOOLSET) \ + --disable-local-rpath +BUILDROOT := $(shell $(SWIFT_BUILD) $(SWIFT_BUILD_ARGS) --show-bin-path) + +.PHONY: build +build: + @echo "building..." + $(SWIFT_BUILD) \ + $(SWIFT_BUILD_ARGS) \ + -Xlinker -map -Xlinker $(BUILDROOT)/Application.mangled.map \ + --verbose + + @echo "demangling linker map..." + cat $(BUILDROOT)/Application.mangled.map \ + | c++filt | swift demangle > $(BUILDROOT)/Application.map + + @echo "disassembling..." + otool \ + -arch $(ARCH) -v -V -d -t \ + $(BUILDROOT)/Application \ + | c++filt | swift demangle > $(BUILDROOT)/Application.disassembly + + @echo "extracting binary..." + $(MACHO2BIN) \ + $(BUILDROOT)/Application $(BUILDROOT)/Application.bin --base-address 0x00200000 --segments '__TEXT,__DATA,__VECTORS' + +.PHONY: clean +clean: + @echo "cleaning..." + @swift package clean + @rm -rf .build diff --git a/stm32-lcd-logo/Package.resolved b/stm32-lcd-logo/Package.resolved new file mode 100644 index 00000000..a1112472 --- /dev/null +++ b/stm32-lcd-logo/Package.resolved @@ -0,0 +1,33 @@ +{ + "originHash" : "5728b1ec253c3300a921ee6ddc3c43ff685abaa7f6ca8d86433af91b7883bf79", + "pins" : [ + { + "identity" : "swift-argument-parser", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-argument-parser.git", + "state" : { + "revision" : "41982a3656a71c768319979febd796c6fd111d5c", + "version" : "1.5.0" + } + }, + { + "identity" : "swift-mmio", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-mmio", + "state" : { + "branch" : "main", + "revision" : "daf25ecacc0d9b71036c6af32cb7786a01802799" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/swiftlang/swift-syntax.git", + "state" : { + "revision" : "0687f71944021d616d34d922343dcef086855920", + "version" : "600.0.1" + } + } + ], + "version" : 3 +} diff --git a/stm32-lcd-logo/Package.swift b/stm32-lcd-logo/Package.swift new file mode 100644 index 00000000..846e699b --- /dev/null +++ b/stm32-lcd-logo/Package.swift @@ -0,0 +1,28 @@ +// swift-tools-version: 6.2 + +import PackageDescription + +let package = Package( + name: "stm32-lcd-logo", + platforms: [ + .macOS(.v10_15) + ], + products: [ + .executable(name: "Application", targets: ["Application"]) + ], + dependencies: [ + .package(url: "https://github.com/apple/swift-mmio", branch: "main") + ], + targets: [ + // SVD2Swift \ + // --input Tools/SVDs/stm32f7x6.patched.svd \ + // --output stm32-lcd-logo/Sources/STM32F7x6 \ + // --peripherals FLASH GPIOA GPIOB GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH GPIOI GPIOJ GPIOK LTDC RCC + .executableTarget( + name: "Application", + dependencies: [ + .product(name: "MMIO", package: "swift-mmio"), + "Support", + ]), + .target(name: "Support"), + ]) diff --git a/stm32-lcd-logo/Sources/Application/Geometry/Color.swift b/stm32-lcd-logo/Sources/Application/Geometry/Color.swift new file mode 100644 index 00000000..c553d8f2 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Geometry/Color.swift @@ -0,0 +1,18 @@ +// +// Color.swift +// stm32-lcd-logo +// +// Created by Rauhul Varma on 3/12/25. +// + +struct Color { + var red: UInt8 + var green: UInt8 + var blue: UInt8 +} + +extension Color { + static func gray(_ value: UInt8) -> Color { + Color(red: value, green: value, blue: value) + } +} diff --git a/stm32-lcd-logo/Sources/Application/Geometry/Point.swift b/stm32-lcd-logo/Sources/Application/Geometry/Point.swift new file mode 100644 index 00000000..7f3a9944 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Geometry/Point.swift @@ -0,0 +1,15 @@ +// +// Point.swift +// stm32-lcd-logo +// +// Created by Rauhul Varma on 3/12/25. +// + +struct Point { + var x: Int + var y: Int + + func offset(by: Point) -> Point { + Point(x: x + by.x, y: y + by.y) + } +} diff --git a/stm32-lcd-logo/Sources/Application/Geometry/Size.swift b/stm32-lcd-logo/Sources/Application/Geometry/Size.swift new file mode 100644 index 00000000..30688054 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Geometry/Size.swift @@ -0,0 +1,11 @@ +// +// Size.swift +// stm32-lcd-logo +// +// Created by Rauhul Varma on 3/12/25. +// + +struct Size { + var width: Int + var height: Int +} diff --git a/stm32-lcd-logo/Sources/Application/HAL/GPIOA+Helpers.swift b/stm32-lcd-logo/Sources/Application/HAL/GPIOA+Helpers.swift new file mode 100644 index 00000000..1348a90a --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/HAL/GPIOA+Helpers.swift @@ -0,0 +1,122 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +extension GPIOA { + public enum Port: Int { + case a, b, c, d, e, f, g, h, i, j, k + } + + enum Mode: UInt32 { + case input = 0x0 + case output = 0x1 + case alternateFunction = 0x2 + case analog = 0x3 + } + + enum OutputType: UInt32 { + case pushPull = 0x0 + case openDrain = 0x1 + } + + enum OutputSpeed: UInt32 { + case low = 0x0 + case medium = 0x1 + case high = 0x2 + case max = 0x3 + } + + enum Pull: UInt32 { + case `none` = 0x0 + case up = 0x1 + case down = 0x2 + } + + struct Configuration { + var mode: Mode + var outputType: OutputType + var outputSpeed: OutputSpeed + var pull: Pull + var alternateFunction: UInt32 + } + + func configure(pin: Int, as configuration: Configuration) { + self.moder.modify { rw in + rw.raw.storage.set( + value: configuration.mode.rawValue, + mask: 0b11, + offset: pin * 2) + } + + // Comprised of 16 x 1 bit fields. + self.otyper.modify { rw in + rw.raw.storage.set( + value: configuration.outputType.rawValue, + mask: 0b1, + offset: pin) + } + + // Comprised of 16 x 2 bit fields. + self.ospeedr.modify { rw in + rw.raw.storage.set( + value: configuration.outputSpeed.rawValue, + mask: 0b11, + offset: pin * 2) + } + + // Comprised of 16 x 2 bit fields. + self.pupdr.modify { rw in + rw.raw.storage.set( + value: configuration.pull.rawValue, + mask: 0b11, + offset: pin * 2) + } + + // Comprised of 16 x 4 bit fields, split across 2 registers. + if pin < 8 { + self.afrl.modify { rw in + rw.raw.storage.set( + value: configuration.alternateFunction, + mask: 0b1111, + offset: pin * 4) + } + } else { + self.afrh.modify { rw in + rw.raw.storage.set( + value: configuration.alternateFunction, + mask: 0b1111, + offset: (pin - 8) * 4) + } + } + } + + func set(pin: Int, to value: Bool) { + // Lower 16 bits are set, upper 16 bits are reset. + if value { + self.bsrr.write { $0.raw.storage = 1 << pin } + } else { + self.bsrr.write { $0.raw.storage = 1 << (pin + 16) } + } + } +} + +extension UInt32 { + fileprivate func get(mask: Self, offset: UInt8) -> Self { + let mask = mask &<< offset + return (self & mask) &>> offset + } + + fileprivate mutating func set(value: Self, mask: Self, offset: Int) { + let mask = mask &<< offset + let oldValue: UInt32 = self & ~mask + let newValue: UInt32 = (value &<< offset) & mask + self = oldValue | newValue + } +} diff --git a/stm32-lcd-logo/Sources/Application/HAL/LTDC+Helpers.swift b/stm32-lcd-logo/Sources/Application/HAL/LTDC+Helpers.swift new file mode 100644 index 00000000..b45019ca --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/HAL/LTDC+Helpers.swift @@ -0,0 +1,227 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2024 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +import Support + +extension LTDC { + enum Constants { + static let hsync = 30 + static let vsync = 10 + static let hbp = 13 + static let hfp = 32 + static let vbp = 2 + static let vfp = 2 + + static let pixelSize = 4 + + static let displayWidth = 480 + static let displayHeight = 272 + + static let layerWidth = 50 + static let layerHeight = 50 + } + + func configure() { + rcc.pllcfgr.write { + $0.raw.pllm = 25 + $0.raw.plln = 432 + $0.pllsrc = .HSE + } + + rcc.cr.modify { $1.raw.pllon = 1 } + while rcc.cr.read().raw.pllrdy != 1 {} + + // FIXME: use named fields + rcc.cfgr.modify { + $0.raw.storage &= 0b11 + $0.raw.storage |= 0b10 + } + while rcc.cfgr.read().raw.storage & 0b1100 != 0b1000 {} + + rcc.pllsaicfgr.modify { + $0.raw.pllsain = 192 + $0.raw.pllsair = 5 + } + rcc.dckcfgr1.modify { $0.pllsaidivr = .Div4 } + + rcc.cr.modify { $1.raw.pllsaion = 1 } + while rcc.cr.read().raw.pllsairdy != 1 {} + + rcc.enableGPIOPortClock(.a) + rcc.enableGPIOPortClock(.b) + rcc.enableGPIOPortClock(.c) + rcc.enableGPIOPortClock(.d) + rcc.enableGPIOPortClock(.e) + rcc.enableGPIOPortClock(.f) + rcc.enableGPIOPortClock(.g) + rcc.enableGPIOPortClock(.h) + rcc.enableGPIOPortClock(.i) + rcc.enableGPIOPortClock(.j) + rcc.enableGPIOPortClock(.k) + + let pinConfiguration = GPIOA.Configuration( + mode: .alternateFunction, + outputType: .pushPull, + outputSpeed: .high, + pull: .none, + alternateFunction: 14) + + let clkPin = 14 + let dePin = 7 + let hsyncPin = 10 + let vsyncPin = 9 + + gpioi.configure(pin: clkPin, as: pinConfiguration) + gpiok.configure(pin: dePin, as: pinConfiguration) + gpioi.configure(pin: hsyncPin, as: pinConfiguration) + gpioi.configure(pin: vsyncPin, as: pinConfiguration) + + let r0Pin = 15 + let r1Pin = 0 + let r2Pin = 1 + let r3Pin = 2 + let r4Pin = 3 + let r5Pin = 4 + let r6Pin = 5 + let r7Pin = 6 + + gpioi.configure(pin: r0Pin, as: pinConfiguration) + gpioj.configure(pin: r1Pin, as: pinConfiguration) + gpioj.configure(pin: r2Pin, as: pinConfiguration) + gpioj.configure(pin: r3Pin, as: pinConfiguration) + gpioj.configure(pin: r4Pin, as: pinConfiguration) + gpioj.configure(pin: r5Pin, as: pinConfiguration) + gpioj.configure(pin: r6Pin, as: pinConfiguration) + gpioj.configure(pin: r7Pin, as: pinConfiguration) + + let g0Pin = 7 + let g1Pin = 8 + let g2Pin = 9 + let g3Pin = 10 + let g4Pin = 11 + let g5Pin = 0 + let g6Pin = 1 + let g7Pin = 2 + + gpioj.configure(pin: g0Pin, as: pinConfiguration) + gpioj.configure(pin: g1Pin, as: pinConfiguration) + gpioj.configure(pin: g2Pin, as: pinConfiguration) + gpioj.configure(pin: g3Pin, as: pinConfiguration) + gpioj.configure(pin: g4Pin, as: pinConfiguration) + gpiok.configure(pin: g5Pin, as: pinConfiguration) + gpiok.configure(pin: g6Pin, as: pinConfiguration) + gpiok.configure(pin: g7Pin, as: pinConfiguration) + + let b0Pin = 4 + let b1Pin = 13 + let b2Pin = 14 + let b3Pin = 15 + let b4Pin = 12 + let b5Pin = 4 + let b6Pin = 5 + let b7Pin = 6 + + gpioe.configure(pin: b0Pin, as: pinConfiguration) + gpioj.configure(pin: b1Pin, as: pinConfiguration) + gpioj.configure(pin: b2Pin, as: pinConfiguration) + gpioj.configure(pin: b3Pin, as: pinConfiguration) + gpiog.configure(pin: b4Pin, as: pinConfiguration) + gpiok.configure(pin: b5Pin, as: pinConfiguration) + gpiok.configure(pin: b6Pin, as: pinConfiguration) + gpiok.configure(pin: b7Pin, as: pinConfiguration) + + let lcdPinConfiguration = GPIOA.Configuration( + mode: .output, + outputType: .pushPull, + outputSpeed: .low, + pull: .down, + alternateFunction: 0) + + let backlightPin = 3 + let lcdDispPin = 12 + + gpiok.configure(pin: backlightPin, as: lcdPinConfiguration) + gpioi.configure(pin: lcdDispPin, as: lcdPinConfiguration) + + gpioi.set(pin: lcdDispPin, to: true) + gpiok.set(pin: backlightPin, to: true) + + rcc.apb2enr.modify { $0.raw.ltdcen = 1 } + + self.sscr.modify { $0.raw.vsh = UInt32(Constants.vsync - 1) } + self.sscr.modify { $0.raw.hsw = UInt32(Constants.hsync - 1) } + self.bpcr.modify { + $0.raw.ahbp = UInt32(Constants.hsync + Constants.hbp - 1) + } + self.bpcr.modify { + $0.raw.avbp = UInt32(Constants.vsync + Constants.vbp - 1) + } + self.awcr.modify { + $0.raw.aah = UInt32( + Constants.displayHeight + Constants.vsync + Constants.vbp - 1) + } + self.awcr.modify { + $0.raw.aaw = UInt32( + Constants.displayWidth + Constants.hsync + Constants.hbp - 1) + } + self.twcr.modify { + $0.raw.totalw = UInt32( + Constants.displayWidth + Constants.hsync + Constants.hbp + Constants.hfp + - 1) + } + self.twcr.modify { + $0.raw.totalh = UInt32( + Constants.displayHeight + Constants.vsync + Constants.vbp + + Constants.vfp - 1) + } + + self.layer[1].pfcr.modify { $0.raw.storage = 0 } // Format ARGB8888 + self.layer[1].cfbar.modify { + $0.raw.storage = UInt32(UInt(bitPattern: logoPixelDataStartPointer)) + } + self.layer[1].cacr.modify { $0.raw.consta = 255 } + self.layer[1].bfcr.modify { $0.raw.bf1 = 5 } + self.layer[1].bfcr.modify { $0.raw.bf2 = 4 } + self.layer[1].cfblr.modify { + $0.raw.storage = + UInt32(UInt32(Constants.pixelSize * Constants.layerWidth) << 16) + | UInt32(Constants.pixelSize * Constants.layerWidth + 3) + } + self.layer[1].cfblnr.modify { + $0.raw.cfblnbr = UInt32(Constants.layerHeight) + } + self.layer[1].cr.modify { $0.raw.len = 1 } + + self.srcr.modify { $0.raw.vbr = 1 } // reload + + self.gcr.modify { $1.raw.ltdcen = 1 } + } + + func set(layer: Int, position point: Point) { + let i: Int = + ((Constants.layerWidth + Constants.hbp + Constants.hsync - 1 + + point.x) << 16) | (Constants.hbp + Constants.hsync + point.x) + self.layer[layer].whpcr.modify { $0.raw.storage = UInt32(i) } + let j: Int = + ((Constants.layerHeight + Constants.vsync + Constants.vbp - 1 + + point.y) << 16) | (Constants.vsync + Constants.vbp + point.y) + self.layer[layer].wvpcr.modify { $0.raw.storage = UInt32(j) } + self.srcr.modify { $0.raw.vbr = 1 } + } + + func set(backgroundColor: Color) { + self.bccr.modify { + $0.raw.bcred = UInt32(backgroundColor.red) + $0.raw.bcgreen = UInt32(backgroundColor.green) + $0.raw.bcblue = UInt32(backgroundColor.blue) + } + } +} diff --git a/stm32-lcd-logo/Sources/Application/HAL/RCC+Helpers.swift b/stm32-lcd-logo/Sources/Application/HAL/RCC+Helpers.swift new file mode 100644 index 00000000..84488921 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/HAL/RCC+Helpers.swift @@ -0,0 +1,53 @@ +extension RCC { + func enableGPIOPortClock(_ port: GPIOA.Port) { + switch port { + case .a: self.ahb1enr.modify { $0.raw.gpioaen = 1 } + case .b: self.ahb1enr.modify { $0.raw.gpioben = 1 } + case .c: self.ahb1enr.modify { $0.raw.gpiocen = 1 } + case .d: self.ahb1enr.modify { $0.raw.gpioden = 1 } + case .e: self.ahb1enr.modify { $0.raw.gpioeen = 1 } + case .f: self.ahb1enr.modify { $0.raw.gpiofen = 1 } + case .g: self.ahb1enr.modify { $0.raw.gpiogen = 1 } + case .h: self.ahb1enr.modify { $0.raw.gpiohen = 1 } + case .i: self.ahb1enr.modify { $0.raw.gpioien = 1 } + case .j: self.ahb1enr.modify { $0.raw.gpiojen = 1 } + case .k: self.ahb1enr.modify { $0.raw.gpioken = 1 } + } + } + + func enableUARTClock(_ uartNum: UInt8) { + switch uartNum { + case 1: self.apb2enr.modify { $0.raw.usart1en = 1 } + case 2: self.apb1enr.modify { $0.raw.usart2en = 1 } + case 3: self.apb1enr.modify { $0.raw.usart3en = 1 } + case 4: self.apb1enr.modify { $0.raw.uart4en = 1 } + case 5: self.apb1enr.modify { $0.raw.uart5en = 1 } + case 6: self.apb2enr.modify { $0.raw.usart6en = 1 } + case 7: self.apb1enr.modify { $0.raw.uart7en = 1 } + case 8: self.apb1enr.modify { $0.raw.uart8en = 1 } + default: fatalError("Invalid UART number") + } + } + + func enableI2CClock(_ i2cNum: UInt8) { + switch i2cNum { + case 1: self.apb1enr.modify { $0.raw.i2c1en = 1 } + case 2: self.apb1enr.modify { $0.raw.i2c2en = 1 } + case 3: self.apb1enr.modify { $0.raw.i2c3en = 1 } + case 4: self.apb1enr.modify { $0.raw.i2c4en = 1 } + default: fatalError("Invalid I2C number") + } + } + + func enableSPIClock(_ spiNum: UInt8) { + switch spiNum { + case 1: self.apb2enr.modify { $0.raw.spi1en = 1 } + case 2: self.apb1enr.modify { $0.raw.spi2en = 1 } + case 3: self.apb1enr.modify { $0.raw.spi3en = 1 } + case 4: self.apb2enr.modify { $0.raw.spi4en = 1 } + case 5: self.apb2enr.modify { $0.raw.spi5en = 1 } + case 6: self.apb2enr.modify { $0.raw.spi6en = 1 } + default: fatalError("Invalid SPI number") + } + } +} diff --git a/stm32-lcd-logo/Sources/Application/Main.swift b/stm32-lcd-logo/Sources/Application/Main.swift new file mode 100644 index 00000000..6cb83c21 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Main.swift @@ -0,0 +1,79 @@ +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2023 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +import Support + +@main +struct Main { + static let logoSize = Size( + width: LTDC.Constants.layerWidth, + height: LTDC.Constants.layerHeight) + static let displaySize = Size( + width: LTDC.Constants.displayWidth, + height: LTDC.Constants.displayHeight) + static let maxLogoPosition = Point( + x: Self.displaySize.width - Self.logoSize.width, + y: Self.displaySize.height - Self.logoSize.height) + + static func main() { + // FIXME: remove sleep hack for some bug in clock configuration + Self.delay(milliseconds: 1) + configureFlash() + initializeLTCD() + ltdc.configure() + + var logoPosition = Point(x: 100, y: 100) + var logoDelta = Point(x: 1, y: 1) + var backgroundGray: UInt8 = .min + var backgroundDelta: Int8 = -1 + + while true { + Self.delay(milliseconds: 10) + + if logoPosition.x <= 0 || logoPosition.x >= maxLogoPosition.x { + logoDelta.x *= -1 + } + if logoPosition.y <= 0 || logoPosition.y >= maxLogoPosition.y { + logoDelta.y *= -1 + } + logoPosition = logoPosition.offset(by: logoDelta) + ltdc.set(layer: 1, position: logoPosition) + + if backgroundGray == .min || backgroundGray == .max { + backgroundDelta *= -1 + } + backgroundGray = UInt8(Int16(backgroundGray) + Int16(backgroundDelta)) + ltdc.set(backgroundColor: .gray(backgroundGray)) + } + } + + static func delay(milliseconds: Int) { + for _ in 0..<100_000 * milliseconds { + nop() + } + } + + static func configureFlash() { + flash.acr.modify { $0.latency = .WS5 } + } + + static func initializeLTCD() { + rcc.cfgr.write { $0.raw.storage = 0 } + rcc.cr.modify { r, w in + w.hsion = .On + w.csson = .Off + w.raw.hseon = 1 + w.raw.pllon = 0 + w.raw.hsebyp = 0 + } + while rcc.cr.read().raw.hserdy == 0 {} + } +} diff --git a/stm32-lcd-logo/Sources/Application/Registers/Device.swift b/stm32-lcd-logo/Sources/Application/Registers/Device.swift new file mode 100644 index 00000000..992bf558 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/Device.swift @@ -0,0 +1,45 @@ +// Generated by svd2swift. + +import MMIO + +/// FLASH +let flash = FLASH(unsafeAddress: 0x40023c00) + +/// General-purpose I/Os +let gpioa = GPIOA(unsafeAddress: 0x40020000) + +/// General-purpose I/Os +let gpiob = GPIOB(unsafeAddress: 0x40020400) + +/// General-purpose I/Os +let gpioc = GPIOC(unsafeAddress: 0x40020800) + +/// General-purpose I/Os +let gpiod = GPIOD(unsafeAddress: 0x40020c00) + +/// General-purpose I/Os +let gpioe = GPIOE(unsafeAddress: 0x40021000) + +/// General-purpose I/Os +let gpiof = GPIOF(unsafeAddress: 0x40021400) + +/// General-purpose I/Os +let gpiog = GPIOG(unsafeAddress: 0x40021800) + +/// General-purpose I/Os +let gpioh = GPIOH(unsafeAddress: 0x40021c00) + +/// General-purpose I/Os +let gpioi = GPIOI(unsafeAddress: 0x40022000) + +/// General-purpose I/Os +let gpioj = GPIOJ(unsafeAddress: 0x40022400) + +/// General-purpose I/Os +let gpiok = GPIOK(unsafeAddress: 0x40022800) + +/// LCD-TFT Controller +let ltdc = LTDC(unsafeAddress: 0x40016800) + +/// Reset and clock control +let rcc = RCC(unsafeAddress: 0x40023800) diff --git a/stm32-lcd-logo/Sources/Application/Registers/FLASH.swift b/stm32-lcd-logo/Sources/Application/Registers/FLASH.swift new file mode 100644 index 00000000..ddca3de8 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/FLASH.swift @@ -0,0 +1,469 @@ +// Generated by svd2swift. + +import MMIO + +/// FLASH +@RegisterBlock +struct FLASH { + /// Flash access control register + @RegisterBlock(offset: 0x0) + var acr: Register + + /// Flash key register + @RegisterBlock(offset: 0x4) + var keyr: Register + + /// Flash option key register + @RegisterBlock(offset: 0x8) + var optkeyr: Register + + /// Status register + @RegisterBlock(offset: 0xc) + var sr: Register + + /// Control register + @RegisterBlock(offset: 0x10) + var cr: Register + + /// Flash option control register + @RegisterBlock(offset: 0x14) + var optcr: Register + + /// Flash option control register 1 + @RegisterBlock(offset: 0x18) + var optcr1: Register +} + +extension FLASH { + /// Flash access control register + @Register(bitWidth: 32) + struct ACR { + /// Latency + @ReadWrite(bits: 0..<4, as: LATENCYValues.self) + var latency: LATENCY + + /// Prefetch enable + @ReadWrite(bits: 8..<9, as: PRFTENValues.self) + var prften: PRFTEN + + /// ART Accelerator Enable + @ReadWrite(bits: 9..<10, as: ARTENValues.self) + var arten: ARTEN + + /// ART Accelerator reset + @ReadWrite(bits: 11..<12, as: ARTRSTValues.self) + var artrst: ARTRST + } + + /// Flash key register + @Register(bitWidth: 32) + struct KEYR { + /// FPEC key + @WriteOnly(bits: 0..<32) + var key: KEY + } + + /// Flash option key register + @Register(bitWidth: 32) + struct OPTKEYR { + /// Option byte key + @WriteOnly(bits: 0..<32) + var optkeyr_field: OPTKEYR_FIELD + } + + /// Status register + @Register(bitWidth: 32) + struct SR { + /// End of operation + @ReadWrite(bits: 0..<1) + var eop: EOP + + /// Operation error + @ReadWrite(bits: 1..<2) + var operr: OPERR + + /// Write protection error + @ReadWrite(bits: 4..<5) + var wrperr: WRPERR + + /// Programming alignment error + @ReadWrite(bits: 5..<6) + var pgaerr: PGAERR + + /// Programming parallelism error + @ReadWrite(bits: 6..<7) + var pgperr: PGPERR + + /// Programming sequence error + @ReadWrite(bits: 7..<8) + var erserr: ERSERR + + /// Busy + @ReadOnly(bits: 16..<17) + var bsy: BSY + } + + /// Control register + @Register(bitWidth: 32) + struct CR { + /// Programming + @ReadWrite(bits: 0..<1, as: PGValues.self) + var pg: PG + + /// Sector Erase + @ReadWrite(bits: 1..<2, as: SERValues.self) + var ser: SER + + /// Mass Erase of sectors 0 to 11 + @ReadWrite(bits: 2..<3, as: MERValues.self) + var mer: MER + + /// Sector number + @ReadWrite(bits: 3..<7) + var snb: SNB + + /// Program size + @ReadWrite(bits: 8..<10, as: PSIZEValues.self) + var psize: PSIZE + + /// Start + @ReadWrite(bits: 16..<17, as: STRTValues.self) + var strt: STRT + + /// End of operation interrupt enable + @ReadWrite(bits: 24..<25, as: EOPIEValues.self) + var eopie: EOPIE + + /// Error interrupt enable + @ReadWrite(bits: 25..<26, as: ERRIEValues.self) + var errie: ERRIE + + /// Lock + @ReadWrite(bits: 31..<32, as: LOCKValues.self) + var lock: LOCK + } + + /// Flash option control register + @Register(bitWidth: 32) + struct OPTCR { + /// Option lock + @ReadWrite(bits: 0..<1) + var optlock: OPTLOCK + + /// Option start + @ReadWrite(bits: 1..<2) + var optstrt: OPTSTRT + + /// BOR reset Level + @ReadWrite(bits: 2..<4) + var bor_lev: BOR_LEV + + /// User option bytes + @ReadWrite(bits: 4..<5) + var wwdg_sw: WWDG_SW + + /// User option bytes + @ReadWrite(bits: 5..<6) + var iwdg_sw: IWDG_SW + + /// User option bytes + @ReadWrite(bits: 6..<7) + var nrst_stop: nRST_STOP + + /// User option bytes + @ReadWrite(bits: 7..<8) + var nrst_stdby: nRST_STDBY + + /// Read protect + @ReadWrite(bits: 8..<16) + var rdp: RDP + + /// Not write protect + @ReadWrite(bits: 16..<24) + var nwrp: nWRP + + /// Independent watchdog counter freeze in standby mode + @ReadWrite(bits: 30..<31) + var iwdg_stdby: IWDG_STDBY + + /// Independent watchdog counter freeze in Stop mode + @ReadWrite(bits: 31..<32) + var iwdg_stop: IWDG_STOP + } + + /// Flash option control register 1 + @Register(bitWidth: 32) + struct OPTCR1 { + /// Boot base address when Boot pin =0 + @ReadWrite(bits: 0..<16) + var boot_add0: BOOT_ADD0 + + /// Boot base address when Boot pin =1 + @ReadWrite(bits: 16..<32) + var boot_add1: BOOT_ADD1 + } +} + +extension FLASH.ACR { + struct LATENCYValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// 0 wait states + static let WS0 = Self(rawValue: 0x0) + + /// 1 wait states + static let WS1 = Self(rawValue: 0x1) + + /// 2 wait states + static let WS2 = Self(rawValue: 0x2) + + /// 3 wait states + static let WS3 = Self(rawValue: 0x3) + + /// 4 wait states + static let WS4 = Self(rawValue: 0x4) + + /// 5 wait states + static let WS5 = Self(rawValue: 0x5) + + /// 6 wait states + static let WS6 = Self(rawValue: 0x6) + + /// 7 wait states + static let WS7 = Self(rawValue: 0x7) + + /// 8 wait states + static let WS8 = Self(rawValue: 0x8) + + /// 9 wait states + static let WS9 = Self(rawValue: 0x9) + + /// 10 wait states + static let WS10 = Self(rawValue: 0xa) + + /// 11 wait states + static let WS11 = Self(rawValue: 0xb) + + /// 12 wait states + static let WS12 = Self(rawValue: 0xc) + + /// 13 wait states + static let WS13 = Self(rawValue: 0xd) + + /// 14 wait states + static let WS14 = Self(rawValue: 0xe) + + /// 15 wait states + static let WS15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.ACR { + struct PRFTENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Prefetch is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Prefetch is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.ACR { + struct ARTENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// ART Accelerator is disabled + static let Disabled = Self(rawValue: 0x0) + + /// ART Accelerator is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.ACR { + struct ARTRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Accelerator is not reset + static let NotReset = Self(rawValue: 0x0) + + /// Accelerator is reset + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct PGValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Flash programming activated + static let Program = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct SERValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Erase activated for selected sector + static let SectorErase = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct MERValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Erase activated for all user sectors + static let MassErase = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct PSIZEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Program x8 + static let PSIZE8 = Self(rawValue: 0x0) + + /// Program x16 + static let PSIZE16 = Self(rawValue: 0x1) + + /// Program x32 + static let PSIZE32 = Self(rawValue: 0x2) + + /// Program x64 + static let PSIZE64 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct STRTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Trigger an erase operation + static let Start = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct EOPIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// End of operation interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// End of operation interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct ERRIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Error interrupt generation disabled + static let Disabled = Self(rawValue: 0x0) + + /// Error interrupt generation enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension FLASH.CR { + struct LOCKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// FLASH_CR register is unlocked + static let Unlocked = Self(rawValue: 0x0) + + /// FLASH_CR register is locked + static let Locked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOA.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOA.swift new file mode 100644 index 00000000..3bc4d2ff --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOA.swift @@ -0,0 +1,1075 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +@RegisterBlock +struct GPIOA { + /// GPIO port mode register + @RegisterBlock(offset: 0x0) + var moder: Register + + /// GPIO port output type register + @RegisterBlock(offset: 0x4) + var otyper: Register + + /// GPIO port output speed register + @RegisterBlock(offset: 0x8) + var ospeedr: Register + + /// GPIO port pull-up/pull-down register + @RegisterBlock(offset: 0xc) + var pupdr: Register + + /// GPIO port input data register + @RegisterBlock(offset: 0x10) + var idr: Register + + /// GPIO port output data register + @RegisterBlock(offset: 0x14) + var odr: Register + + /// GPIO port bit set/reset register + @RegisterBlock(offset: 0x18) + var bsrr: Register + + /// GPIO port configuration lock register + @RegisterBlock(offset: 0x1c) + var lckr: Register + + /// GPIO alternate function low register + @RegisterBlock(offset: 0x20) + var afrl: Register + + /// GPIO alternate function high register + @RegisterBlock(offset: 0x24) + var afrh: Register + + /// GPIO port bit reset register + @RegisterBlock(offset: 0x28) + var brr: Register +} + +extension GPIOA { + /// GPIO port mode register + @Register(bitWidth: 32) + struct MODER { + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 30..<32) + var moder15: MODER15 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 28..<30) + var moder14: MODER14 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 26..<28) + var moder13: MODER13 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 24..<26) + var moder12: MODER12 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 22..<24) + var moder11: MODER11 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 20..<22) + var moder10: MODER10 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 18..<20) + var moder9: MODER9 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 16..<18) + var moder8: MODER8 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 14..<16) + var moder7: MODER7 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 12..<14) + var moder6: MODER6 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 10..<12) + var moder5: MODER5 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 8..<10) + var moder4: MODER4 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 6..<8) + var moder3: MODER3 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 4..<6) + var moder2: MODER2 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 2..<4) + var moder1: MODER1 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 0..<2, as: MODER0Values.self) + var moder0: MODER0 + } + + /// GPIO port output type register + @Register(bitWidth: 32) + struct OTYPER { + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 15..<16) + var ot15: OT15 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 14..<15) + var ot14: OT14 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 13..<14) + var ot13: OT13 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 12..<13) + var ot12: OT12 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 11..<12) + var ot11: OT11 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 10..<11) + var ot10: OT10 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 9..<10) + var ot9: OT9 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 8..<9) + var ot8: OT8 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 7..<8) + var ot7: OT7 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 6..<7) + var ot6: OT6 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 5..<6) + var ot5: OT5 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 4..<5) + var ot4: OT4 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 3..<4) + var ot3: OT3 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 2..<3) + var ot2: OT2 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 1..<2) + var ot1: OT1 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 0..<1, as: OT0Values.self) + var ot0: OT0 + } + + /// GPIO port output speed register + @Register(bitWidth: 32) + struct OSPEEDR { + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 30..<32) + var ospeedr15: OSPEEDR15 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 28..<30) + var ospeedr14: OSPEEDR14 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 26..<28) + var ospeedr13: OSPEEDR13 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 24..<26) + var ospeedr12: OSPEEDR12 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 22..<24) + var ospeedr11: OSPEEDR11 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 20..<22) + var ospeedr10: OSPEEDR10 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 18..<20) + var ospeedr9: OSPEEDR9 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 16..<18) + var ospeedr8: OSPEEDR8 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 14..<16) + var ospeedr7: OSPEEDR7 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 12..<14) + var ospeedr6: OSPEEDR6 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 10..<12) + var ospeedr5: OSPEEDR5 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 8..<10) + var ospeedr4: OSPEEDR4 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 6..<8) + var ospeedr3: OSPEEDR3 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 4..<6) + var ospeedr2: OSPEEDR2 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 2..<4) + var ospeedr1: OSPEEDR1 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 0..<2, as: OSPEEDR0Values.self) + var ospeedr0: OSPEEDR0 + } + + /// GPIO port pull-up/pull-down register + @Register(bitWidth: 32) + struct PUPDR { + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 30..<32) + var pupdr15: PUPDR15 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 28..<30) + var pupdr14: PUPDR14 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 26..<28) + var pupdr13: PUPDR13 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 24..<26) + var pupdr12: PUPDR12 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 22..<24) + var pupdr11: PUPDR11 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 20..<22) + var pupdr10: PUPDR10 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 18..<20) + var pupdr9: PUPDR9 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 16..<18) + var pupdr8: PUPDR8 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 14..<16) + var pupdr7: PUPDR7 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 12..<14) + var pupdr6: PUPDR6 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 10..<12) + var pupdr5: PUPDR5 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 8..<10) + var pupdr4: PUPDR4 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 6..<8) + var pupdr3: PUPDR3 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 4..<6) + var pupdr2: PUPDR2 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 2..<4) + var pupdr1: PUPDR1 + + /// Port x configuration bits (y = 0..15) + @ReadWrite(bits: 0..<2, as: PUPDR0Values.self) + var pupdr0: PUPDR0 + } + + /// GPIO port input data register + @Register(bitWidth: 32) + struct IDR { + /// Port input data (y = 0..15) + @ReadOnly(bits: 15..<16) + var idr15: IDR15 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 14..<15) + var idr14: IDR14 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 13..<14) + var idr13: IDR13 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 12..<13) + var idr12: IDR12 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 11..<12) + var idr11: IDR11 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 10..<11) + var idr10: IDR10 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 9..<10) + var idr9: IDR9 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 8..<9) + var idr8: IDR8 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 7..<8) + var idr7: IDR7 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 6..<7) + var idr6: IDR6 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 5..<6) + var idr5: IDR5 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 4..<5) + var idr4: IDR4 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 3..<4) + var idr3: IDR3 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 2..<3) + var idr2: IDR2 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 1..<2) + var idr1: IDR1 + + /// Port input data (y = 0..15) + @ReadOnly(bits: 0..<1) + var idr0: IDR0 + } + + /// GPIO port output data register + @Register(bitWidth: 32) + struct ODR { + /// Port output data (y = 0..15) + @ReadWrite(bits: 15..<16) + var odr15: ODR15 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 14..<15) + var odr14: ODR14 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 13..<14) + var odr13: ODR13 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 12..<13) + var odr12: ODR12 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 11..<12) + var odr11: ODR11 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 10..<11) + var odr10: ODR10 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 9..<10) + var odr9: ODR9 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 8..<9) + var odr8: ODR8 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 7..<8) + var odr7: ODR7 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 6..<7) + var odr6: ODR6 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 5..<6) + var odr5: ODR5 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 4..<5) + var odr4: ODR4 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 3..<4) + var odr3: ODR3 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 2..<3) + var odr2: ODR2 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 1..<2) + var odr1: ODR1 + + /// Port output data (y = 0..15) + @ReadWrite(bits: 0..<1, as: ODR0Values.self) + var odr0: ODR0 + } + + /// GPIO port bit set/reset register + @Register(bitWidth: 32) + struct BSRR { + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 31..<32) + var br15: BR15 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 30..<31) + var br14: BR14 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 29..<30) + var br13: BR13 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 28..<29) + var br12: BR12 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 27..<28) + var br11: BR11 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 26..<27) + var br10: BR10 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 25..<26) + var br9: BR9 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 24..<25) + var br8: BR8 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 23..<24) + var br7: BR7 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 22..<23) + var br6: BR6 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 21..<22) + var br5: BR5 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 20..<21) + var br4: BR4 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 19..<20) + var br3: BR3 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 18..<19) + var br2: BR2 + + /// Port x reset bit y (y = 0..15) + @WriteOnly(bits: 17..<18) + var br1: BR1 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 16..<17) + var br0: BR0 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 15..<16) + var bs15: BS15 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 14..<15) + var bs14: BS14 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 13..<14) + var bs13: BS13 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 12..<13) + var bs12: BS12 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 11..<12) + var bs11: BS11 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 10..<11) + var bs10: BS10 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 9..<10) + var bs9: BS9 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 8..<9) + var bs8: BS8 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 7..<8) + var bs7: BS7 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 6..<7) + var bs6: BS6 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 5..<6) + var bs5: BS5 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 4..<5) + var bs4: BS4 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 3..<4) + var bs3: BS3 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 2..<3) + var bs2: BS2 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 1..<2) + var bs1: BS1 + + /// Port x set bit y (y= 0..15) + @WriteOnly(bits: 0..<1) + var bs0: BS0 + } + + /// GPIO port configuration lock register + @Register(bitWidth: 32) + struct LCKR { + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 16..<17, as: LCKKValues.self) + var lckk: LCKK + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 15..<16) + var lck15: LCK15 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 14..<15) + var lck14: LCK14 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 13..<14) + var lck13: LCK13 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 12..<13) + var lck12: LCK12 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 11..<12) + var lck11: LCK11 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 10..<11) + var lck10: LCK10 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 9..<10) + var lck9: LCK9 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 8..<9) + var lck8: LCK8 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 7..<8) + var lck7: LCK7 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 6..<7) + var lck6: LCK6 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 5..<6) + var lck5: LCK5 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 4..<5) + var lck4: LCK4 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 3..<4) + var lck3: LCK3 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 2..<3) + var lck2: LCK2 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 1..<2) + var lck1: LCK1 + + /// Port x lock bit y (y= 0..15) + @ReadWrite(bits: 0..<1, as: LCK0Values.self) + var lck0: LCK0 + } + + /// GPIO alternate function low register + @Register(bitWidth: 32) + struct AFRL { + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 28..<32) + var afrl7: AFRL7 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 24..<28) + var afrl6: AFRL6 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 20..<24) + var afrl5: AFRL5 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 16..<20) + var afrl4: AFRL4 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 12..<16) + var afrl3: AFRL3 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 8..<12) + var afrl2: AFRL2 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 4..<8) + var afrl1: AFRL1 + + /// Alternate function selection for port x bit y (y = 0..7) + @ReadWrite(bits: 0..<4, as: AFRL0Values.self) + var afrl0: AFRL0 + } + + /// GPIO alternate function high register + @Register(bitWidth: 32) + struct AFRH { + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 28..<32) + var afrh15: AFRH15 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 24..<28) + var afrh14: AFRH14 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 20..<24) + var afrh13: AFRH13 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 16..<20) + var afrh12: AFRH12 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 12..<16) + var afrh11: AFRH11 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 8..<12) + var afrh10: AFRH10 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 4..<8) + var afrh9: AFRH9 + + /// Alternate function selection for port x bit y (y = 8..15) + @ReadWrite(bits: 0..<4, as: AFRH8Values.self) + var afrh8: AFRH8 + } + + /// GPIO port bit reset register + @Register(bitWidth: 32) + struct BRR { + /// Port A Reset bit 0 + @ReadWrite(bits: 0..<1) + var br0: BR0 + + /// Port A Reset bit 1 + @ReadWrite(bits: 1..<2) + var br1: BR1 + + /// Port A Reset bit 2 + @ReadWrite(bits: 2..<3) + var br2: BR2 + + /// Port A Reset bit 3 + @ReadWrite(bits: 3..<4) + var br3: BR3 + + /// Port A Reset bit 4 + @ReadWrite(bits: 4..<5) + var br4: BR4 + + /// Port A Reset bit 5 + @ReadWrite(bits: 5..<6) + var br5: BR5 + + /// Port A Reset bit 6 + @ReadWrite(bits: 6..<7) + var br6: BR6 + + /// Port A Reset bit 7 + @ReadWrite(bits: 7..<8) + var br7: BR7 + + /// Port A Reset bit 8 + @ReadWrite(bits: 8..<9) + var br8: BR8 + + /// Port A Reset bit 9 + @ReadWrite(bits: 9..<10) + var br9: BR9 + + /// Port A Reset bit 10 + @ReadWrite(bits: 10..<11) + var br10: BR10 + + /// Port A Reset bit 11 + @ReadWrite(bits: 11..<12) + var br11: BR11 + + /// Port A Reset bit 12 + @ReadWrite(bits: 12..<13) + var br12: BR12 + + /// Port A Reset bit 13 + @ReadWrite(bits: 13..<14) + var br13: BR13 + + /// Port A Reset bit 14 + @ReadWrite(bits: 14..<15) + var br14: BR14 + + /// Port A Reset bit 15 + @ReadWrite(bits: 15..<16) + var br15: BR15 + } +} + +extension GPIOA.MODER { + struct MODER0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Input mode (reset state) + static let Input = Self(rawValue: 0x0) + + /// General purpose output mode + static let Output = Self(rawValue: 0x1) + + /// Alternate function mode + static let Alternate = Self(rawValue: 0x2) + + /// Analog mode + static let Analog = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OTYPER { + struct OT0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Output push-pull (reset state) + static let PushPull = Self(rawValue: 0x0) + + /// Output open-drain + static let OpenDrain = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OSPEEDR { + struct OSPEEDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low speed + static let LowSpeed = Self(rawValue: 0x0) + + /// Medium speed + static let MediumSpeed = Self(rawValue: 0x1) + + /// High speed + static let HighSpeed = Self(rawValue: 0x2) + + /// Very high speed + static let VeryHighSpeed = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.PUPDR { + struct PUPDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No pull-up, pull-down + static let Floating = Self(rawValue: 0x0) + + /// Pull-up + static let PullUp = Self(rawValue: 0x1) + + /// Pull-down + static let PullDown = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.ODR { + struct ODR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Set output to logic low + static let Low = Self(rawValue: 0x0) + + /// Set output to logic high + static let High = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCKKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration lock key not active + static let NotActive = Self(rawValue: 0x0) + + /// Port configuration lock key active + static let Active = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCK0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration not locked + static let Unlocked = Self(rawValue: 0x0) + + /// Port configuration locked + static let Locked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRL { + struct AFRL0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRH { + struct AFRH8Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOB.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOB.swift new file mode 100644 index 00000000..c820355f --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOB.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOB = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOC.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOC.swift new file mode 100644 index 00000000..76543eca --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOC.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOC = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOD.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOD.swift new file mode 100644 index 00000000..d54a0d5b --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOD.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOD = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOE.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOE.swift new file mode 100644 index 00000000..08b7facf --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOE.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOE = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOF.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOF.swift new file mode 100644 index 00000000..a0502a12 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOF.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOF = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOG.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOG.swift new file mode 100644 index 00000000..1bfc7fd8 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOG.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOG = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOH.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOH.swift new file mode 100644 index 00000000..3384a586 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOH.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOH = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOI.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOI.swift new file mode 100644 index 00000000..f7e28cc8 --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOI.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOI = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOJ.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOJ.swift new file mode 100644 index 00000000..6e349edb --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOJ.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOJ = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/GPIOK.swift b/stm32-lcd-logo/Sources/Application/Registers/GPIOK.swift new file mode 100644 index 00000000..ca28ed7e --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/GPIOK.swift @@ -0,0 +1,7 @@ +// Generated by svd2swift. + +import MMIO + +/// General-purpose I/Os +typealias GPIOK = GPIOA + diff --git a/stm32-lcd-logo/Sources/Application/Registers/LTDC.swift b/stm32-lcd-logo/Sources/Application/Registers/LTDC.swift new file mode 100644 index 00000000..bbbe2dbe --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/LTDC.swift @@ -0,0 +1,847 @@ +// Generated by svd2swift. + +import MMIO + +/// LCD-TFT Controller +@RegisterBlock +struct LTDC { + /// Synchronization Size Configuration Register + @RegisterBlock(offset: 0x8) + var sscr: Register + + /// Back Porch Configuration Register + @RegisterBlock(offset: 0xc) + var bpcr: Register + + /// Active Width Configuration Register + @RegisterBlock(offset: 0x10) + var awcr: Register + + /// Total Width Configuration Register + @RegisterBlock(offset: 0x14) + var twcr: Register + + /// Global Control Register + @RegisterBlock(offset: 0x18) + var gcr: Register + + /// Shadow Reload Configuration Register + @RegisterBlock(offset: 0x24) + var srcr: Register + + /// Background Color Configuration Register + @RegisterBlock(offset: 0x2c) + var bccr: Register + + /// Interrupt Enable Register + @RegisterBlock(offset: 0x34) + var ier: Register + + /// Interrupt Status Register + @RegisterBlock(offset: 0x38) + var isr: Register + + /// Interrupt Clear Register + @RegisterBlock(offset: 0x3c) + var icr: Register + + /// Line Interrupt Position Configuration Register + @RegisterBlock(offset: 0x40) + var lipcr: Register + + /// Current Position Status Register + @RegisterBlock(offset: 0x44) + var cpsr: Register + + /// Current Display Status Register + @RegisterBlock(offset: 0x48) + var cdsr: Register + + /// Cluster LAYER%s, containing L?CR, L?WHPCR, L?WVPCR, L?CKCR, L?PFCR, L?CACR, L?DCCR, L?BFCR, L?CFBAR, L?CFBLR, L?CFBLNR, L?CLUTWR + @RegisterBlock(offset: 0x84, stride: 0x80, count: 2) + var layer: RegisterArray +} + +extension LTDC { + /// Synchronization Size Configuration Register + @Register(bitWidth: 32) + struct SSCR { + /// Horizontal Synchronization Width (in units of pixel clock period) + @ReadWrite(bits: 16..<28) + var hsw: HSW + + /// Vertical Synchronization Height (in units of horizontal scan line) + @ReadWrite(bits: 0..<11) + var vsh: VSH + } + + /// Back Porch Configuration Register + @Register(bitWidth: 32) + struct BPCR { + /// Accumulated Horizontal back porch (in units of pixel clock period) + @ReadWrite(bits: 16..<28) + var ahbp: AHBP + + /// Accumulated Vertical back porch (in units of horizontal scan line) + @ReadWrite(bits: 0..<11) + var avbp: AVBP + } + + /// Active Width Configuration Register + @Register(bitWidth: 32) + struct AWCR { + /// Accumulated Active Width (in units of pixel clock period) + @ReadWrite(bits: 16..<28) + var aaw: AAW + + /// Accumulated Active Height (in units of horizontal scan line) + @ReadWrite(bits: 0..<11) + var aah: AAH + } + + /// Total Width Configuration Register + @Register(bitWidth: 32) + struct TWCR { + /// Total Width (in units of pixel clock period) + @ReadWrite(bits: 16..<28) + var totalw: TOTALW + + /// Total Height (in units of horizontal scan line) + @ReadWrite(bits: 0..<11) + var totalh: TOTALH + } + + /// Global Control Register + @Register(bitWidth: 32) + struct GCR { + /// Horizontal Synchronization Polarity + @ReadWrite(bits: 31..<32, as: HSPOLValues.self) + var hspol: HSPOL + + /// Vertical Synchronization Polarity + @ReadWrite(bits: 30..<31, as: VSPOLValues.self) + var vspol: VSPOL + + /// Data Enable Polarity + @ReadWrite(bits: 29..<30, as: DEPOLValues.self) + var depol: DEPOL + + /// Pixel Clock Polarity + @ReadWrite(bits: 28..<29, as: PCPOLValues.self) + var pcpol: PCPOL + + /// Dither Enable + @ReadWrite(bits: 16..<17, as: DENValues.self) + var den: DEN + + /// Dither Red Width + @ReadOnly(bits: 12..<15) + var drw: DRW + + /// Dither Green Width + @ReadOnly(bits: 8..<11) + var dgw: DGW + + /// Dither Blue Width + @ReadOnly(bits: 4..<7) + var dbw: DBW + + /// LCD-TFT controller enable bit + @ReadWrite(bits: 0..<1, as: LTDCENValues.self) + var ltdcen: LTDCEN + } + + /// Shadow Reload Configuration Register + @Register(bitWidth: 32) + struct SRCR { + /// Vertical Blanking Reload + @ReadWrite(bits: 1..<2, as: VBRValues.self) + var vbr: VBR + + /// Immediate Reload + @ReadWrite(bits: 0..<1, as: IMRValues.self) + var imr: IMR + } + + /// Background Color Configuration Register + @Register(bitWidth: 32) + struct BCCR { + /// Background color blue value + @ReadWrite(bits: 0..<8) + var bcblue: BCBLUE + + /// Background color green value + @ReadWrite(bits: 8..<16) + var bcgreen: BCGREEN + + /// Background color red value + @ReadWrite(bits: 16..<24) + var bcred: BCRED + } + + /// Interrupt Enable Register + @Register(bitWidth: 32) + struct IER { + /// Register Reload interrupt enable + @ReadWrite(bits: 3..<4, as: RRIEValues.self) + var rrie: RRIE + + /// Transfer Error Interrupt Enable + @ReadWrite(bits: 2..<3, as: TERRIEValues.self) + var terrie: TERRIE + + /// FIFO Underrun Interrupt Enable + @ReadWrite(bits: 1..<2, as: FUIEValues.self) + var fuie: FUIE + + /// Line Interrupt Enable + @ReadWrite(bits: 0..<1, as: LIEValues.self) + var lie: LIE + } + + /// Interrupt Status Register + @Register(bitWidth: 32) + struct ISR { + /// Register Reload Interrupt Flag + @ReadOnly(bits: 3..<4) + var rrif: RRIF + + /// Transfer Error interrupt flag + @ReadOnly(bits: 2..<3) + var terrif: TERRIF + + /// FIFO Underrun Interrupt flag + @ReadOnly(bits: 1..<2) + var fuif: FUIF + + /// Line Interrupt flag + @ReadOnly(bits: 0..<1) + var lif: LIF + } + + /// Interrupt Clear Register + @Register(bitWidth: 32) + struct ICR { + /// Clears Register Reload Interrupt Flag + @WriteOnly(bits: 3..<4) + var crrif: CRRIF + + /// Clears the Transfer Error Interrupt Flag + @WriteOnly(bits: 2..<3) + var cterrif: CTERRIF + + /// Clears the FIFO Underrun Interrupt flag + @WriteOnly(bits: 1..<2) + var cfuif: CFUIF + + /// Clears the Line Interrupt Flag + @WriteOnly(bits: 0..<1) + var clif: CLIF + } + + /// Line Interrupt Position Configuration Register + @Register(bitWidth: 32) + struct LIPCR { + /// Line Interrupt Position + @ReadWrite(bits: 0..<11) + var lipos: LIPOS + } + + /// Current Position Status Register + @Register(bitWidth: 32) + struct CPSR { + /// Current X Position + @ReadOnly(bits: 16..<32) + var cxpos: CXPOS + + /// Current Y Position + @ReadOnly(bits: 0..<16) + var cypos: CYPOS + } + + /// Current Display Status Register + @Register(bitWidth: 32) + struct CDSR { + /// Horizontal Synchronization display Status + @ReadOnly(bits: 3..<4) + var hsyncs: HSYNCS + + /// Vertical Synchronization display Status + @ReadOnly(bits: 2..<3) + var vsyncs: VSYNCS + + /// Horizontal Data Enable display Status + @ReadOnly(bits: 1..<2) + var hdes: HDES + + /// Vertical Data Enable display Status + @ReadOnly(bits: 0..<1) + var vdes: VDES + } + + /// Cluster LAYER%s, containing L?CR, L?WHPCR, L?WVPCR, L?CKCR, L?PFCR, L?CACR, L?DCCR, L?BFCR, L?CFBAR, L?CFBLR, L?CFBLNR, L?CLUTWR + @RegisterBlock + struct LAYER { + /// Layerx Control Register + @RegisterBlock(offset: 0x0) + var cr: Register + + /// Layerx Window Horizontal Position Configuration Register + @RegisterBlock(offset: 0x4) + var whpcr: Register + + /// Layerx Window Vertical Position Configuration Register + @RegisterBlock(offset: 0x8) + var wvpcr: Register + + /// Layerx Color Keying Configuration Register + @RegisterBlock(offset: 0xc) + var ckcr: Register + + /// Layerx Pixel Format Configuration Register + @RegisterBlock(offset: 0x10) + var pfcr: Register + + /// Layerx Constant Alpha Configuration Register + @RegisterBlock(offset: 0x14) + var cacr: Register + + /// Layerx Default Color Configuration Register + @RegisterBlock(offset: 0x18) + var dccr: Register + + /// Layerx Blending Factors Configuration Register + @RegisterBlock(offset: 0x1c) + var bfcr: Register + + /// Layerx Color Frame Buffer Address Register + @RegisterBlock(offset: 0x28) + var cfbar: Register + + /// Layerx Color Frame Buffer Length Register + @RegisterBlock(offset: 0x2c) + var cfblr: Register + + /// Layerx ColorFrame Buffer Line Number Register + @RegisterBlock(offset: 0x30) + var cfblnr: Register + + /// Layerx CLUT Write Register + @RegisterBlock(offset: 0x40) + var clutwr: Register + } +} + +extension LTDC.LAYER { + /// Layerx Control Register + @Register(bitWidth: 32) + struct CR { + /// Color Look-Up Table Enable + @ReadWrite(bits: 4..<5, as: CLUTENValues.self) + var cluten: CLUTEN + + /// Color Keying Enable + @ReadWrite(bits: 1..<2, as: COLKENValues.self) + var colken: COLKEN + + /// Layer Enable + @ReadWrite(bits: 0..<1, as: LENValues.self) + var len: LEN + } + + /// Layerx Window Horizontal Position Configuration Register + @Register(bitWidth: 32) + struct WHPCR { + /// Window Horizontal Stop Position + @ReadWrite(bits: 16..<28) + var whsppos: WHSPPOS + + /// Window Horizontal Start Position + @ReadWrite(bits: 0..<12) + var whstpos: WHSTPOS + } + + /// Layerx Window Vertical Position Configuration Register + @Register(bitWidth: 32) + struct WVPCR { + /// Window Vertical Stop Position + @ReadWrite(bits: 16..<27) + var wvsppos: WVSPPOS + + /// Window Vertical Start Position + @ReadWrite(bits: 0..<11) + var wvstpos: WVSTPOS + } + + /// Layerx Color Keying Configuration Register + @Register(bitWidth: 32) + struct CKCR { + /// Color Key Red value + @ReadWrite(bits: 16..<24) + var ckred: CKRED + + /// Color Key Green value + @ReadWrite(bits: 8..<16) + var ckgreen: CKGREEN + + /// Color Key Blue value + @ReadWrite(bits: 0..<8) + var ckblue: CKBLUE + } + + /// Layerx Pixel Format Configuration Register + @Register(bitWidth: 32) + struct PFCR { + /// Pixel Format + @ReadWrite(bits: 0..<3, as: PFValues.self) + var pf: PF + } + + /// Layerx Constant Alpha Configuration Register + @Register(bitWidth: 32) + struct CACR { + /// Constant Alpha + @ReadWrite(bits: 0..<8) + var consta: CONSTA + } + + /// Layerx Default Color Configuration Register + @Register(bitWidth: 32) + struct DCCR { + /// Default Color Alpha + @ReadWrite(bits: 24..<32) + var dcalpha: DCALPHA + + /// Default Color Red + @ReadWrite(bits: 16..<24) + var dcred: DCRED + + /// Default Color Green + @ReadWrite(bits: 8..<16) + var dcgreen: DCGREEN + + /// Default Color Blue + @ReadWrite(bits: 0..<8) + var dcblue: DCBLUE + } + + /// Layerx Blending Factors Configuration Register + @Register(bitWidth: 32) + struct BFCR { + /// Blending Factor 1 + @ReadWrite(bits: 8..<11, as: BF1Values.self) + var bf1: BF1 + + /// Blending Factor 2 + @ReadWrite(bits: 0..<3, as: BF2Values.self) + var bf2: BF2 + } + + /// Layerx Color Frame Buffer Address Register + @Register(bitWidth: 32) + struct CFBAR { + /// Color Frame Buffer Start Address + @ReadWrite(bits: 0..<32) + var cfbadd: CFBADD + } + + /// Layerx Color Frame Buffer Length Register + @Register(bitWidth: 32) + struct CFBLR { + /// Color Frame Buffer Pitch in bytes + @ReadWrite(bits: 16..<29) + var cfbp: CFBP + + /// Color Frame Buffer Line Length + @ReadWrite(bits: 0..<13) + var cfbll: CFBLL + } + + /// Layerx ColorFrame Buffer Line Number Register + @Register(bitWidth: 32) + struct CFBLNR { + /// Frame Buffer Line Number + @ReadWrite(bits: 0..<11) + var cfblnbr: CFBLNBR + } + + /// Layerx CLUT Write Register + @Register(bitWidth: 32) + struct CLUTWR { + /// CLUT Address + @WriteOnly(bits: 24..<32) + var clutadd: CLUTADD + + /// Red value + @WriteOnly(bits: 16..<24) + var red: RED + + /// Green value + @WriteOnly(bits: 8..<16) + var green: GREEN + + /// Blue value + @WriteOnly(bits: 0..<8) + var blue: BLUE + } +} + +extension LTDC.GCR { + struct HSPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Horizontal synchronization polarity is active low + static let ActiveLow = Self(rawValue: 0x0) + + /// Horizontal synchronization polarity is active high + static let ActiveHigh = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.GCR { + struct VSPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Vertical synchronization polarity is active low + static let ActiveLow = Self(rawValue: 0x0) + + /// Vertical synchronization polarity is active high + static let ActiveHigh = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.GCR { + struct DEPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Data enable polarity is active low + static let ActiveLow = Self(rawValue: 0x0) + + /// Data enable polarity is active high + static let ActiveHigh = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.GCR { + struct PCPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Pixel clock on rising edge + static let RisingEdge = Self(rawValue: 0x0) + + /// Pixel clock on falling edge + static let FallingEdge = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.GCR { + struct DENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Dither disabled + static let Disabled = Self(rawValue: 0x0) + + /// Dither enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.GCR { + struct LTDCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LCD-TFT controller disabled + static let Disabled = Self(rawValue: 0x0) + + /// LCD-TFT controller enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.SRCR { + struct VBRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// This bit is set by software and cleared only by hardware after reload (it cannot be cleared through register write once it is set) + static let NoEffect = Self(rawValue: 0x0) + + /// The shadow registers are reloaded during the vertical blanking period (at the beginning of the first line after the active display area). + static let Reload = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.SRCR { + struct IMRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// This bit is set by software and cleared only by hardware after reload (it cannot be cleared through register write once it is set) + static let NoEffect = Self(rawValue: 0x0) + + /// The shadow registers are reloaded immediately. This bit is set by software and cleared only by hardware after reload + static let Reload = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.IER { + struct RRIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Register reload interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Register reload interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.IER { + struct TERRIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Transfer error interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Transfer error interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.IER { + struct FUIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// FIFO underrun interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// FIFO underrun interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.IER { + struct LIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Line interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Line interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.CR { + struct CLUTENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Color look-up table disabled + static let Disabled = Self(rawValue: 0x0) + + /// Color look-up table enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.CR { + struct COLKENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Color keying disabled + static let Disabled = Self(rawValue: 0x0) + + /// Color keying enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.CR { + struct LENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Layer disabled + static let Disabled = Self(rawValue: 0x0) + + /// Layer enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.PFCR { + struct PFValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// ARGB8888 + static let ARGB8888 = Self(rawValue: 0x0) + + /// RGB888 + static let RGB888 = Self(rawValue: 0x1) + + /// RGB565 + static let RGB565 = Self(rawValue: 0x2) + + /// ARGB1555 + static let ARGB1555 = Self(rawValue: 0x3) + + /// ARGB4444 + static let ARGB4444 = Self(rawValue: 0x4) + + /// L8 (8-bit luminance) + static let L8 = Self(rawValue: 0x5) + + /// AL44 (4-bit alpha, 4-bit luminance) + static let AL44 = Self(rawValue: 0x6) + + /// AL88 (8-bit alpha, 8-bit luminance) + static let AL88 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.BFCR { + struct BF1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// BF1 = constant alpha + static let Constant = Self(rawValue: 0x4) + + /// BF1 = pixel alpha * constant alpha + static let Pixel = Self(rawValue: 0x6) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension LTDC.LAYER.BFCR { + struct BF2Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// BF2 = 1 - constant alpha + static let Constant = Self(rawValue: 0x5) + + /// BF2 = 1 - pixel alpha * constant alpha + static let Pixel = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-lcd-logo/Sources/Application/Registers/RCC.swift b/stm32-lcd-logo/Sources/Application/Registers/RCC.swift new file mode 100644 index 00000000..4f5842ef --- /dev/null +++ b/stm32-lcd-logo/Sources/Application/Registers/RCC.swift @@ -0,0 +1,2833 @@ +// Generated by svd2swift. + +import MMIO + +/// Reset and clock control +@RegisterBlock +struct RCC { + /// clock control register + @RegisterBlock(offset: 0x0) + var cr: Register + + /// PLL configuration register + @RegisterBlock(offset: 0x4) + var pllcfgr: Register + + /// clock configuration register + @RegisterBlock(offset: 0x8) + var cfgr: Register + + /// clock interrupt register + @RegisterBlock(offset: 0xc) + var cir: Register + + /// AHB1 peripheral reset register + @RegisterBlock(offset: 0x10) + var ahb1rstr: Register + + /// AHB2 peripheral reset register + @RegisterBlock(offset: 0x14) + var ahb2rstr: Register + + /// AHB3 peripheral reset register + @RegisterBlock(offset: 0x18) + var ahb3rstr: Register + + /// APB1 peripheral reset register + @RegisterBlock(offset: 0x20) + var apb1rstr: Register + + /// APB2 peripheral reset register + @RegisterBlock(offset: 0x24) + var apb2rstr: Register + + /// AHB1 peripheral clock register + @RegisterBlock(offset: 0x30) + var ahb1enr: Register + + /// AHB2 peripheral clock enable register + @RegisterBlock(offset: 0x34) + var ahb2enr: Register + + /// AHB3 peripheral clock enable register + @RegisterBlock(offset: 0x38) + var ahb3enr: Register + + /// APB1 peripheral clock enable register + @RegisterBlock(offset: 0x40) + var apb1enr: Register + + /// APB2 peripheral clock enable register + @RegisterBlock(offset: 0x44) + var apb2enr: Register + + /// AHB1 peripheral clock enable in low power mode register + @RegisterBlock(offset: 0x50) + var ahb1lpenr: Register + + /// AHB2 peripheral clock enable in low power mode register + @RegisterBlock(offset: 0x54) + var ahb2lpenr: Register + + /// AHB3 peripheral clock enable in low power mode register + @RegisterBlock(offset: 0x58) + var ahb3lpenr: Register + + /// APB1 peripheral clock enable in low power mode register + @RegisterBlock(offset: 0x60) + var apb1lpenr: Register + + /// APB2 peripheral clock enabled in low power mode register + @RegisterBlock(offset: 0x64) + var apb2lpenr: Register + + /// Backup domain control register + @RegisterBlock(offset: 0x70) + var bdcr: Register + + /// clock control & status register + @RegisterBlock(offset: 0x74) + var csr: Register + + /// spread spectrum clock generation register + @RegisterBlock(offset: 0x80) + var sscgr: Register + + /// PLLI2S configuration register + @RegisterBlock(offset: 0x84) + var plli2scfgr: Register + + /// PLL configuration register + @RegisterBlock(offset: 0x88) + var pllsaicfgr: Register + + /// dedicated clocks configuration register + @RegisterBlock(offset: 0x8c) + var dckcfgr1: Register + + /// dedicated clocks configuration register + @RegisterBlock(offset: 0x90) + var dckcfgr2: Register +} + +extension RCC { + /// clock control register + @Register(bitWidth: 32) + struct CR { + /// PLLI2S clock ready flag + @ReadOnly(bits: 27..<28) + var plli2srdy: PLLI2SRDY + + /// PLLI2S enable + @ReadWrite(bits: 26..<27) + var plli2son: PLLI2SON + + /// Main PLL (PLL) clock ready flag + @ReadOnly(bits: 25..<26) + var pllrdy: PLLRDY + + /// Main PLL (PLL) enable + @ReadWrite(bits: 24..<25) + var pllon: PLLON + + /// Clock security system enable + @ReadWrite(bits: 19..<20, as: CSSONValues.self) + var csson: CSSON + + /// HSE clock bypass + @ReadWrite(bits: 18..<19, as: HSEBYPValues.self) + var hsebyp: HSEBYP + + /// HSE clock ready flag + @ReadOnly(bits: 17..<18) + var hserdy: HSERDY + + /// HSE clock enable + @ReadWrite(bits: 16..<17) + var hseon: HSEON + + /// Internal high-speed clock calibration + @ReadOnly(bits: 8..<16) + var hsical: HSICAL + + /// Internal high-speed clock trimming + @ReadWrite(bits: 3..<8) + var hsitrim: HSITRIM + + /// Internal high-speed clock ready flag + @ReadOnly(bits: 1..<2) + var hsirdy: HSIRDY + + /// Internal high-speed clock enable + @ReadWrite(bits: 0..<1, as: HSIONValues.self) + var hsion: HSION + + /// PLLSAI clock ready flag + @ReadOnly(bits: 29..<30) + var pllsairdy: PLLSAIRDY + + /// PLLSAI enable + @ReadWrite(bits: 28..<29) + var pllsaion: PLLSAION + } + + /// PLL configuration register + @Register(bitWidth: 32) + struct PLLCFGR { + /// Main PLL(PLL) and audio PLL (PLLI2S) entry clock source + @ReadWrite(bits: 22..<23, as: PLLSRCValues.self) + var pllsrc: PLLSRC + + /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock + @ReadWrite(bits: 0..<6) + var pllm: PLLM + + /// Main PLL (PLL) multiplication factor for VCO + @ReadWrite(bits: 6..<15) + var plln: PLLN + + /// Main PLL (PLL) division factor for main system clock + @ReadWrite(bits: 16..<18, as: PLLPValues.self) + var pllp: PLLP + + /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks + @ReadWrite(bits: 24..<28) + var pllq: PLLQ + } + + /// clock configuration register + @Register(bitWidth: 32) + struct CFGR { + /// Microcontroller clock output 2 + @ReadWrite(bits: 30..<32, as: MCO2Values.self) + var mco2: MCO2 + + /// MCO2 prescaler + @ReadWrite(bits: 27..<30) + var mco2pre: MCO2PRE + + /// MCO1 prescaler + @ReadWrite(bits: 24..<27, as: MCO1PREValues.self) + var mco1pre: MCO1PRE + + /// I2S clock selection + @ReadWrite(bits: 23..<24, as: I2SSRCValues.self) + var i2ssrc: I2SSRC + + /// Microcontroller clock output 1 + @ReadWrite(bits: 21..<23, as: MCO1Values.self) + var mco1: MCO1 + + /// HSE division factor for RTC clock + @ReadWrite(bits: 16..<21) + var rtcpre: RTCPRE + + /// APB high-speed prescaler (APB2) + @ReadWrite(bits: 13..<16) + var ppre2: PPRE2 + + /// APB Low speed prescaler (APB1) + @ReadWrite(bits: 10..<13, as: PPRE1Values.self) + var ppre1: PPRE1 + + /// AHB prescaler + @ReadWrite(bits: 4..<8, as: HPREValues.self) + var hpre: HPRE + + /// System clock switch + @Reserved(bits: 0..<2, as: SWValues.self) + var sw: SW + + /// System clock switch status + @Reserved(bits: 2..<4) + var sws: SWS + } + + /// clock interrupt register + @Register(bitWidth: 32) + struct CIR { + /// Clock security system interrupt clear + @WriteOnly(bits: 23..<24) + var cssc: CSSC + + /// PLLSAI Ready Interrupt Clear + @WriteOnly(bits: 22..<23) + var pllsairdyc: PLLSAIRDYC + + /// PLLI2S ready interrupt clear + @WriteOnly(bits: 21..<22) + var plli2srdyc: PLLI2SRDYC + + /// Main PLL(PLL) ready interrupt clear + @WriteOnly(bits: 20..<21) + var pllrdyc: PLLRDYC + + /// HSE ready interrupt clear + @WriteOnly(bits: 19..<20) + var hserdyc: HSERDYC + + /// HSI ready interrupt clear + @WriteOnly(bits: 18..<19) + var hsirdyc: HSIRDYC + + /// LSE ready interrupt clear + @WriteOnly(bits: 17..<18) + var lserdyc: LSERDYC + + /// LSI ready interrupt clear + @WriteOnly(bits: 16..<17) + var lsirdyc: LSIRDYC + + /// PLLSAI Ready Interrupt Enable + @ReadWrite(bits: 14..<15) + var pllsairdyie: PLLSAIRDYIE + + /// PLLI2S ready interrupt enable + @ReadWrite(bits: 13..<14) + var plli2srdyie: PLLI2SRDYIE + + /// Main PLL (PLL) ready interrupt enable + @ReadWrite(bits: 12..<13) + var pllrdyie: PLLRDYIE + + /// HSE ready interrupt enable + @ReadWrite(bits: 11..<12) + var hserdyie: HSERDYIE + + /// HSI ready interrupt enable + @ReadWrite(bits: 10..<11) + var hsirdyie: HSIRDYIE + + /// LSE ready interrupt enable + @ReadWrite(bits: 9..<10) + var lserdyie: LSERDYIE + + /// LSI ready interrupt enable + @ReadWrite(bits: 8..<9, as: LSIRDYIEValues.self) + var lsirdyie: LSIRDYIE + + /// Clock security system interrupt flag + @ReadOnly(bits: 7..<8) + var cssf: CSSF + + /// PLLSAI ready interrupt flag + @ReadOnly(bits: 6..<7) + var pllsairdyf: PLLSAIRDYF + + /// PLLI2S ready interrupt flag + @ReadOnly(bits: 5..<6) + var plli2srdyf: PLLI2SRDYF + + /// Main PLL (PLL) ready interrupt flag + @ReadOnly(bits: 4..<5) + var pllrdyf: PLLRDYF + + /// HSE ready interrupt flag + @ReadOnly(bits: 3..<4) + var hserdyf: HSERDYF + + /// HSI ready interrupt flag + @ReadOnly(bits: 2..<3) + var hsirdyf: HSIRDYF + + /// LSE ready interrupt flag + @ReadOnly(bits: 1..<2) + var lserdyf: LSERDYF + + /// LSI ready interrupt flag + @ReadOnly(bits: 0..<1) + var lsirdyf: LSIRDYF + } + + /// AHB1 peripheral reset register + @Register(bitWidth: 32) + struct AHB1RSTR { + /// USB OTG HS module reset + @ReadWrite(bits: 29..<30) + var otghsrst: OTGHSRST + + /// Ethernet MAC reset + @ReadWrite(bits: 25..<26) + var ethmacrst: ETHMACRST + + /// DMA2D reset + @ReadWrite(bits: 23..<24) + var dma2drst: DMA2DRST + + /// DMA2 reset + @ReadWrite(bits: 22..<23) + var dma2rst: DMA2RST + + /// DMA2 reset + @ReadWrite(bits: 21..<22) + var dma1rst: DMA1RST + + /// CRC reset + @ReadWrite(bits: 12..<13) + var crcrst: CRCRST + + /// IO port K reset + @ReadWrite(bits: 10..<11) + var gpiokrst: GPIOKRST + + /// IO port J reset + @ReadWrite(bits: 9..<10) + var gpiojrst: GPIOJRST + + /// IO port I reset + @ReadWrite(bits: 8..<9) + var gpioirst: GPIOIRST + + /// IO port H reset + @ReadWrite(bits: 7..<8) + var gpiohrst: GPIOHRST + + /// IO port G reset + @ReadWrite(bits: 6..<7) + var gpiogrst: GPIOGRST + + /// IO port F reset + @ReadWrite(bits: 5..<6) + var gpiofrst: GPIOFRST + + /// IO port E reset + @ReadWrite(bits: 4..<5) + var gpioerst: GPIOERST + + /// IO port D reset + @ReadWrite(bits: 3..<4) + var gpiodrst: GPIODRST + + /// IO port C reset + @ReadWrite(bits: 2..<3) + var gpiocrst: GPIOCRST + + /// IO port B reset + @ReadWrite(bits: 1..<2) + var gpiobrst: GPIOBRST + + /// IO port A reset + @ReadWrite(bits: 0..<1, as: GPIOARSTValues.self) + var gpioarst: GPIOARST + } + + /// AHB2 peripheral reset register + @Register(bitWidth: 32) + struct AHB2RSTR { + /// USB OTG FS module reset + @ReadWrite(bits: 7..<8) + var otgfsrst: OTGFSRST + + /// Random number generator module reset + @ReadWrite(bits: 6..<7) + var rngrst: RNGRST + + /// Hash module reset + @ReadWrite(bits: 5..<6) + var hsahrst: HSAHRST + + /// Cryptographic module reset + @ReadWrite(bits: 4..<5) + var cryprst: CRYPRST + + /// Camera interface reset + @ReadWrite(bits: 0..<1, as: DCMIRSTValues.self) + var dcmirst: DCMIRST + } + + /// AHB3 peripheral reset register + @Register(bitWidth: 32) + struct AHB3RSTR { + /// Flexible memory controller module reset + @ReadWrite(bits: 0..<1, as: FMCRSTValues.self) + var fmcrst: FMCRST + + /// Quad SPI memory controller reset + @ReadWrite(bits: 1..<2) + var qspirst: QSPIRST + } + + /// APB1 peripheral reset register + @Register(bitWidth: 32) + struct APB1RSTR { + /// TIM2 reset + @ReadWrite(bits: 0..<1, as: TIM2RSTValues.self) + var tim2rst: TIM2RST + + /// TIM3 reset + @ReadWrite(bits: 1..<2) + var tim3rst: TIM3RST + + /// TIM4 reset + @ReadWrite(bits: 2..<3) + var tim4rst: TIM4RST + + /// TIM5 reset + @ReadWrite(bits: 3..<4) + var tim5rst: TIM5RST + + /// TIM6 reset + @ReadWrite(bits: 4..<5) + var tim6rst: TIM6RST + + /// TIM7 reset + @ReadWrite(bits: 5..<6) + var tim7rst: TIM7RST + + /// TIM12 reset + @ReadWrite(bits: 6..<7) + var tim12rst: TIM12RST + + /// TIM13 reset + @ReadWrite(bits: 7..<8) + var tim13rst: TIM13RST + + /// TIM14 reset + @ReadWrite(bits: 8..<9) + var tim14rst: TIM14RST + + /// Window watchdog reset + @ReadWrite(bits: 11..<12) + var wwdgrst: WWDGRST + + /// SPI 2 reset + @ReadWrite(bits: 14..<15) + var spi2rst: SPI2RST + + /// SPI 3 reset + @ReadWrite(bits: 15..<16) + var spi3rst: SPI3RST + + /// USART 2 reset + @ReadWrite(bits: 17..<18) + var usart2rst: USART2RST + + /// USART 3 reset + @ReadWrite(bits: 18..<19) + var usart3rst: USART3RST + + /// USART 4 reset + @ReadWrite(bits: 19..<20) + var uart4rst: UART4RST + + /// USART 5 reset + @ReadWrite(bits: 20..<21) + var uart5rst: UART5RST + + /// I2C 1 reset + @ReadWrite(bits: 21..<22) + var i2c1rst: I2C1RST + + /// I2C 2 reset + @ReadWrite(bits: 22..<23) + var i2c2rst: I2C2RST + + /// I2C3 reset + @ReadWrite(bits: 23..<24) + var i2c3rst: I2C3RST + + /// CAN1 reset + @ReadWrite(bits: 25..<26) + var can1rst: CAN1RST + + /// CAN2 reset + @ReadWrite(bits: 26..<27) + var can2rst: CAN2RST + + /// Power interface reset + @ReadWrite(bits: 28..<29) + var pwrrst: PWRRST + + /// DAC reset + @ReadWrite(bits: 29..<30) + var dacrst: DACRST + + /// UART7 reset + @ReadWrite(bits: 30..<31) + var uart7rst: UART7RST + + /// UART8 reset + @ReadWrite(bits: 31..<32) + var uart8rst: UART8RST + + /// SPDIF-RX reset + @ReadWrite(bits: 16..<17) + var spdifrxrst: SPDIFRXRST + + /// HDMI-CEC reset + @ReadWrite(bits: 27..<28) + var cecrst: CECRST + + /// Low power timer 1 reset + @ReadWrite(bits: 9..<10) + var lptim1rst: LPTIM1RST + + /// I2C 4 reset + @ReadWrite(bits: 24..<25) + var i2c4rst: I2C4RST + } + + /// APB2 peripheral reset register + @Register(bitWidth: 32) + struct APB2RSTR { + /// TIM1 reset + @ReadWrite(bits: 0..<1, as: TIM1RSTValues.self) + var tim1rst: TIM1RST + + /// TIM8 reset + @ReadWrite(bits: 1..<2) + var tim8rst: TIM8RST + + /// USART1 reset + @ReadWrite(bits: 4..<5) + var usart1rst: USART1RST + + /// USART6 reset + @ReadWrite(bits: 5..<6) + var usart6rst: USART6RST + + /// ADC interface reset (common to all ADCs) + @ReadWrite(bits: 8..<9) + var adcrst: ADCRST + + /// SPI 1 reset + @ReadWrite(bits: 12..<13) + var spi1rst: SPI1RST + + /// SPI4 reset + @ReadWrite(bits: 13..<14) + var spi4rst: SPI4RST + + /// System configuration controller reset + @ReadWrite(bits: 14..<15) + var syscfgrst: SYSCFGRST + + /// TIM9 reset + @ReadWrite(bits: 16..<17) + var tim9rst: TIM9RST + + /// TIM10 reset + @ReadWrite(bits: 17..<18) + var tim10rst: TIM10RST + + /// TIM11 reset + @ReadWrite(bits: 18..<19) + var tim11rst: TIM11RST + + /// SPI5 reset + @ReadWrite(bits: 20..<21) + var spi5rst: SPI5RST + + /// SPI6 reset + @ReadWrite(bits: 21..<22) + var spi6rst: SPI6RST + + /// SAI1 reset + @ReadWrite(bits: 22..<23) + var sai1rst: SAI1RST + + /// LTDC reset + @ReadWrite(bits: 26..<27) + var ltdcrst: LTDCRST + + /// SAI2 reset + @ReadWrite(bits: 23..<24) + var sai2rst: SAI2RST + + /// SDMMC1 reset + @ReadWrite(bits: 11..<12) + var sdmmc1rst: SDMMC1RST + } + + /// AHB1 peripheral clock register + @Register(bitWidth: 32) + struct AHB1ENR { + /// USB OTG HSULPI clock enable + @ReadWrite(bits: 30..<31) + var otghsulpien: OTGHSULPIEN + + /// USB OTG HS clock enable + @ReadWrite(bits: 29..<30) + var otghsen: OTGHSEN + + /// Ethernet PTP clock enable + @ReadWrite(bits: 28..<29) + var ethmacptpen: ETHMACPTPEN + + /// Ethernet Reception clock enable + @ReadWrite(bits: 27..<28) + var ethmacrxen: ETHMACRXEN + + /// Ethernet Transmission clock enable + @ReadWrite(bits: 26..<27) + var ethmactxen: ETHMACTXEN + + /// Ethernet MAC clock enable + @ReadWrite(bits: 25..<26) + var ethmacen: ETHMACEN + + /// DMA2D clock enable + @ReadWrite(bits: 23..<24) + var dma2den: DMA2DEN + + /// DMA2 clock enable + @ReadWrite(bits: 22..<23) + var dma2en: DMA2EN + + /// DMA1 clock enable + @ReadWrite(bits: 21..<22) + var dma1en: DMA1EN + + /// CCM data RAM clock enable + @ReadWrite(bits: 20..<21) + var dtcmramen: DTCMRAMEN + + /// Backup SRAM interface clock enable + @ReadWrite(bits: 18..<19) + var bkpsramen: BKPSRAMEN + + /// CRC clock enable + @ReadWrite(bits: 12..<13) + var crcen: CRCEN + + /// IO port K clock enable + @ReadWrite(bits: 10..<11) + var gpioken: GPIOKEN + + /// IO port J clock enable + @ReadWrite(bits: 9..<10) + var gpiojen: GPIOJEN + + /// IO port I clock enable + @ReadWrite(bits: 8..<9) + var gpioien: GPIOIEN + + /// IO port H clock enable + @ReadWrite(bits: 7..<8) + var gpiohen: GPIOHEN + + /// IO port G clock enable + @ReadWrite(bits: 6..<7) + var gpiogen: GPIOGEN + + /// IO port F clock enable + @ReadWrite(bits: 5..<6) + var gpiofen: GPIOFEN + + /// IO port E clock enable + @ReadWrite(bits: 4..<5) + var gpioeen: GPIOEEN + + /// IO port D clock enable + @ReadWrite(bits: 3..<4) + var gpioden: GPIODEN + + /// IO port C clock enable + @ReadWrite(bits: 2..<3) + var gpiocen: GPIOCEN + + /// IO port B clock enable + @ReadWrite(bits: 1..<2) + var gpioben: GPIOBEN + + /// IO port A clock enable + @ReadWrite(bits: 0..<1, as: GPIOAENValues.self) + var gpioaen: GPIOAEN + } + + /// AHB2 peripheral clock enable register + @Register(bitWidth: 32) + struct AHB2ENR { + /// USB OTG FS clock enable + @ReadWrite(bits: 7..<8) + var otgfsen: OTGFSEN + + /// Random number generator clock enable + @ReadWrite(bits: 6..<7) + var rngen: RNGEN + + /// Hash modules clock enable + @ReadWrite(bits: 5..<6) + var hashen: HASHEN + + /// Cryptographic modules clock enable + @ReadWrite(bits: 4..<5) + var crypen: CRYPEN + + /// Camera interface enable + @ReadWrite(bits: 0..<1, as: DCMIENValues.self) + var dcmien: DCMIEN + } + + /// AHB3 peripheral clock enable register + @Register(bitWidth: 32) + struct AHB3ENR { + /// Flexible memory controller module clock enable + @ReadWrite(bits: 0..<1, as: FMCENValues.self) + var fmcen: FMCEN + + /// Quad SPI memory controller clock enable + @ReadWrite(bits: 1..<2) + var qspien: QSPIEN + } + + /// APB1 peripheral clock enable register + @Register(bitWidth: 32) + struct APB1ENR { + /// TIM2 clock enable + @ReadWrite(bits: 0..<1, as: TIM2ENValues.self) + var tim2en: TIM2EN + + /// TIM3 clock enable + @ReadWrite(bits: 1..<2) + var tim3en: TIM3EN + + /// TIM4 clock enable + @ReadWrite(bits: 2..<3) + var tim4en: TIM4EN + + /// TIM5 clock enable + @ReadWrite(bits: 3..<4) + var tim5en: TIM5EN + + /// TIM6 clock enable + @ReadWrite(bits: 4..<5) + var tim6en: TIM6EN + + /// TIM7 clock enable + @ReadWrite(bits: 5..<6) + var tim7en: TIM7EN + + /// TIM12 clock enable + @ReadWrite(bits: 6..<7) + var tim12en: TIM12EN + + /// TIM13 clock enable + @ReadWrite(bits: 7..<8) + var tim13en: TIM13EN + + /// TIM14 clock enable + @ReadWrite(bits: 8..<9) + var tim14en: TIM14EN + + /// Window watchdog clock enable + @ReadWrite(bits: 11..<12) + var wwdgen: WWDGEN + + /// SPI2 clock enable + @ReadWrite(bits: 14..<15) + var spi2en: SPI2EN + + /// SPI3 clock enable + @ReadWrite(bits: 15..<16) + var spi3en: SPI3EN + + /// USART 2 clock enable + @ReadWrite(bits: 17..<18) + var usart2en: USART2EN + + /// USART3 clock enable + @ReadWrite(bits: 18..<19) + var usart3en: USART3EN + + /// UART4 clock enable + @ReadWrite(bits: 19..<20) + var uart4en: UART4EN + + /// UART5 clock enable + @ReadWrite(bits: 20..<21) + var uart5en: UART5EN + + /// I2C1 clock enable + @ReadWrite(bits: 21..<22) + var i2c1en: I2C1EN + + /// I2C2 clock enable + @ReadWrite(bits: 22..<23) + var i2c2en: I2C2EN + + /// I2C3 clock enable + @ReadWrite(bits: 23..<24) + var i2c3en: I2C3EN + + /// CAN 1 clock enable + @ReadWrite(bits: 25..<26) + var can1en: CAN1EN + + /// CAN 2 clock enable + @ReadWrite(bits: 26..<27) + var can2en: CAN2EN + + /// Power interface clock enable + @ReadWrite(bits: 28..<29) + var pwren: PWREN + + /// DAC interface clock enable + @ReadWrite(bits: 29..<30) + var dacen: DACEN + + /// UART7 clock enable + @ReadWrite(bits: 30..<31) + var uart7en: UART7EN + + /// UART8 clock enable + @ReadWrite(bits: 31..<32) + var uart8en: UART8EN + + /// SPDIF-RX clock enable + @ReadWrite(bits: 16..<17) + var spdifrxen: SPDIFRXEN + + /// HDMI-CEN clock enable + @ReadWrite(bits: 27..<28) + var cecen: CECEN + + /// Low power timer 1 clock enable + @ReadWrite(bits: 9..<10) + var lptim1en: LPTIM1EN + + /// I2C4 clock enable + @ReadWrite(bits: 24..<25) + var i2c4en: I2C4EN + } + + /// APB2 peripheral clock enable register + @Register(bitWidth: 32) + struct APB2ENR { + /// TIM1 clock enable + @ReadWrite(bits: 0..<1, as: TIM1ENValues.self) + var tim1en: TIM1EN + + /// TIM8 clock enable + @ReadWrite(bits: 1..<2) + var tim8en: TIM8EN + + /// USART1 clock enable + @ReadWrite(bits: 4..<5) + var usart1en: USART1EN + + /// USART6 clock enable + @ReadWrite(bits: 5..<6) + var usart6en: USART6EN + + /// ADC1 clock enable + @ReadWrite(bits: 8..<9) + var adc1en: ADC1EN + + /// ADC2 clock enable + @ReadWrite(bits: 9..<10) + var adc2en: ADC2EN + + /// ADC3 clock enable + @ReadWrite(bits: 10..<11) + var adc3en: ADC3EN + + /// SPI1 clock enable + @ReadWrite(bits: 12..<13) + var spi1en: SPI1EN + + /// SPI4 clock enable + @ReadWrite(bits: 13..<14) + var spi4en: SPI4EN + + /// System configuration controller clock enable + @ReadWrite(bits: 14..<15) + var syscfgen: SYSCFGEN + + /// TIM9 clock enable + @ReadWrite(bits: 16..<17) + var tim9en: TIM9EN + + /// TIM10 clock enable + @ReadWrite(bits: 17..<18) + var tim10en: TIM10EN + + /// TIM11 clock enable + @ReadWrite(bits: 18..<19) + var tim11en: TIM11EN + + /// SPI5 clock enable + @ReadWrite(bits: 20..<21) + var spi5en: SPI5EN + + /// SPI6 clock enable + @ReadWrite(bits: 21..<22) + var spi6en: SPI6EN + + /// SAI1 clock enable + @ReadWrite(bits: 22..<23) + var sai1en: SAI1EN + + /// LTDC clock enable + @ReadWrite(bits: 26..<27) + var ltdcen: LTDCEN + + /// SAI2 clock enable + @ReadWrite(bits: 23..<24) + var sai2en: SAI2EN + + /// SDMMC1 clock enable + @ReadWrite(bits: 11..<12) + var sdmmc1en: SDMMC1EN + } + + /// AHB1 peripheral clock enable in low power mode register + @Register(bitWidth: 32) + struct AHB1LPENR { + /// IO port A clock enable during sleep mode + @ReadWrite(bits: 0..<1, as: GPIOALPENValues.self) + var gpioalpen: GPIOALPEN + + /// IO port B clock enable during Sleep mode + @ReadWrite(bits: 1..<2) + var gpioblpen: GPIOBLPEN + + /// IO port C clock enable during Sleep mode + @ReadWrite(bits: 2..<3) + var gpioclpen: GPIOCLPEN + + /// IO port D clock enable during Sleep mode + @ReadWrite(bits: 3..<4) + var gpiodlpen: GPIODLPEN + + /// IO port E clock enable during Sleep mode + @ReadWrite(bits: 4..<5) + var gpioelpen: GPIOELPEN + + /// IO port F clock enable during Sleep mode + @ReadWrite(bits: 5..<6) + var gpioflpen: GPIOFLPEN + + /// IO port G clock enable during Sleep mode + @ReadWrite(bits: 6..<7) + var gpioglpen: GPIOGLPEN + + /// IO port H clock enable during Sleep mode + @ReadWrite(bits: 7..<8) + var gpiohlpen: GPIOHLPEN + + /// IO port I clock enable during Sleep mode + @ReadWrite(bits: 8..<9) + var gpioilpen: GPIOILPEN + + /// IO port J clock enable during Sleep mode + @ReadWrite(bits: 9..<10) + var gpiojlpen: GPIOJLPEN + + /// IO port K clock enable during Sleep mode + @ReadWrite(bits: 10..<11) + var gpioklpen: GPIOKLPEN + + /// CRC clock enable during Sleep mode + @ReadWrite(bits: 12..<13) + var crclpen: CRCLPEN + + /// Flash interface clock enable during Sleep mode + @ReadWrite(bits: 15..<16) + var flitflpen: FLITFLPEN + + /// SRAM 1interface clock enable during Sleep mode + @ReadWrite(bits: 16..<17) + var sram1lpen: SRAM1LPEN + + /// SRAM 2 interface clock enable during Sleep mode + @ReadWrite(bits: 17..<18) + var sram2lpen: SRAM2LPEN + + /// Backup SRAM interface clock enable during Sleep mode + @ReadWrite(bits: 18..<19) + var bkpsramlpen: BKPSRAMLPEN + + /// SRAM 3 interface clock enable during Sleep mode + @ReadWrite(bits: 19..<20) + var sram3lpen: SRAM3LPEN + + /// DMA1 clock enable during Sleep mode + @ReadWrite(bits: 21..<22) + var dma1lpen: DMA1LPEN + + /// DMA2 clock enable during Sleep mode + @ReadWrite(bits: 22..<23) + var dma2lpen: DMA2LPEN + + /// DMA2D clock enable during Sleep mode + @ReadWrite(bits: 23..<24) + var dma2dlpen: DMA2DLPEN + + /// Ethernet MAC clock enable during Sleep mode + @ReadWrite(bits: 25..<26) + var ethmaclpen: ETHMACLPEN + + /// Ethernet transmission clock enable during Sleep mode + @ReadWrite(bits: 26..<27) + var ethmactxlpen: ETHMACTXLPEN + + /// Ethernet reception clock enable during Sleep mode + @ReadWrite(bits: 27..<28) + var ethmacrxlpen: ETHMACRXLPEN + + /// Ethernet PTP clock enable during Sleep mode + @ReadWrite(bits: 28..<29) + var ethmacptplpen: ETHMACPTPLPEN + + /// USB OTG HS clock enable during Sleep mode + @ReadWrite(bits: 29..<30) + var otghslpen: OTGHSLPEN + + /// USB OTG HS ULPI clock enable during Sleep mode + @ReadWrite(bits: 30..<31) + var otghsulpilpen: OTGHSULPILPEN + + /// AXI to AHB bridge clock enable during Sleep mode + @ReadWrite(bits: 13..<14) + var axilpen: AXILPEN + + /// DTCM RAM interface clock enable during Sleep mode + @ReadWrite(bits: 20..<21) + var dtcmlpen: DTCMLPEN + } + + /// AHB2 peripheral clock enable in low power mode register + @Register(bitWidth: 32) + struct AHB2LPENR { + /// USB OTG FS clock enable during Sleep mode + @ReadWrite(bits: 7..<8) + var otgfslpen: OTGFSLPEN + + /// Random number generator clock enable during Sleep mode + @ReadWrite(bits: 6..<7) + var rnglpen: RNGLPEN + + /// Hash modules clock enable during Sleep mode + @ReadWrite(bits: 5..<6) + var hashlpen: HASHLPEN + + /// Cryptography modules clock enable during Sleep mode + @ReadWrite(bits: 4..<5) + var cryplpen: CRYPLPEN + + /// Camera interface enable during Sleep mode + @ReadWrite(bits: 0..<1, as: DCMILPENValues.self) + var dcmilpen: DCMILPEN + } + + /// AHB3 peripheral clock enable in low power mode register + @Register(bitWidth: 32) + struct AHB3LPENR { + /// Flexible memory controller module clock enable during Sleep mode + @ReadWrite(bits: 0..<1, as: FMCLPENValues.self) + var fmclpen: FMCLPEN + + /// Quand SPI memory controller clock enable during Sleep mode + @ReadWrite(bits: 1..<2) + var qspilpen: QSPILPEN + } + + /// APB1 peripheral clock enable in low power mode register + @Register(bitWidth: 32) + struct APB1LPENR { + /// TIM2 clock enable during Sleep mode + @ReadWrite(bits: 0..<1, as: TIM2LPENValues.self) + var tim2lpen: TIM2LPEN + + /// TIM3 clock enable during Sleep mode + @ReadWrite(bits: 1..<2) + var tim3lpen: TIM3LPEN + + /// TIM4 clock enable during Sleep mode + @ReadWrite(bits: 2..<3) + var tim4lpen: TIM4LPEN + + /// TIM5 clock enable during Sleep mode + @ReadWrite(bits: 3..<4) + var tim5lpen: TIM5LPEN + + /// TIM6 clock enable during Sleep mode + @ReadWrite(bits: 4..<5) + var tim6lpen: TIM6LPEN + + /// TIM7 clock enable during Sleep mode + @ReadWrite(bits: 5..<6) + var tim7lpen: TIM7LPEN + + /// TIM12 clock enable during Sleep mode + @ReadWrite(bits: 6..<7) + var tim12lpen: TIM12LPEN + + /// TIM13 clock enable during Sleep mode + @ReadWrite(bits: 7..<8) + var tim13lpen: TIM13LPEN + + /// TIM14 clock enable during Sleep mode + @ReadWrite(bits: 8..<9) + var tim14lpen: TIM14LPEN + + /// Window watchdog clock enable during Sleep mode + @ReadWrite(bits: 11..<12) + var wwdglpen: WWDGLPEN + + /// SPI2 clock enable during Sleep mode + @ReadWrite(bits: 14..<15) + var spi2lpen: SPI2LPEN + + /// SPI3 clock enable during Sleep mode + @ReadWrite(bits: 15..<16) + var spi3lpen: SPI3LPEN + + /// USART2 clock enable during Sleep mode + @ReadWrite(bits: 17..<18) + var usart2lpen: USART2LPEN + + /// USART3 clock enable during Sleep mode + @ReadWrite(bits: 18..<19) + var usart3lpen: USART3LPEN + + /// UART4 clock enable during Sleep mode + @ReadWrite(bits: 19..<20) + var uart4lpen: UART4LPEN + + /// UART5 clock enable during Sleep mode + @ReadWrite(bits: 20..<21) + var uart5lpen: UART5LPEN + + /// I2C1 clock enable during Sleep mode + @ReadWrite(bits: 21..<22) + var i2c1lpen: I2C1LPEN + + /// I2C2 clock enable during Sleep mode + @ReadWrite(bits: 22..<23) + var i2c2lpen: I2C2LPEN + + /// I2C3 clock enable during Sleep mode + @ReadWrite(bits: 23..<24) + var i2c3lpen: I2C3LPEN + + /// CAN 1 clock enable during Sleep mode + @ReadWrite(bits: 25..<26) + var can1lpen: CAN1LPEN + + /// CAN 2 clock enable during Sleep mode + @ReadWrite(bits: 26..<27) + var can2lpen: CAN2LPEN + + /// Power interface clock enable during Sleep mode + @ReadWrite(bits: 28..<29) + var pwrlpen: PWRLPEN + + /// DAC interface clock enable during Sleep mode + @ReadWrite(bits: 29..<30) + var daclpen: DACLPEN + + /// UART7 clock enable during Sleep mode + @ReadWrite(bits: 30..<31) + var uart7lpen: UART7LPEN + + /// UART8 clock enable during Sleep mode + @ReadWrite(bits: 31..<32) + var uart8lpen: UART8LPEN + + /// SPDIF-RX clock enable during sleep mode + @ReadWrite(bits: 16..<17) + var spdifrxlpen: SPDIFRXLPEN + + /// HDMI-CEN clock enable during Sleep mode + @ReadWrite(bits: 27..<28) + var ceclpen: CECLPEN + + /// low power timer 1 clock enable during Sleep mode + @ReadWrite(bits: 9..<10) + var lptim1lpen: LPTIM1LPEN + + /// I2C4 clock enable during Sleep mode + @ReadWrite(bits: 24..<25) + var i2c4lpen: I2C4LPEN + } + + /// APB2 peripheral clock enabled in low power mode register + @Register(bitWidth: 32) + struct APB2LPENR { + /// TIM1 clock enable during Sleep mode + @ReadWrite(bits: 0..<1, as: TIM1LPENValues.self) + var tim1lpen: TIM1LPEN + + /// TIM8 clock enable during Sleep mode + @ReadWrite(bits: 1..<2) + var tim8lpen: TIM8LPEN + + /// USART1 clock enable during Sleep mode + @ReadWrite(bits: 4..<5) + var usart1lpen: USART1LPEN + + /// USART6 clock enable during Sleep mode + @ReadWrite(bits: 5..<6) + var usart6lpen: USART6LPEN + + /// ADC1 clock enable during Sleep mode + @ReadWrite(bits: 8..<9) + var adc1lpen: ADC1LPEN + + /// ADC2 clock enable during Sleep mode + @ReadWrite(bits: 9..<10) + var adc2lpen: ADC2LPEN + + /// ADC 3 clock enable during Sleep mode + @ReadWrite(bits: 10..<11) + var adc3lpen: ADC3LPEN + + /// SPI 1 clock enable during Sleep mode + @ReadWrite(bits: 12..<13) + var spi1lpen: SPI1LPEN + + /// SPI 4 clock enable during Sleep mode + @ReadWrite(bits: 13..<14) + var spi4lpen: SPI4LPEN + + /// System configuration controller clock enable during Sleep mode + @ReadWrite(bits: 14..<15) + var syscfglpen: SYSCFGLPEN + + /// TIM9 clock enable during sleep mode + @ReadWrite(bits: 16..<17) + var tim9lpen: TIM9LPEN + + /// TIM10 clock enable during Sleep mode + @ReadWrite(bits: 17..<18) + var tim10lpen: TIM10LPEN + + /// TIM11 clock enable during Sleep mode + @ReadWrite(bits: 18..<19) + var tim11lpen: TIM11LPEN + + /// SPI 5 clock enable during Sleep mode + @ReadWrite(bits: 20..<21) + var spi5lpen: SPI5LPEN + + /// SPI 6 clock enable during Sleep mode + @ReadWrite(bits: 21..<22) + var spi6lpen: SPI6LPEN + + /// SAI1 clock enable during sleep mode + @ReadWrite(bits: 22..<23) + var sai1lpen: SAI1LPEN + + /// LTDC clock enable during sleep mode + @ReadWrite(bits: 26..<27) + var ltdclpen: LTDCLPEN + + /// SAI2 clock enable during sleep mode + @ReadWrite(bits: 23..<24) + var sai2lpen: SAI2LPEN + + /// SDMMC1 clock enable during Sleep mode + @ReadWrite(bits: 11..<12) + var sdmmc1lpen: SDMMC1LPEN + } + + /// Backup domain control register + @Register(bitWidth: 32) + struct BDCR { + /// Backup domain software reset + @ReadWrite(bits: 16..<17, as: BDRSTValues.self) + var bdrst: BDRST + + /// RTC clock enable + @ReadWrite(bits: 15..<16, as: RTCENValues.self) + var rtcen: RTCEN + + /// External low-speed oscillator bypass + @ReadWrite(bits: 2..<3, as: LSEBYPValues.self) + var lsebyp: LSEBYP + + /// External low-speed oscillator ready + @ReadOnly(bits: 1..<2) + var lserdy: LSERDY + + /// External low-speed oscillator enable + @ReadWrite(bits: 0..<1, as: LSEONValues.self) + var lseon: LSEON + + /// LSE oscillator drive capability + @ReadWrite(bits: 3..<5, as: LSEDRVValues.self) + var lsedrv: LSEDRV + + /// RTC clock source selection + @Reserved(bits: 8..<10, as: RTCSELValues.self) + var rtcsel: RTCSEL + } + + /// clock control & status register + @Register(bitWidth: 32) + struct CSR { + /// Low-power reset flag + @ReadWrite(bits: 31..<32) + var lpwrrstf: LPWRRSTF + + /// Window watchdog reset flag + @ReadWrite(bits: 30..<31) + var wwdgrstf: WWDGRSTF + + /// Independent watchdog reset flag + @ReadWrite(bits: 29..<30) + var wdgrstf: WDGRSTF + + /// Software reset flag + @ReadWrite(bits: 28..<29) + var sftrstf: SFTRSTF + + /// POR/PDR reset flag + @ReadWrite(bits: 27..<28) + var porrstf: PORRSTF + + /// PIN reset flag + @ReadWrite(bits: 26..<27) + var padrstf: PADRSTF + + /// BOR reset flag + @ReadWrite(bits: 25..<26) + var borrstf: BORRSTF + + /// Remove reset flag + @ReadWrite(bits: 24..<25) + var rmvf: RMVF + + /// Internal low-speed oscillator ready + @ReadOnly(bits: 1..<2) + var lsirdy: LSIRDY + + /// Internal low-speed oscillator enable + @ReadWrite(bits: 0..<1, as: LSIONValues.self) + var lsion: LSION + } + + /// spread spectrum clock generation register + @Register(bitWidth: 32) + struct SSCGR { + /// Spread spectrum modulation enable + @ReadWrite(bits: 31..<32, as: SSCGENValues.self) + var sscgen: SSCGEN + + /// Spread Select + @ReadWrite(bits: 30..<31, as: SPREADSELValues.self) + var spreadsel: SPREADSEL + + /// Incrementation step + @ReadWrite(bits: 13..<28) + var incstep: INCSTEP + + /// Modulation period + @ReadWrite(bits: 0..<13) + var modper: MODPER + } + + /// PLLI2S configuration register + @Register(bitWidth: 32) + struct PLLI2SCFGR { + /// PLLI2S division factor for I2S clocks + @ReadWrite(bits: 28..<31) + var plli2sr: PLLI2SR + + /// PLLI2S division factor for SAI1 clock + @ReadWrite(bits: 24..<28) + var plli2sq: PLLI2SQ + + /// PLLI2S multiplication factor for VCO + @ReadWrite(bits: 6..<15) + var plli2sn: PLLI2SN + + /// PLLI2S division factor for SPDIFRX clock + @ReadWrite(bits: 16..<18, as: PLLI2SPValues.self) + var plli2sp: PLLI2SP + } + + /// PLL configuration register + @Register(bitWidth: 32) + struct PLLSAICFGR { + /// PLLSAI division factor for VCO + @ReadWrite(bits: 6..<15) + var pllsain: PLLSAIN + + /// PLLSAI division factor for 48MHz clock + @ReadWrite(bits: 16..<18, as: PLLSAIPValues.self) + var pllsaip: PLLSAIP + + /// PLLSAI division factor for SAI clock + @ReadWrite(bits: 24..<28) + var pllsaiq: PLLSAIQ + + /// PLLSAI division factor for LCD clock + @ReadWrite(bits: 28..<31) + var pllsair: PLLSAIR + } + + /// dedicated clocks configuration register + @Register(bitWidth: 32) + struct DCKCFGR1 { + /// PLLI2S division factor for SAI1 clock + @ReadWrite(bits: 0..<5, as: PLLI2SDIVQValues.self) + var plli2sdivq: PLLI2SDIVQ + + /// PLLSAI division factor for SAI1 clock + @ReadWrite(bits: 8..<13, as: PLLSAIDIVQValues.self) + var pllsaidivq: PLLSAIDIVQ + + /// division factor for LCD_CLK + @ReadWrite(bits: 16..<18, as: PLLSAIDIVRValues.self) + var pllsaidivr: PLLSAIDIVR + + /// SAI1 clock source selection + @ReadWrite(bits: 20..<22, as: SAI1SELValues.self) + var sai1sel: SAI1SEL + + /// SAI2 clock source selection + @ReadWrite(bits: 22..<24, as: SAI2SELValues.self) + var sai2sel: SAI2SEL + + /// Timers clocks prescalers selection + @ReadWrite(bits: 24..<25, as: TIMPREValues.self) + var timpre: TIMPRE + } + + /// dedicated clocks configuration register + @Register(bitWidth: 32) + struct DCKCFGR2 { + /// USART 1 clock source selection + @ReadWrite(bits: 0..<2, as: USART1SELValues.self) + var usart1sel: USART1SEL + + /// USART 2 clock source selection + @ReadWrite(bits: 2..<4, as: USART2SELValues.self) + var usart2sel: USART2SEL + + /// USART 3 clock source selection + @ReadWrite(bits: 4..<6) + var usart3sel: USART3SEL + + /// UART 4 clock source selection + @ReadWrite(bits: 6..<8) + var uart4sel: UART4SEL + + /// UART 5 clock source selection + @ReadWrite(bits: 8..<10) + var uart5sel: UART5SEL + + /// USART 6 clock source selection + @ReadWrite(bits: 10..<12) + var usart6sel: USART6SEL + + /// UART 7 clock source selection + @ReadWrite(bits: 12..<14) + var uart7sel: UART7SEL + + /// UART 8 clock source selection + @ReadWrite(bits: 14..<16) + var uart8sel: UART8SEL + + /// I2C1 clock source selection + @ReadWrite(bits: 16..<18, as: I2C1SELValues.self) + var i2c1sel: I2C1SEL + + /// I2C2 clock source selection + @ReadWrite(bits: 18..<20) + var i2c2sel: I2C2SEL + + /// I2C3 clock source selection + @ReadWrite(bits: 20..<22) + var i2c3sel: I2C3SEL + + /// I2C4 clock source selection + @ReadWrite(bits: 22..<24) + var i2c4sel: I2C4SEL + + /// Low power timer 1 clock source selection + @ReadWrite(bits: 24..<26, as: LPTIM1SELValues.self) + var lptim1sel: LPTIM1SEL + + /// HDMI-CEC clock source selection + @ReadWrite(bits: 26..<27, as: CECSELValues.self) + var cecsel: CECSEL + + /// 48MHz clock source selection + @ReadWrite(bits: 27..<28, as: CK48MSELValues.self) + var ck48msel: CK48MSEL + + /// SDMMC clock source selection + @ReadWrite(bits: 28..<29, as: SDMMC1SELValues.self) + var sdmmc1sel: SDMMC1SEL + } +} + +extension RCC.CR { + struct CSSONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock security system disabled (clock detector OFF) + static let Off = Self(rawValue: 0x0) + + /// Clock security system enable (clock detector ON if the HSE is ready, OFF if not) + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// HSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock Off + static let Off = Self(rawValue: 0x0) + + /// Clock On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSI clock selected as PLL and PLLI2S clock entry + static let HSI = Self(rawValue: 0x0) + + /// HSE oscillator clock selected as PLL and PLLI2S clock entry + static let HSE = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLP=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLP=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLP=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLLP=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO2Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// System clock (SYSCLK) selected + static let SYSCLK = Self(rawValue: 0x0) + + /// PLLI2S clock selected + static let PLLI2S = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1PREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// No division + static let Div1 = Self(rawValue: 0x0) + + /// Division by 2 + static let Div2 = Self(rawValue: 0x4) + + /// Division by 3 + static let Div3 = Self(rawValue: 0x5) + + /// Division by 4 + static let Div4 = Self(rawValue: 0x6) + + /// Division by 5 + static let Div5 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct I2SSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// PLLI2S clock used as I2S clock source + static let PLLI2S = Self(rawValue: 0x0) + + /// External clock mapped on the I2S_CKIN pin used as I2S clock source + static let CKIN = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI clock selected + static let HSI = Self(rawValue: 0x0) + + /// LSE oscillator selected + static let LSE = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct PPRE1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// HCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// HCLK divided by 2 + static let Div2 = Self(rawValue: 0x4) + + /// HCLK divided by 4 + static let Div4 = Self(rawValue: 0x5) + + /// HCLK divided by 8 + static let Div8 = Self(rawValue: 0x6) + + /// HCLK divided by 16 + static let Div16 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct HPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// SYSCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// SYSCLK divided by 2 + static let Div2 = Self(rawValue: 0x8) + + /// SYSCLK divided by 4 + static let Div4 = Self(rawValue: 0x9) + + /// SYSCLK divided by 8 + static let Div8 = Self(rawValue: 0xa) + + /// SYSCLK divided by 16 + static let Div16 = Self(rawValue: 0xb) + + /// SYSCLK divided by 64 + static let Div64 = Self(rawValue: 0xc) + + /// SYSCLK divided by 128 + static let Div128 = Self(rawValue: 0xd) + + /// SYSCLK divided by 256 + static let Div256 = Self(rawValue: 0xe) + + /// SYSCLK divided by 512 + static let Div512 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct SWValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI selected as system clock + static let HSI = Self(rawValue: 0x0) + + /// HSE selected as system clock + static let HSE = Self(rawValue: 0x1) + + /// PLL selected as system clock + static let PLL = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CIR { + struct LSIRDYIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1RSTR { + struct GPIOARSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2RSTR { + struct DCMIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3RSTR { + struct FMCRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1RSTR { + struct TIM2RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2RSTR { + struct TIM1RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1ENR { + struct GPIOAENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2ENR { + struct DCMIENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3ENR { + struct FMCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1ENR { + struct TIM2ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2ENR { + struct TIM1ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1LPENR { + struct GPIOALPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2LPENR { + struct DCMILPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3LPENR { + struct FMCLPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1LPENR { + struct TIM2LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2LPENR { + struct TIM1LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct BDRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset not activated + static let Disabled = Self(rawValue: 0x0) + + /// Reset the entire RTC domain + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RTC clock disabled + static let Disabled = Self(rawValue: 0x0) + + /// RTC clock enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// LSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSE oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEDRVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low drive capacity + static let Low = Self(rawValue: 0x0) + + /// Medium-high drive capacity + static let MediumHigh = Self(rawValue: 0x1) + + /// Medium-low drive capacity + static let MediumLow = Self(rawValue: 0x2) + + /// High drive capacity + static let High = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No clock + static let NoClock = Self(rawValue: 0x0) + + /// LSE oscillator clock used as RTC clock + static let LSE = Self(rawValue: 0x1) + + /// LSI oscillator clock used as RTC clock + static let LSI = Self(rawValue: 0x2) + + /// HSE oscillator clock divided by a prescaler used as RTC clock + static let HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CSR { + struct LSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSI oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSI oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SSCGENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Spread spectrum modulation disabled + static let Disabled = Self(rawValue: 0x0) + + /// Spread spectrum modulation enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SPREADSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Center spread + static let Center = Self(rawValue: 0x0) + + /// Down spread + static let Down = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLI2SCFGR { + struct PLLI2SPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLSAICFGR { + struct PLLSAIPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLI2SDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLI2SDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLI2SDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLI2SDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLI2SDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLI2SDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLI2SDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLI2SDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLI2SDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLI2SDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLI2SDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLI2SDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLI2SDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLI2SDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLI2SDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLI2SDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLI2SDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLI2SDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLI2SDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLI2SDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLI2SDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLI2SDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLI2SDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLI2SDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLI2SDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLI2SDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLI2SDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLI2SDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLI2SDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLI2SDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLI2SDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLI2SDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLI2SDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLSAIDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLSAIDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLSAIDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLSAIDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLSAIDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLSAIDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLSAIDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLSAIDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLSAIDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLSAIDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLSAIDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLSAIDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLSAIDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLSAIDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLSAIDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLSAIDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLSAIDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLSAIDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLSAIDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLSAIDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLSAIDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLSAIDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLSAIDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLSAIDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLSAIDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLSAIDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLSAIDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLSAIDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLSAIDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLSAIDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLSAIDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLSAIDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLSAIDIVR = /2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLSAIDIVR = /4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLSAIDIVR = /8 + static let Div8 = Self(rawValue: 0x2) + + /// PLLSAIDIVR = /16 + static let Div16 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI1 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI1 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI1 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI1 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI2 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI2 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI2 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI2 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct TIMPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// If the APB prescaler is configured 1, TIMxCLK = PCLKx. Otherwise, TIMxCLK = 2xPCLKx + static let Mul1Or2 = Self(rawValue: 0x0) + + /// If the APB prescaler is configured 1, 2 or 4, TIMxCLK = HCLK. Otherwise, TIMxCLK = 4xPCLKx + static let Mul1Or4 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB2 clock (PCLK2) is selected as USART clock + static let APB2 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) is selected as USART clock + static let APB1 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct I2C1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB clock selected as I2C clock + static let APB = Self(rawValue: 0x0) + + /// System clock selected as I2C clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock selected as I2C clock + static let HSI = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct LPTIM1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) selected as LPTILM1 clock + static let APB1 = Self(rawValue: 0x0) + + /// LSI clock is selected as LPTILM1 clock + static let LSI = Self(rawValue: 0x1) + + /// HSI clock is selected as LPTILM1 clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as LPTILM1 clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CECSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE clock is selected as HDMI-CEC clock + static let LSE = Self(rawValue: 0x0) + + /// HSI divided by 488 clock is selected as HDMI-CEC clock + static let HSI_Div488 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CK48MSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48MHz clock from PLL is selected + static let PLL = Self(rawValue: 0x0) + + /// 48MHz clock from PLLSAI is selected + static let PLLSAI = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct SDMMC1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48 MHz clock is selected as SD clock + static let CK48M = Self(rawValue: 0x0) + + /// System clock is selected as SD clock + static let SYSCLK = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-lcd-logo/Support/PixelData.c b/stm32-lcd-logo/Sources/Support/PixelData.c similarity index 100% rename from stm32-lcd-logo/Support/PixelData.c rename to stm32-lcd-logo/Sources/Support/PixelData.c diff --git a/stm32-lcd-logo/Support/Startup.c b/stm32-lcd-logo/Sources/Support/Startup.c similarity index 76% rename from stm32-lcd-logo/Support/Startup.c rename to stm32-lcd-logo/Sources/Support/Startup.c index 16ea6367..6838bdc0 100644 --- a/stm32-lcd-logo/Support/Startup.c +++ b/stm32-lcd-logo/Sources/Support/Startup.c @@ -14,6 +14,20 @@ extern int main(int argc, char *argv[]); +void *memset(void *b, int c, size_t len) { + for (int i = 0; i < len; i++) { + ((char *)b)[i] = c; + } + return b; +} + +void *memcpy(void *restrict dst, const void *restrict src, size_t n) { + for (int i = 0; i < n; i++) { + ((char *)dst)[i] = ((char *)src)[i]; + } + return dst; +} + void reset(void) { main(0, NULL); } diff --git a/stm32-lcd-logo/Support/Volatile.swift b/stm32-lcd-logo/Sources/Support/include/Support.h similarity index 66% rename from stm32-lcd-logo/Support/Volatile.swift rename to stm32-lcd-logo/Sources/Support/include/Support.h index f7041c3b..3c103eae 100644 --- a/stm32-lcd-logo/Support/Volatile.swift +++ b/stm32-lcd-logo/Sources/Support/include/Support.h @@ -1,20 +1,20 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -extension UnsafeMutablePointer where Pointee == UInt32 { - func volatileLoad() -> Pointee { - volatile_load_uint32_t(self) - } - - func volatileStore(_ value: Pointee) { - volatile_store_uint32_t(self, value) - } -} +//===----------------------------------------------------------------------===// +// +// This source file is part of the Swift open source project +// +// Copyright (c) 2023 Apple Inc. and the Swift project authors. +// Licensed under Apache License v2.0 with Runtime Library Exception +// +// See https://swift.org/LICENSE.txt for license information +// +//===----------------------------------------------------------------------===// + +#pragma once + +#include + +static inline void nop() { + asm volatile("nop"); +} + +extern uint32_t const * const logoPixelDataStartPointer; diff --git a/stm32-lcd-logo/Support/Board.swift b/stm32-lcd-logo/Support/Board.swift deleted file mode 100644 index bf850d29..00000000 --- a/stm32-lcd-logo/Support/Board.swift +++ /dev/null @@ -1,79 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -struct STM32F746Board { - var led: HALGPIO - - init() { - // Configure LED on I1 - STM32F746.enableGPIOPortClock(.i) - led = HALGPIO(pin: .init(port: .i, number: 1)) - led.configure( - configuration: .init( - mode: .output, outputType: .pushPull, outputSpeed: .high, pull: .down, - alternateFunction: .none, activeHigh: true)) - led.deassert() - - STM32F746.initializeLTCD() - - STM32F746.configureFlash() - - STM32F746.configureLTCD() - } - - mutating func ledOn() { - led.assert() - } - - mutating func ledOff() { - led.deassert() - } - - mutating func delay(milliseconds: Int) { - for _ in 0..<100_000 * milliseconds { - nop() - } - } - - mutating func moveLogo(to point: Point) { - STM32F746.setLayer2Position(point) - } - - mutating func setBackgroundColor(color: Color) { - STM32F746.setBackgroundColor(color) - } - - var displaySize: Size { - Size( - width: STM32F746.LTDCConstants.displayWidth, - height: STM32F746.LTDCConstants.displayHeight) - } - - var logoLayerSize: Size { - Size(width: 50, height: 50) - } -} - -struct Point { - var x, y: Int - - func offset(by: Point) -> Point { - Point(x: x + by.x, y: y + by.y) - } -} - -struct Size { - var width, height: Int -} - -struct Color { - var r, g, b: Int -} diff --git a/stm32-lcd-logo/Support/BridgingHeader.h b/stm32-lcd-logo/Support/BridgingHeader.h deleted file mode 100644 index 7713eba8..00000000 --- a/stm32-lcd-logo/Support/BridgingHeader.h +++ /dev/null @@ -1,28 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -#pragma once - -#include - -static inline uint32_t volatile_load_uint32_t(const volatile uint32_t * _Nonnull source) { - return *((const volatile uint32_t * _Nonnull) source); -} - -static inline void volatile_store_uint32_t(volatile uint32_t * _Nonnull destination, uint32_t value) { - *((volatile uint32_t * _Nonnull) destination) = value; -} - -static inline void nop() { - asm volatile("nop"); -} - -extern uint32_t *logoPixelDataStartPointer; diff --git a/stm32-lcd-logo/Support/GPIO.swift b/stm32-lcd-logo/Support/GPIO.swift deleted file mode 100644 index 5f5eb996..00000000 --- a/stm32-lcd-logo/Support/GPIO.swift +++ /dev/null @@ -1,2097 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -// swift-format-ignore-file - -/// General-purpose I/Os -struct GPIO { - var baseAddress: UnsafeMutableRawPointer - - enum Offsets { - static let MODER: Int32 = 0x0 - static let OTYPER: Int32 = 0x4 - static let OSPEEDR: Int32 = 0x8 - static let PUPDR: Int32 = 0xc - static let IDR: Int32 = 0x10 - static let ODR: Int32 = 0x14 - static let BSRR: Int32 = 0x18 - static let LCKR: Int32 = 0x1c - static let AFRL: Int32 = 0x20 - static let AFRH: Int32 = 0x24 - static let BRR: Int32 = 0x28 - } - - private func ld(_ offset: Int32) -> UInt32 { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileLoad() - } - - private func st(_ offset: Int32, _ value: UInt32) { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileStore(value) - } - - /// GPIO port mode register - var moder: MODER { - get { MODER(rawValue: ld(Offsets.MODER)) } - set { st(Offsets.MODER, newValue.rawValue) } - } - /// GPIO port output type register - var otyper: OTYPER { - get { OTYPER(rawValue: ld(Offsets.OTYPER)) } - set { st(Offsets.OTYPER, newValue.rawValue) } - } - /// GPIO port output speed register - var ospeedr: OSPEEDR { - get { OSPEEDR(rawValue: ld(Offsets.OSPEEDR)) } - set { st(Offsets.OSPEEDR, newValue.rawValue) } - } - /// GPIO port pull-up/pull-down register - var pupdr: PUPDR { - get { PUPDR(rawValue: ld(Offsets.PUPDR)) } - set { st(Offsets.PUPDR, newValue.rawValue) } - } - /// GPIO port input data register - var idr: IDR { - get { IDR(rawValue: ld(Offsets.IDR)) } - set { st(Offsets.IDR, newValue.rawValue) } - } - /// GPIO port output data register - var odr: ODR { - get { ODR(rawValue: ld(Offsets.ODR)) } - set { st(Offsets.ODR, newValue.rawValue) } - } - /// GPIO port bit set/reset register - var bsrr: BSRR { - get { BSRR(rawValue: ld(Offsets.BSRR)) } - set { st(Offsets.BSRR, newValue.rawValue) } - } - /// GPIO port configuration lock register - var lckr: LCKR { - get { LCKR(rawValue: ld(Offsets.LCKR)) } - set { st(Offsets.LCKR, newValue.rawValue) } - } - /// GPIO alternate function lowregister - var afrl: AFRL { - get { AFRL(rawValue: ld(Offsets.AFRL)) } - set { st(Offsets.AFRL, newValue.rawValue) } - } - /// GPIO alternate function high register - var afrh: AFRH { - get { AFRH(rawValue: ld(Offsets.AFRH)) } - set { st(Offsets.AFRH, newValue.rawValue) } - } - /// GPIO port bit reset register - var brr: BRR { - get { BRR(rawValue: ld(Offsets.BRR)) } - set { st(Offsets.BRR, newValue.rawValue) } - } -} - -extension GPIO { - struct MODER { - var rawValue: UInt32 - - static let moder15_offset = UInt32(30) - static let moder15_mask = UInt32(0b11) &<< moder15_offset - var moder15: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder15_mask)) >> GPIO.MODER.moder15_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder15_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder15_offset) & GPIO.MODER.moder15_mask - self.rawValue = preserve | shift - } - } - - static let moder14_offset = UInt32(28) - static let moder14_mask = UInt32(0b11) &<< moder14_offset - var moder14: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder14_mask)) >> GPIO.MODER.moder14_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder14_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder14_offset) & GPIO.MODER.moder14_mask - self.rawValue = preserve | shift - } - } - - static let moder13_offset = UInt32(26) - static let moder13_mask = UInt32(0b11) &<< moder13_offset - var moder13: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder13_mask)) >> GPIO.MODER.moder13_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder13_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder13_offset) & GPIO.MODER.moder13_mask - self.rawValue = preserve | shift - } - } - - static let moder12_offset = UInt32(24) - static let moder12_mask = UInt32(0b11) &<< moder12_offset - var moder12: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder12_mask)) >> GPIO.MODER.moder12_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder12_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder12_offset) & GPIO.MODER.moder12_mask - self.rawValue = preserve | shift - } - } - - static let moder11_offset = UInt32(22) - static let moder11_mask = UInt32(0b11) &<< moder11_offset - var moder11: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder11_mask)) >> GPIO.MODER.moder11_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder11_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder11_offset) & GPIO.MODER.moder11_mask - self.rawValue = preserve | shift - } - } - - static let moder10_offset = UInt32(20) - static let moder10_mask = UInt32(0b11) &<< moder10_offset - var moder10: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder10_mask)) >> GPIO.MODER.moder10_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder10_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder10_offset) & GPIO.MODER.moder10_mask - self.rawValue = preserve | shift - } - } - - static let moder9_offset = UInt32(18) - static let moder9_mask = UInt32(0b11) &<< moder9_offset - var moder9: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder9_mask)) >> GPIO.MODER.moder9_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder9_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder9_offset) & GPIO.MODER.moder9_mask - self.rawValue = preserve | shift - } - } - - static let moder8_offset = UInt32(16) - static let moder8_mask = UInt32(0b11) &<< moder8_offset - var moder8: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder8_mask)) >> GPIO.MODER.moder8_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder8_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder8_offset) & GPIO.MODER.moder8_mask - self.rawValue = preserve | shift - } - } - - static let moder7_offset = UInt32(14) - static let moder7_mask = UInt32(0b11) &<< moder7_offset - var moder7: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder7_mask)) >> GPIO.MODER.moder7_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder7_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder7_offset) & GPIO.MODER.moder7_mask - self.rawValue = preserve | shift - } - } - - static let moder6_offset = UInt32(12) - static let moder6_mask = UInt32(0b11) &<< moder6_offset - var moder6: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder6_mask)) >> GPIO.MODER.moder6_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder6_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder6_offset) & GPIO.MODER.moder6_mask - self.rawValue = preserve | shift - } - } - - static let moder5_offset = UInt32(10) - static let moder5_mask = UInt32(0b11) &<< moder5_offset - var moder5: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder5_mask)) >> GPIO.MODER.moder5_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder5_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder5_offset) & GPIO.MODER.moder5_mask - self.rawValue = preserve | shift - } - } - - static let moder4_offset = UInt32(8) - static let moder4_mask = UInt32(0b11) &<< moder4_offset - var moder4: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder4_mask)) >> GPIO.MODER.moder4_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder4_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder4_offset) & GPIO.MODER.moder4_mask - self.rawValue = preserve | shift - } - } - - static let moder3_offset = UInt32(6) - static let moder3_mask = UInt32(0b11) &<< moder3_offset - var moder3: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder3_mask)) >> GPIO.MODER.moder3_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder3_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder3_offset) & GPIO.MODER.moder3_mask - self.rawValue = preserve | shift - } - } - - static let moder2_offset = UInt32(4) - static let moder2_mask = UInt32(0b11) &<< moder2_offset - var moder2: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder2_mask)) >> GPIO.MODER.moder2_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder2_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder2_offset) & GPIO.MODER.moder2_mask - self.rawValue = preserve | shift - } - } - - static let moder1_offset = UInt32(2) - static let moder1_mask = UInt32(0b11) &<< moder1_offset - var moder1: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder1_mask)) >> GPIO.MODER.moder1_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder1_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder1_offset) & GPIO.MODER.moder1_mask - self.rawValue = preserve | shift - } - } - - static let moder0_offset = UInt32(0) - static let moder0_mask = UInt32(0b11) &<< moder0_offset - var moder0: UInt8 { - get { UInt8((self.rawValue & (GPIO.MODER.moder0_mask)) >> GPIO.MODER.moder0_offset) } - set { - let preserve = self.rawValue & ~GPIO.MODER.moder0_mask - let shift = (UInt32(newValue) << GPIO.MODER.moder0_offset) & GPIO.MODER.moder0_mask - self.rawValue = preserve | shift - } - } - - func moder(n: Int) -> UInt8 { - precondition(n >= 0 && n < 16) - let moder_offset = n * 2 - let moder_mask = UInt32(0b11) &<< moder_offset - return UInt8((self.rawValue & (moder_mask)) &>> moder_offset) - } - - mutating func setModer(n: Int, value: UInt8) { - precondition(n >= 0 && n < 16) - precondition(value < 4) - let moder_offset = n * 2 - let moder_mask = UInt32(0b11) &<< moder_offset - let preserve = self.rawValue & ~moder_mask - let shift = (UInt32(value) << moder_offset) & moder_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct OTYPER { - var rawValue: UInt32 - - static let ot15_offset = UInt32(15) - static let ot15_mask = UInt32(0b1) &<< ot15_offset - var ot15: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot15_mask)) >> GPIO.OTYPER.ot15_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot15_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot15_offset) & GPIO.OTYPER.ot15_mask - self.rawValue = preserve | shift - } - } - - static let ot14_offset = UInt32(14) - static let ot14_mask = UInt32(0b1) &<< ot14_offset - var ot14: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot14_mask)) >> GPIO.OTYPER.ot14_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot14_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot14_offset) & GPIO.OTYPER.ot14_mask - self.rawValue = preserve | shift - } - } - - static let ot13_offset = UInt32(13) - static let ot13_mask = UInt32(0b1) &<< ot13_offset - var ot13: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot13_mask)) >> GPIO.OTYPER.ot13_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot13_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot13_offset) & GPIO.OTYPER.ot13_mask - self.rawValue = preserve | shift - } - } - - static let ot12_offset = UInt32(12) - static let ot12_mask = UInt32(0b1) &<< ot12_offset - var ot12: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot12_mask)) >> GPIO.OTYPER.ot12_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot12_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot12_offset) & GPIO.OTYPER.ot12_mask - self.rawValue = preserve | shift - } - } - - static let ot11_offset = UInt32(11) - static let ot11_mask = UInt32(0b1) &<< ot11_offset - var ot11: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot11_mask)) >> GPIO.OTYPER.ot11_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot11_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot11_offset) & GPIO.OTYPER.ot11_mask - self.rawValue = preserve | shift - } - } - - static let ot10_offset = UInt32(10) - static let ot10_mask = UInt32(0b1) &<< ot10_offset - var ot10: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot10_mask)) >> GPIO.OTYPER.ot10_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot10_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot10_offset) & GPIO.OTYPER.ot10_mask - self.rawValue = preserve | shift - } - } - - static let ot9_offset = UInt32(9) - static let ot9_mask = UInt32(0b1) &<< ot9_offset - var ot9: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot9_mask)) >> GPIO.OTYPER.ot9_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot9_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot9_offset) & GPIO.OTYPER.ot9_mask - self.rawValue = preserve | shift - } - } - - static let ot8_offset = UInt32(8) - static let ot8_mask = UInt32(0b1) &<< ot8_offset - var ot8: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot8_mask)) >> GPIO.OTYPER.ot8_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot8_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot8_offset) & GPIO.OTYPER.ot8_mask - self.rawValue = preserve | shift - } - } - - static let ot7_offset = UInt32(7) - static let ot7_mask = UInt32(0b1) &<< ot7_offset - var ot7: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot7_mask)) >> GPIO.OTYPER.ot7_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot7_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot7_offset) & GPIO.OTYPER.ot7_mask - self.rawValue = preserve | shift - } - } - - static let ot6_offset = UInt32(6) - static let ot6_mask = UInt32(0b1) &<< ot6_offset - var ot6: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot6_mask)) >> GPIO.OTYPER.ot6_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot6_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot6_offset) & GPIO.OTYPER.ot6_mask - self.rawValue = preserve | shift - } - } - - static let ot5_offset = UInt32(5) - static let ot5_mask = UInt32(0b1) &<< ot5_offset - var ot5: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot5_mask)) >> GPIO.OTYPER.ot5_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot5_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot5_offset) & GPIO.OTYPER.ot5_mask - self.rawValue = preserve | shift - } - } - - static let ot4_offset = UInt32(4) - static let ot4_mask = UInt32(0b1) &<< ot4_offset - var ot4: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot4_mask)) >> GPIO.OTYPER.ot4_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot4_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot4_offset) & GPIO.OTYPER.ot4_mask - self.rawValue = preserve | shift - } - } - - static let ot3_offset = UInt32(3) - static let ot3_mask = UInt32(0b1) &<< ot3_offset - var ot3: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot3_mask)) >> GPIO.OTYPER.ot3_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot3_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot3_offset) & GPIO.OTYPER.ot3_mask - self.rawValue = preserve | shift - } - } - - static let ot2_offset = UInt32(2) - static let ot2_mask = UInt32(0b1) &<< ot2_offset - var ot2: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot2_mask)) >> GPIO.OTYPER.ot2_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot2_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot2_offset) & GPIO.OTYPER.ot2_mask - self.rawValue = preserve | shift - } - } - - static let ot1_offset = UInt32(1) - static let ot1_mask = UInt32(0b1) &<< ot1_offset - var ot1: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot1_mask)) >> GPIO.OTYPER.ot1_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot1_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot1_offset) & GPIO.OTYPER.ot1_mask - self.rawValue = preserve | shift - } - } - - static let ot0_offset = UInt32(0) - static let ot0_mask = UInt32(0b1) &<< ot0_offset - var ot0: UInt8 { - get { UInt8((self.rawValue & (GPIO.OTYPER.ot0_mask)) >> GPIO.OTYPER.ot0_offset) } - set { - let preserve = self.rawValue & ~GPIO.OTYPER.ot0_mask - let shift = (UInt32(newValue) << GPIO.OTYPER.ot0_offset) & GPIO.OTYPER.ot0_mask - self.rawValue = preserve | shift - } - } - - func ot(n: Int) -> UInt8 { - precondition(n >= 0 && n < 16) - let ot_offset = n * 1 - let ot_mask = UInt32(0b1) &<< ot_offset - return UInt8((self.rawValue & (ot_mask)) &>> ot_offset) - } - - mutating func setOt(n: Int, value: UInt8) { - precondition(n >= 0 && n < 16) - precondition(value < 2) - let ot_offset = n * 1 - let ot_mask = UInt32(0b1) &<< ot_offset - let preserve = self.rawValue & ~ot_mask - let shift = (UInt32(value) << ot_offset) & ot_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct OSPEEDR { - var rawValue: UInt32 - - static let ospeedr15_offset = UInt32(30) - static let ospeedr15_mask = UInt32(0b11) &<< ospeedr15_offset - var ospeedr15: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr15_mask)) >> GPIO.OSPEEDR.ospeedr15_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr15_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr15_offset) & GPIO.OSPEEDR.ospeedr15_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr14_offset = UInt32(28) - static let ospeedr14_mask = UInt32(0b11) &<< ospeedr14_offset - var ospeedr14: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr14_mask)) >> GPIO.OSPEEDR.ospeedr14_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr14_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr14_offset) & GPIO.OSPEEDR.ospeedr14_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr13_offset = UInt32(26) - static let ospeedr13_mask = UInt32(0b11) &<< ospeedr13_offset - var ospeedr13: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr13_mask)) >> GPIO.OSPEEDR.ospeedr13_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr13_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr13_offset) & GPIO.OSPEEDR.ospeedr13_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr12_offset = UInt32(24) - static let ospeedr12_mask = UInt32(0b11) &<< ospeedr12_offset - var ospeedr12: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr12_mask)) >> GPIO.OSPEEDR.ospeedr12_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr12_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr12_offset) & GPIO.OSPEEDR.ospeedr12_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr11_offset = UInt32(22) - static let ospeedr11_mask = UInt32(0b11) &<< ospeedr11_offset - var ospeedr11: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr11_mask)) >> GPIO.OSPEEDR.ospeedr11_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr11_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr11_offset) & GPIO.OSPEEDR.ospeedr11_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr10_offset = UInt32(20) - static let ospeedr10_mask = UInt32(0b11) &<< ospeedr10_offset - var ospeedr10: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr10_mask)) >> GPIO.OSPEEDR.ospeedr10_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr10_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr10_offset) & GPIO.OSPEEDR.ospeedr10_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr9_offset = UInt32(18) - static let ospeedr9_mask = UInt32(0b11) &<< ospeedr9_offset - var ospeedr9: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr9_mask)) >> GPIO.OSPEEDR.ospeedr9_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr9_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr9_offset) & GPIO.OSPEEDR.ospeedr9_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr8_offset = UInt32(16) - static let ospeedr8_mask = UInt32(0b11) &<< ospeedr8_offset - var ospeedr8: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr8_mask)) >> GPIO.OSPEEDR.ospeedr8_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr8_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr8_offset) & GPIO.OSPEEDR.ospeedr8_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr7_offset = UInt32(14) - static let ospeedr7_mask = UInt32(0b11) &<< ospeedr7_offset - var ospeedr7: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr7_mask)) >> GPIO.OSPEEDR.ospeedr7_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr7_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr7_offset) & GPIO.OSPEEDR.ospeedr7_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr6_offset = UInt32(12) - static let ospeedr6_mask = UInt32(0b11) &<< ospeedr6_offset - var ospeedr6: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr6_mask)) >> GPIO.OSPEEDR.ospeedr6_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr6_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr6_offset) & GPIO.OSPEEDR.ospeedr6_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr5_offset = UInt32(10) - static let ospeedr5_mask = UInt32(0b11) &<< ospeedr5_offset - var ospeedr5: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr5_mask)) >> GPIO.OSPEEDR.ospeedr5_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr5_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr5_offset) & GPIO.OSPEEDR.ospeedr5_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr4_offset = UInt32(8) - static let ospeedr4_mask = UInt32(0b11) &<< ospeedr4_offset - var ospeedr4: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr4_mask)) >> GPIO.OSPEEDR.ospeedr4_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr4_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr4_offset) & GPIO.OSPEEDR.ospeedr4_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr3_offset = UInt32(6) - static let ospeedr3_mask = UInt32(0b11) &<< ospeedr3_offset - var ospeedr3: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr3_mask)) >> GPIO.OSPEEDR.ospeedr3_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr3_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr3_offset) & GPIO.OSPEEDR.ospeedr3_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr2_offset = UInt32(4) - static let ospeedr2_mask = UInt32(0b11) &<< ospeedr2_offset - var ospeedr2: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr2_mask)) >> GPIO.OSPEEDR.ospeedr2_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr2_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr2_offset) & GPIO.OSPEEDR.ospeedr2_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr1_offset = UInt32(2) - static let ospeedr1_mask = UInt32(0b11) &<< ospeedr1_offset - var ospeedr1: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr1_mask)) >> GPIO.OSPEEDR.ospeedr1_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr1_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr1_offset) & GPIO.OSPEEDR.ospeedr1_mask - self.rawValue = preserve | shift - } - } - - static let ospeedr0_offset = UInt32(0) - static let ospeedr0_mask = UInt32(0b11) &<< ospeedr0_offset - var ospeedr0: UInt8 { - get { UInt8((self.rawValue & (GPIO.OSPEEDR.ospeedr0_mask)) >> GPIO.OSPEEDR.ospeedr0_offset) } - set { - let preserve = self.rawValue & ~GPIO.OSPEEDR.ospeedr0_mask - let shift = (UInt32(newValue) << GPIO.OSPEEDR.ospeedr0_offset) & GPIO.OSPEEDR.ospeedr0_mask - self.rawValue = preserve | shift - } - } - - func ospeed(n: Int) -> UInt8 { - precondition(n >= 0 && n < 16) - let ospeed_offset = n * 2 - let ospeed_mask = UInt32(0b11) &<< ospeed_offset - return UInt8((self.rawValue & (ospeed_mask)) &>> ospeed_offset) - } - - mutating func setOspeed(n: Int, value: UInt8) { - precondition(n >= 0 && n < 16) - precondition(value < 4) - let ospeed_offset = n * 2 - let ospeed_mask = UInt32(0b11) &<< ospeed_offset - let preserve = self.rawValue & ~ospeed_mask - let shift = (UInt32(value) << ospeed_offset) & ospeed_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct PUPDR { - var rawValue: UInt32 - - static let pupdr15_offset = UInt32(30) - static let pupdr15_mask = UInt32(0b11) &<< pupdr15_offset - var pupdr15: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr15_mask)) >> GPIO.PUPDR.pupdr15_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr15_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr15_offset) & GPIO.PUPDR.pupdr15_mask - self.rawValue = preserve | shift - } - } - - static let pupdr14_offset = UInt32(28) - static let pupdr14_mask = UInt32(0b11) &<< pupdr14_offset - var pupdr14: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr14_mask)) >> GPIO.PUPDR.pupdr14_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr14_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr14_offset) & GPIO.PUPDR.pupdr14_mask - self.rawValue = preserve | shift - } - } - - static let pupdr13_offset = UInt32(26) - static let pupdr13_mask = UInt32(0b11) &<< pupdr13_offset - var pupdr13: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr13_mask)) >> GPIO.PUPDR.pupdr13_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr13_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr13_offset) & GPIO.PUPDR.pupdr13_mask - self.rawValue = preserve | shift - } - } - - static let pupdr12_offset = UInt32(24) - static let pupdr12_mask = UInt32(0b11) &<< pupdr12_offset - var pupdr12: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr12_mask)) >> GPIO.PUPDR.pupdr12_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr12_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr12_offset) & GPIO.PUPDR.pupdr12_mask - self.rawValue = preserve | shift - } - } - - static let pupdr11_offset = UInt32(22) - static let pupdr11_mask = UInt32(0b11) &<< pupdr11_offset - var pupdr11: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr11_mask)) >> GPIO.PUPDR.pupdr11_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr11_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr11_offset) & GPIO.PUPDR.pupdr11_mask - self.rawValue = preserve | shift - } - } - - static let pupdr10_offset = UInt32(20) - static let pupdr10_mask = UInt32(0b11) &<< pupdr10_offset - var pupdr10: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr10_mask)) >> GPIO.PUPDR.pupdr10_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr10_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr10_offset) & GPIO.PUPDR.pupdr10_mask - self.rawValue = preserve | shift - } - } - - static let pupdr9_offset = UInt32(18) - static let pupdr9_mask = UInt32(0b11) &<< pupdr9_offset - var pupdr9: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr9_mask)) >> GPIO.PUPDR.pupdr9_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr9_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr9_offset) & GPIO.PUPDR.pupdr9_mask - self.rawValue = preserve | shift - } - } - - static let pupdr8_offset = UInt32(16) - static let pupdr8_mask = UInt32(0b11) &<< pupdr8_offset - var pupdr8: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr8_mask)) >> GPIO.PUPDR.pupdr8_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr8_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr8_offset) & GPIO.PUPDR.pupdr8_mask - self.rawValue = preserve | shift - } - } - - static let pupdr7_offset = UInt32(14) - static let pupdr7_mask = UInt32(0b11) &<< pupdr7_offset - var pupdr7: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr7_mask)) >> GPIO.PUPDR.pupdr7_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr7_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr7_offset) & GPIO.PUPDR.pupdr7_mask - self.rawValue = preserve | shift - } - } - - static let pupdr6_offset = UInt32(12) - static let pupdr6_mask = UInt32(0b11) &<< pupdr6_offset - var pupdr6: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr6_mask)) >> GPIO.PUPDR.pupdr6_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr6_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr6_offset) & GPIO.PUPDR.pupdr6_mask - self.rawValue = preserve | shift - } - } - - static let pupdr5_offset = UInt32(10) - static let pupdr5_mask = UInt32(0b11) &<< pupdr5_offset - var pupdr5: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr5_mask)) >> GPIO.PUPDR.pupdr5_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr5_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr5_offset) & GPIO.PUPDR.pupdr5_mask - self.rawValue = preserve | shift - } - } - - static let pupdr4_offset = UInt32(8) - static let pupdr4_mask = UInt32(0b11) &<< pupdr4_offset - var pupdr4: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr4_mask)) >> GPIO.PUPDR.pupdr4_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr4_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr4_offset) & GPIO.PUPDR.pupdr4_mask - self.rawValue = preserve | shift - } - } - - static let pupdr3_offset = UInt32(6) - static let pupdr3_mask = UInt32(0b11) &<< pupdr3_offset - var pupdr3: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr3_mask)) >> GPIO.PUPDR.pupdr3_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr3_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr3_offset) & GPIO.PUPDR.pupdr3_mask - self.rawValue = preserve | shift - } - } - - static let pupdr2_offset = UInt32(4) - static let pupdr2_mask = UInt32(0b11) &<< pupdr2_offset - var pupdr2: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr2_mask)) >> GPIO.PUPDR.pupdr2_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr2_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr2_offset) & GPIO.PUPDR.pupdr2_mask - self.rawValue = preserve | shift - } - } - - static let pupdr1_offset = UInt32(2) - static let pupdr1_mask = UInt32(0b11) &<< pupdr1_offset - var pupdr1: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr1_mask)) >> GPIO.PUPDR.pupdr1_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr1_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr1_offset) & GPIO.PUPDR.pupdr1_mask - self.rawValue = preserve | shift - } - } - - static let pupdr0_offset = UInt32(0) - static let pupdr0_mask = UInt32(0b11) &<< pupdr0_offset - var pupdr0: UInt8 { - get { UInt8((self.rawValue & (GPIO.PUPDR.pupdr0_mask)) >> GPIO.PUPDR.pupdr0_offset) } - set { - let preserve = self.rawValue & ~GPIO.PUPDR.pupdr0_mask - let shift = (UInt32(newValue) << GPIO.PUPDR.pupdr0_offset) & GPIO.PUPDR.pupdr0_mask - self.rawValue = preserve | shift - } - } - - func pupd(n: Int) -> UInt8 { - precondition(n >= 0 && n < 16) - let pupd_offset = n * 2 - let pupd_mask = UInt32(0b11) &<< pupd_offset - return UInt8((self.rawValue & (pupd_mask)) &>> pupd_offset) - } - - mutating func setPupd(n: Int, value: UInt8) { - precondition(n >= 0 && n < 16) - precondition(value < 4) - let pupd_offset = n * 2 - let pupd_mask = UInt32(0b11) &<< pupd_offset - let preserve = self.rawValue & ~pupd_mask - let shift = (UInt32(value) << pupd_offset) & pupd_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct IDR { - var rawValue: UInt32 - - static let idr15_offset = UInt32(15) - static let idr15_mask = UInt32(0b1) &<< idr15_offset - var idr15: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr15_mask)) >> GPIO.IDR.idr15_offset) - } - - static let idr14_offset = UInt32(14) - static let idr14_mask = UInt32(0b1) &<< idr14_offset - var idr14: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr14_mask)) >> GPIO.IDR.idr14_offset) - } - - static let idr13_offset = UInt32(13) - static let idr13_mask = UInt32(0b1) &<< idr13_offset - var idr13: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr13_mask)) >> GPIO.IDR.idr13_offset) - } - - static let idr12_offset = UInt32(12) - static let idr12_mask = UInt32(0b1) &<< idr12_offset - var idr12: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr12_mask)) >> GPIO.IDR.idr12_offset) - } - - static let idr11_offset = UInt32(11) - static let idr11_mask = UInt32(0b1) &<< idr11_offset - var idr11: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr11_mask)) >> GPIO.IDR.idr11_offset) - } - - static let idr10_offset = UInt32(10) - static let idr10_mask = UInt32(0b1) &<< idr10_offset - var idr10: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr10_mask)) >> GPIO.IDR.idr10_offset) - } - - static let idr9_offset = UInt32(9) - static let idr9_mask = UInt32(0b1) &<< idr9_offset - var idr9: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr9_mask)) >> GPIO.IDR.idr9_offset) - } - - static let idr8_offset = UInt32(8) - static let idr8_mask = UInt32(0b1) &<< idr8_offset - var idr8: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr8_mask)) >> GPIO.IDR.idr8_offset) - } - - static let idr7_offset = UInt32(7) - static let idr7_mask = UInt32(0b1) &<< idr7_offset - var idr7: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr7_mask)) >> GPIO.IDR.idr7_offset) - } - - static let idr6_offset = UInt32(6) - static let idr6_mask = UInt32(0b1) &<< idr6_offset - var idr6: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr6_mask)) >> GPIO.IDR.idr6_offset) - } - - static let idr5_offset = UInt32(5) - static let idr5_mask = UInt32(0b1) &<< idr5_offset - var idr5: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr5_mask)) >> GPIO.IDR.idr5_offset) - } - - static let idr4_offset = UInt32(4) - static let idr4_mask = UInt32(0b1) &<< idr4_offset - var idr4: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr4_mask)) >> GPIO.IDR.idr4_offset) - } - - static let idr3_offset = UInt32(3) - static let idr3_mask = UInt32(0b1) &<< idr3_offset - var idr3: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr3_mask)) >> GPIO.IDR.idr3_offset) - } - - static let idr2_offset = UInt32(2) - static let idr2_mask = UInt32(0b1) &<< idr2_offset - var idr2: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr2_mask)) >> GPIO.IDR.idr2_offset) - } - - static let idr1_offset = UInt32(1) - static let idr1_mask = UInt32(0b1) &<< idr1_offset - var idr1: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr1_mask)) >> GPIO.IDR.idr1_offset) - } - - static let idr0_offset = UInt32(0) - static let idr0_mask = UInt32(0b1) &<< idr0_offset - var idr0: UInt8 { - UInt8((self.rawValue & (GPIO.IDR.idr0_mask)) >> GPIO.IDR.idr0_offset) - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct ODR { - var rawValue: UInt32 - - static let odr15_offset = UInt32(15) - static let odr15_mask = UInt32(0b1) &<< odr15_offset - var odr15: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr15_mask)) >> GPIO.ODR.odr15_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr15_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr15_offset) & GPIO.ODR.odr15_mask - self.rawValue = preserve | shift - } - } - - static let odr14_offset = UInt32(14) - static let odr14_mask = UInt32(0b1) &<< odr14_offset - var odr14: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr14_mask)) >> GPIO.ODR.odr14_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr14_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr14_offset) & GPIO.ODR.odr14_mask - self.rawValue = preserve | shift - } - } - - static let odr13_offset = UInt32(13) - static let odr13_mask = UInt32(0b1) &<< odr13_offset - var odr13: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr13_mask)) >> GPIO.ODR.odr13_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr13_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr13_offset) & GPIO.ODR.odr13_mask - self.rawValue = preserve | shift - } - } - - static let odr12_offset = UInt32(12) - static let odr12_mask = UInt32(0b1) &<< odr12_offset - var odr12: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr12_mask)) >> GPIO.ODR.odr12_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr12_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr12_offset) & GPIO.ODR.odr12_mask - self.rawValue = preserve | shift - } - } - - static let odr11_offset = UInt32(11) - static let odr11_mask = UInt32(0b1) &<< odr11_offset - var odr11: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr11_mask)) >> GPIO.ODR.odr11_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr11_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr11_offset) & GPIO.ODR.odr11_mask - self.rawValue = preserve | shift - } - } - - static let odr10_offset = UInt32(10) - static let odr10_mask = UInt32(0b1) &<< odr10_offset - var odr10: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr10_mask)) >> GPIO.ODR.odr10_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr10_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr10_offset) & GPIO.ODR.odr10_mask - self.rawValue = preserve | shift - } - } - - static let odr9_offset = UInt32(9) - static let odr9_mask = UInt32(0b1) &<< odr9_offset - var odr9: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr9_mask)) >> GPIO.ODR.odr9_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr9_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr9_offset) & GPIO.ODR.odr9_mask - self.rawValue = preserve | shift - } - } - - static let odr8_offset = UInt32(8) - static let odr8_mask = UInt32(0b1) &<< odr8_offset - var odr8: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr8_mask)) >> GPIO.ODR.odr8_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr8_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr8_offset) & GPIO.ODR.odr8_mask - self.rawValue = preserve | shift - } - } - - static let odr7_offset = UInt32(7) - static let odr7_mask = UInt32(0b1) &<< odr7_offset - var odr7: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr7_mask)) >> GPIO.ODR.odr7_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr7_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr7_offset) & GPIO.ODR.odr7_mask - self.rawValue = preserve | shift - } - } - - static let odr6_offset = UInt32(6) - static let odr6_mask = UInt32(0b1) &<< odr6_offset - var odr6: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr6_mask)) >> GPIO.ODR.odr6_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr6_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr6_offset) & GPIO.ODR.odr6_mask - self.rawValue = preserve | shift - } - } - - static let odr5_offset = UInt32(5) - static let odr5_mask = UInt32(0b1) &<< odr5_offset - var odr5: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr5_mask)) >> GPIO.ODR.odr5_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr5_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr5_offset) & GPIO.ODR.odr5_mask - self.rawValue = preserve | shift - } - } - - static let odr4_offset = UInt32(4) - static let odr4_mask = UInt32(0b1) &<< odr4_offset - var odr4: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr4_mask)) >> GPIO.ODR.odr4_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr4_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr4_offset) & GPIO.ODR.odr4_mask - self.rawValue = preserve | shift - } - } - - static let odr3_offset = UInt32(3) - static let odr3_mask = UInt32(0b1) &<< odr3_offset - var odr3: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr3_mask)) >> GPIO.ODR.odr3_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr3_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr3_offset) & GPIO.ODR.odr3_mask - self.rawValue = preserve | shift - } - } - - static let odr2_offset = UInt32(2) - static let odr2_mask = UInt32(0b1) &<< odr2_offset - var odr2: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr2_mask)) >> GPIO.ODR.odr2_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr2_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr2_offset) & GPIO.ODR.odr2_mask - self.rawValue = preserve | shift - } - } - - static let odr1_offset = UInt32(1) - static let odr1_mask = UInt32(0b1) &<< odr1_offset - var odr1: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr1_mask)) >> GPIO.ODR.odr1_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr1_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr1_offset) & GPIO.ODR.odr1_mask - self.rawValue = preserve | shift - } - } - - static let odr0_offset = UInt32(0) - static let odr0_mask = UInt32(0b1) &<< odr0_offset - var odr0: UInt8 { - get { UInt8((self.rawValue & (GPIO.ODR.odr0_mask)) >> GPIO.ODR.odr0_offset) } - set { - let preserve = self.rawValue & ~GPIO.ODR.odr0_mask - let shift = (UInt32(newValue) << GPIO.ODR.odr0_offset) & GPIO.ODR.odr0_mask - self.rawValue = preserve | shift - } - } - - func od(n: Int) -> UInt8 { - precondition(n >= 0 && n < 16) - let od_offset = n * 1 - let od_mask = UInt32(0b1) &<< od_offset - return UInt8((self.rawValue & (od_mask)) &>> od_offset) - } - - mutating func setOd(n: Int, value: UInt8) { - precondition(n >= 0 && n < 16) - precondition(value < 2) - let od_offset = n * 1 - let od_mask = UInt32(0b1) &<< od_offset - let preserve = self.rawValue & ~od_mask - let shift = (UInt32(value) << od_offset) & od_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct BSRR { - var rawValue: UInt32 - - static let br15_offset = UInt32(31) - static let br15_mask = UInt32(0b1) &<< br15_offset - var br15: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br15_offset) & GPIO.BSRR.br15_mask - } - } - - static let br14_offset = UInt32(30) - static let br14_mask = UInt32(0b1) &<< br14_offset - var br14: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br14_offset) & GPIO.BSRR.br14_mask - } - } - - static let br13_offset = UInt32(29) - static let br13_mask = UInt32(0b1) &<< br13_offset - var br13: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br13_offset) & GPIO.BSRR.br13_mask - } - } - - static let br12_offset = UInt32(28) - static let br12_mask = UInt32(0b1) &<< br12_offset - var br12: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br12_offset) & GPIO.BSRR.br12_mask - } - } - - static let br11_offset = UInt32(27) - static let br11_mask = UInt32(0b1) &<< br11_offset - var br11: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br11_offset) & GPIO.BSRR.br11_mask - } - } - - static let br10_offset = UInt32(26) - static let br10_mask = UInt32(0b1) &<< br10_offset - var br10: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br10_offset) & GPIO.BSRR.br10_mask - } - } - - static let br9_offset = UInt32(25) - static let br9_mask = UInt32(0b1) &<< br9_offset - var br9: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br9_offset) & GPIO.BSRR.br9_mask - } - } - - static let br8_offset = UInt32(24) - static let br8_mask = UInt32(0b1) &<< br8_offset - var br8: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br8_offset) & GPIO.BSRR.br8_mask - } - } - - static let br7_offset = UInt32(23) - static let br7_mask = UInt32(0b1) &<< br7_offset - var br7: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br7_offset) & GPIO.BSRR.br7_mask - } - } - - static let br6_offset = UInt32(22) - static let br6_mask = UInt32(0b1) &<< br6_offset - var br6: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br6_offset) & GPIO.BSRR.br6_mask - } - } - - static let br5_offset = UInt32(21) - static let br5_mask = UInt32(0b1) &<< br5_offset - var br5: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br5_offset) & GPIO.BSRR.br5_mask - } - } - - static let br4_offset = UInt32(20) - static let br4_mask = UInt32(0b1) &<< br4_offset - var br4: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br4_offset) & GPIO.BSRR.br4_mask - } - } - - static let br3_offset = UInt32(19) - static let br3_mask = UInt32(0b1) &<< br3_offset - var br3: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br3_offset) & GPIO.BSRR.br3_mask - } - } - - static let br2_offset = UInt32(18) - static let br2_mask = UInt32(0b1) &<< br2_offset - var br2: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br2_offset) & GPIO.BSRR.br2_mask - } - } - - static let br1_offset = UInt32(17) - static let br1_mask = UInt32(0b1) &<< br1_offset - var br1: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br1_offset) & GPIO.BSRR.br1_mask - } - } - - static let br0_offset = UInt32(16) - static let br0_mask = UInt32(0b1) &<< br0_offset - var br0: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.br0_offset) & GPIO.BSRR.br0_mask - } - } - - static let bs15_offset = UInt32(15) - static let bs15_mask = UInt32(0b1) &<< bs15_offset - var bs15: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs15_offset) & GPIO.BSRR.bs15_mask - } - } - - static let bs14_offset = UInt32(14) - static let bs14_mask = UInt32(0b1) &<< bs14_offset - var bs14: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs14_offset) & GPIO.BSRR.bs14_mask - } - } - - static let bs13_offset = UInt32(13) - static let bs13_mask = UInt32(0b1) &<< bs13_offset - var bs13: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs13_offset) & GPIO.BSRR.bs13_mask - } - } - - static let bs12_offset = UInt32(12) - static let bs12_mask = UInt32(0b1) &<< bs12_offset - var bs12: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs12_offset) & GPIO.BSRR.bs12_mask - } - } - - static let bs11_offset = UInt32(11) - static let bs11_mask = UInt32(0b1) &<< bs11_offset - var bs11: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs11_offset) & GPIO.BSRR.bs11_mask - } - } - - static let bs10_offset = UInt32(10) - static let bs10_mask = UInt32(0b1) &<< bs10_offset - var bs10: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs10_offset) & GPIO.BSRR.bs10_mask - } - } - - static let bs9_offset = UInt32(9) - static let bs9_mask = UInt32(0b1) &<< bs9_offset - var bs9: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs9_offset) & GPIO.BSRR.bs9_mask - } - } - - static let bs8_offset = UInt32(8) - static let bs8_mask = UInt32(0b1) &<< bs8_offset - var bs8: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs8_offset) & GPIO.BSRR.bs8_mask - } - } - - static let bs7_offset = UInt32(7) - static let bs7_mask = UInt32(0b1) &<< bs7_offset - var bs7: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs7_offset) & GPIO.BSRR.bs7_mask - } - } - - static let bs6_offset = UInt32(6) - static let bs6_mask = UInt32(0b1) &<< bs6_offset - var bs6: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs6_offset) & GPIO.BSRR.bs6_mask - } - } - - static let bs5_offset = UInt32(5) - static let bs5_mask = UInt32(0b1) &<< bs5_offset - var bs5: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs5_offset) & GPIO.BSRR.bs5_mask - } - } - - static let bs4_offset = UInt32(4) - static let bs4_mask = UInt32(0b1) &<< bs4_offset - var bs4: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs4_offset) & GPIO.BSRR.bs4_mask - } - } - - static let bs3_offset = UInt32(3) - static let bs3_mask = UInt32(0b1) &<< bs3_offset - var bs3: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs3_offset) & GPIO.BSRR.bs3_mask - } - } - - static let bs2_offset = UInt32(2) - static let bs2_mask = UInt32(0b1) &<< bs2_offset - var bs2: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs2_offset) & GPIO.BSRR.bs2_mask - } - } - - static let bs1_offset = UInt32(1) - static let bs1_mask = UInt32(0b1) &<< bs1_offset - var bs1: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs1_offset) & GPIO.BSRR.bs1_mask - } - } - - static let bs0_offset = UInt32(0) - static let bs0_mask = UInt32(0b1) &<< bs0_offset - var bs0: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << GPIO.BSRR.bs0_offset) & GPIO.BSRR.bs0_mask - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct LCKR { - var rawValue: UInt32 - - static let lckk_offset = UInt32(16) - static let lckk_mask = UInt32(0b1) &<< lckk_offset - var lckk: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lckk_mask)) >> GPIO.LCKR.lckk_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lckk_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lckk_offset) & GPIO.LCKR.lckk_mask - self.rawValue = preserve | shift - } - } - - static let lck15_offset = UInt32(15) - static let lck15_mask = UInt32(0b1) &<< lck15_offset - var lck15: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck15_mask)) >> GPIO.LCKR.lck15_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck15_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck15_offset) & GPIO.LCKR.lck15_mask - self.rawValue = preserve | shift - } - } - - static let lck14_offset = UInt32(14) - static let lck14_mask = UInt32(0b1) &<< lck14_offset - var lck14: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck14_mask)) >> GPIO.LCKR.lck14_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck14_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck14_offset) & GPIO.LCKR.lck14_mask - self.rawValue = preserve | shift - } - } - - static let lck13_offset = UInt32(13) - static let lck13_mask = UInt32(0b1) &<< lck13_offset - var lck13: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck13_mask)) >> GPIO.LCKR.lck13_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck13_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck13_offset) & GPIO.LCKR.lck13_mask - self.rawValue = preserve | shift - } - } - - static let lck12_offset = UInt32(12) - static let lck12_mask = UInt32(0b1) &<< lck12_offset - var lck12: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck12_mask)) >> GPIO.LCKR.lck12_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck12_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck12_offset) & GPIO.LCKR.lck12_mask - self.rawValue = preserve | shift - } - } - - static let lck11_offset = UInt32(11) - static let lck11_mask = UInt32(0b1) &<< lck11_offset - var lck11: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck11_mask)) >> GPIO.LCKR.lck11_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck11_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck11_offset) & GPIO.LCKR.lck11_mask - self.rawValue = preserve | shift - } - } - - static let lck10_offset = UInt32(10) - static let lck10_mask = UInt32(0b1) &<< lck10_offset - var lck10: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck10_mask)) >> GPIO.LCKR.lck10_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck10_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck10_offset) & GPIO.LCKR.lck10_mask - self.rawValue = preserve | shift - } - } - - static let lck9_offset = UInt32(9) - static let lck9_mask = UInt32(0b1) &<< lck9_offset - var lck9: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck9_mask)) >> GPIO.LCKR.lck9_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck9_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck9_offset) & GPIO.LCKR.lck9_mask - self.rawValue = preserve | shift - } - } - - static let lck8_offset = UInt32(8) - static let lck8_mask = UInt32(0b1) &<< lck8_offset - var lck8: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck8_mask)) >> GPIO.LCKR.lck8_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck8_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck8_offset) & GPIO.LCKR.lck8_mask - self.rawValue = preserve | shift - } - } - - static let lck7_offset = UInt32(7) - static let lck7_mask = UInt32(0b1) &<< lck7_offset - var lck7: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck7_mask)) >> GPIO.LCKR.lck7_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck7_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck7_offset) & GPIO.LCKR.lck7_mask - self.rawValue = preserve | shift - } - } - - static let lck6_offset = UInt32(6) - static let lck6_mask = UInt32(0b1) &<< lck6_offset - var lck6: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck6_mask)) >> GPIO.LCKR.lck6_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck6_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck6_offset) & GPIO.LCKR.lck6_mask - self.rawValue = preserve | shift - } - } - - static let lck5_offset = UInt32(5) - static let lck5_mask = UInt32(0b1) &<< lck5_offset - var lck5: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck5_mask)) >> GPIO.LCKR.lck5_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck5_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck5_offset) & GPIO.LCKR.lck5_mask - self.rawValue = preserve | shift - } - } - - static let lck4_offset = UInt32(4) - static let lck4_mask = UInt32(0b1) &<< lck4_offset - var lck4: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck4_mask)) >> GPIO.LCKR.lck4_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck4_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck4_offset) & GPIO.LCKR.lck4_mask - self.rawValue = preserve | shift - } - } - - static let lck3_offset = UInt32(3) - static let lck3_mask = UInt32(0b1) &<< lck3_offset - var lck3: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck3_mask)) >> GPIO.LCKR.lck3_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck3_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck3_offset) & GPIO.LCKR.lck3_mask - self.rawValue = preserve | shift - } - } - - static let lck2_offset = UInt32(2) - static let lck2_mask = UInt32(0b1) &<< lck2_offset - var lck2: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck2_mask)) >> GPIO.LCKR.lck2_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck2_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck2_offset) & GPIO.LCKR.lck2_mask - self.rawValue = preserve | shift - } - } - - static let lck1_offset = UInt32(1) - static let lck1_mask = UInt32(0b1) &<< lck1_offset - var lck1: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck1_mask)) >> GPIO.LCKR.lck1_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck1_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck1_offset) & GPIO.LCKR.lck1_mask - self.rawValue = preserve | shift - } - } - - static let lck0_offset = UInt32(0) - static let lck0_mask = UInt32(0b1) &<< lck0_offset - var lck0: UInt8 { - get { UInt8((self.rawValue & (GPIO.LCKR.lck0_mask)) >> GPIO.LCKR.lck0_offset) } - set { - let preserve = self.rawValue & ~GPIO.LCKR.lck0_mask - let shift = (UInt32(newValue) << GPIO.LCKR.lck0_offset) & GPIO.LCKR.lck0_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AFRL { - var rawValue: UInt32 - - static let afrl7_offset = UInt32(28) - static let afrl7_mask = UInt32(0b1111) &<< afrl7_offset - var afrl7: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl7_mask)) >> GPIO.AFRL.afrl7_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl7_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl7_offset) & GPIO.AFRL.afrl7_mask - self.rawValue = preserve | shift - } - } - - static let afrl6_offset = UInt32(24) - static let afrl6_mask = UInt32(0b1111) &<< afrl6_offset - var afrl6: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl6_mask)) >> GPIO.AFRL.afrl6_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl6_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl6_offset) & GPIO.AFRL.afrl6_mask - self.rawValue = preserve | shift - } - } - - static let afrl5_offset = UInt32(20) - static let afrl5_mask = UInt32(0b1111) &<< afrl5_offset - var afrl5: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl5_mask)) >> GPIO.AFRL.afrl5_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl5_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl5_offset) & GPIO.AFRL.afrl5_mask - self.rawValue = preserve | shift - } - } - - static let afrl4_offset = UInt32(16) - static let afrl4_mask = UInt32(0b1111) &<< afrl4_offset - var afrl4: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl4_mask)) >> GPIO.AFRL.afrl4_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl4_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl4_offset) & GPIO.AFRL.afrl4_mask - self.rawValue = preserve | shift - } - } - - static let afrl3_offset = UInt32(12) - static let afrl3_mask = UInt32(0b1111) &<< afrl3_offset - var afrl3: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl3_mask)) >> GPIO.AFRL.afrl3_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl3_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl3_offset) & GPIO.AFRL.afrl3_mask - self.rawValue = preserve | shift - } - } - - static let afrl2_offset = UInt32(8) - static let afrl2_mask = UInt32(0b1111) &<< afrl2_offset - var afrl2: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl2_mask)) >> GPIO.AFRL.afrl2_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl2_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl2_offset) & GPIO.AFRL.afrl2_mask - self.rawValue = preserve | shift - } - } - - static let afrl1_offset = UInt32(4) - static let afrl1_mask = UInt32(0b1111) &<< afrl1_offset - var afrl1: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl1_mask)) >> GPIO.AFRL.afrl1_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl1_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl1_offset) & GPIO.AFRL.afrl1_mask - self.rawValue = preserve | shift - } - } - - static let afrl0_offset = UInt32(0) - static let afrl0_mask = UInt32(0b1111) &<< afrl0_offset - var afrl0: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRL.afrl0_mask)) >> GPIO.AFRL.afrl0_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRL.afrl0_mask - let shift = (UInt32(newValue) << GPIO.AFRL.afrl0_offset) & GPIO.AFRL.afrl0_mask - self.rawValue = preserve | shift - } - } - - func af(n: Int) -> UInt8 { - precondition(n >= 0 && n < 8) - let af_offset = n * 4 - let af_mask = UInt32(0b1111) &<< af_offset - return UInt8((self.rawValue & (af_mask)) &>> af_offset) - } - - mutating func setAf(n: Int, value: UInt8) { - precondition(n >= 0 && n < 8) - precondition(value < 16) - let af_offset = n * 4 - let af_mask = UInt32(0b1111) &<< af_offset - let preserve = self.rawValue & ~af_mask - let shift = (UInt32(value) << af_offset) & af_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AFRH { - var rawValue: UInt32 - - static let afrh15_offset = UInt32(28) - static let afrh15_mask = UInt32(0b1111) &<< afrh15_offset - var afrh15: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh15_mask)) >> GPIO.AFRH.afrh15_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh15_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh15_offset) & GPIO.AFRH.afrh15_mask - self.rawValue = preserve | shift - } - } - - static let afrh14_offset = UInt32(24) - static let afrh14_mask = UInt32(0b1111) &<< afrh14_offset - var afrh14: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh14_mask)) >> GPIO.AFRH.afrh14_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh14_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh14_offset) & GPIO.AFRH.afrh14_mask - self.rawValue = preserve | shift - } - } - - static let afrh13_offset = UInt32(20) - static let afrh13_mask = UInt32(0b1111) &<< afrh13_offset - var afrh13: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh13_mask)) >> GPIO.AFRH.afrh13_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh13_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh13_offset) & GPIO.AFRH.afrh13_mask - self.rawValue = preserve | shift - } - } - - static let afrh12_offset = UInt32(16) - static let afrh12_mask = UInt32(0b1111) &<< afrh12_offset - var afrh12: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh12_mask)) >> GPIO.AFRH.afrh12_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh12_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh12_offset) & GPIO.AFRH.afrh12_mask - self.rawValue = preserve | shift - } - } - - static let afrh11_offset = UInt32(12) - static let afrh11_mask = UInt32(0b1111) &<< afrh11_offset - var afrh11: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh11_mask)) >> GPIO.AFRH.afrh11_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh11_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh11_offset) & GPIO.AFRH.afrh11_mask - self.rawValue = preserve | shift - } - } - - static let afrh10_offset = UInt32(8) - static let afrh10_mask = UInt32(0b1111) &<< afrh10_offset - var afrh10: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh10_mask)) >> GPIO.AFRH.afrh10_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh10_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh10_offset) & GPIO.AFRH.afrh10_mask - self.rawValue = preserve | shift - } - } - - static let afrh9_offset = UInt32(4) - static let afrh9_mask = UInt32(0b1111) &<< afrh9_offset - var afrh9: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh9_mask)) >> GPIO.AFRH.afrh9_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh9_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh9_offset) & GPIO.AFRH.afrh9_mask - self.rawValue = preserve | shift - } - } - - static let afrh8_offset = UInt32(0) - static let afrh8_mask = UInt32(0b1111) &<< afrh8_offset - var afrh8: UInt8 { - get { UInt8((self.rawValue & (GPIO.AFRH.afrh8_mask)) >> GPIO.AFRH.afrh8_offset) } - set { - let preserve = self.rawValue & ~GPIO.AFRH.afrh8_mask - let shift = (UInt32(newValue) << GPIO.AFRH.afrh8_offset) & GPIO.AFRH.afrh8_mask - self.rawValue = preserve | shift - } - } - - func af(n: Int) -> UInt8 { - precondition(n >= 8 && n < 16) - let af_offset = (n - 8) * 4 - let af_mask = UInt32(0b1111) &<< af_offset - return UInt8((self.rawValue & (af_mask)) &>> af_offset) - } - - mutating func setAf(n: Int, value: UInt8) { - precondition(n >= 8 && n < 16) - precondition(value < 16) - let af_offset = (n - 8) * 4 - let af_mask = UInt32(0b1111) &<< af_offset - let preserve = self.rawValue & ~af_mask - let shift = (UInt32(value) << af_offset) & af_mask - self.rawValue = preserve | shift - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct BRR { - var rawValue: UInt32 - - static let br0_offset = UInt32(0) - static let br0_mask = UInt32(0b1) &<< br0_offset - var br0: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br0_mask)) >> GPIO.BRR.br0_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br0_mask - let shift = (UInt32(newValue) << GPIO.BRR.br0_offset) & GPIO.BRR.br0_mask - self.rawValue = preserve | shift - } - } - - static let br1_offset = UInt32(1) - static let br1_mask = UInt32(0b1) &<< br1_offset - var br1: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br1_mask)) >> GPIO.BRR.br1_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br1_mask - let shift = (UInt32(newValue) << GPIO.BRR.br1_offset) & GPIO.BRR.br1_mask - self.rawValue = preserve | shift - } - } - - static let br2_offset = UInt32(2) - static let br2_mask = UInt32(0b1) &<< br2_offset - var br2: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br2_mask)) >> GPIO.BRR.br2_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br2_mask - let shift = (UInt32(newValue) << GPIO.BRR.br2_offset) & GPIO.BRR.br2_mask - self.rawValue = preserve | shift - } - } - - static let br3_offset = UInt32(3) - static let br3_mask = UInt32(0b1) &<< br3_offset - var br3: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br3_mask)) >> GPIO.BRR.br3_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br3_mask - let shift = (UInt32(newValue) << GPIO.BRR.br3_offset) & GPIO.BRR.br3_mask - self.rawValue = preserve | shift - } - } - - static let br4_offset = UInt32(4) - static let br4_mask = UInt32(0b1) &<< br4_offset - var br4: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br4_mask)) >> GPIO.BRR.br4_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br4_mask - let shift = (UInt32(newValue) << GPIO.BRR.br4_offset) & GPIO.BRR.br4_mask - self.rawValue = preserve | shift - } - } - - static let br5_offset = UInt32(5) - static let br5_mask = UInt32(0b1) &<< br5_offset - var br5: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br5_mask)) >> GPIO.BRR.br5_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br5_mask - let shift = (UInt32(newValue) << GPIO.BRR.br5_offset) & GPIO.BRR.br5_mask - self.rawValue = preserve | shift - } - } - - static let br6_offset = UInt32(6) - static let br6_mask = UInt32(0b1) &<< br6_offset - var br6: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br6_mask)) >> GPIO.BRR.br6_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br6_mask - let shift = (UInt32(newValue) << GPIO.BRR.br6_offset) & GPIO.BRR.br6_mask - self.rawValue = preserve | shift - } - } - - static let br7_offset = UInt32(7) - static let br7_mask = UInt32(0b1) &<< br7_offset - var br7: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br7_mask)) >> GPIO.BRR.br7_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br7_mask - let shift = (UInt32(newValue) << GPIO.BRR.br7_offset) & GPIO.BRR.br7_mask - self.rawValue = preserve | shift - } - } - - static let br8_offset = UInt32(8) - static let br8_mask = UInt32(0b1) &<< br8_offset - var br8: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br8_mask)) >> GPIO.BRR.br8_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br8_mask - let shift = (UInt32(newValue) << GPIO.BRR.br8_offset) & GPIO.BRR.br8_mask - self.rawValue = preserve | shift - } - } - - static let br9_offset = UInt32(9) - static let br9_mask = UInt32(0b1) &<< br9_offset - var br9: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br9_mask)) >> GPIO.BRR.br9_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br9_mask - let shift = (UInt32(newValue) << GPIO.BRR.br9_offset) & GPIO.BRR.br9_mask - self.rawValue = preserve | shift - } - } - - static let br10_offset = UInt32(10) - static let br10_mask = UInt32(0b1) &<< br10_offset - var br10: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br10_mask)) >> GPIO.BRR.br10_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br10_mask - let shift = (UInt32(newValue) << GPIO.BRR.br10_offset) & GPIO.BRR.br10_mask - self.rawValue = preserve | shift - } - } - - static let br11_offset = UInt32(11) - static let br11_mask = UInt32(0b1) &<< br11_offset - var br11: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br11_mask)) >> GPIO.BRR.br11_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br11_mask - let shift = (UInt32(newValue) << GPIO.BRR.br11_offset) & GPIO.BRR.br11_mask - self.rawValue = preserve | shift - } - } - - static let br12_offset = UInt32(12) - static let br12_mask = UInt32(0b1) &<< br12_offset - var br12: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br12_mask)) >> GPIO.BRR.br12_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br12_mask - let shift = (UInt32(newValue) << GPIO.BRR.br12_offset) & GPIO.BRR.br12_mask - self.rawValue = preserve | shift - } - } - - static let br13_offset = UInt32(13) - static let br13_mask = UInt32(0b1) &<< br13_offset - var br13: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br13_mask)) >> GPIO.BRR.br13_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br13_mask - let shift = (UInt32(newValue) << GPIO.BRR.br13_offset) & GPIO.BRR.br13_mask - self.rawValue = preserve | shift - } - } - - static let br14_offset = UInt32(14) - static let br14_mask = UInt32(0b1) &<< br14_offset - var br14: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br14_mask)) >> GPIO.BRR.br14_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br14_mask - let shift = (UInt32(newValue) << GPIO.BRR.br14_offset) & GPIO.BRR.br14_mask - self.rawValue = preserve | shift - } - } - - static let br15_offset = UInt32(15) - static let br15_mask = UInt32(0b1) &<< br15_offset - var br15: UInt8 { - get { UInt8((self.rawValue & (GPIO.BRR.br15_mask)) >> GPIO.BRR.br15_offset) } - set { - let preserve = self.rawValue & ~GPIO.BRR.br15_mask - let shift = (UInt32(newValue) << GPIO.BRR.br15_offset) & GPIO.BRR.br15_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } -} diff --git a/stm32-lcd-logo/Support/HAL.swift b/stm32-lcd-logo/Support/HAL.swift deleted file mode 100644 index 0c89ddbf..00000000 --- a/stm32-lcd-logo/Support/HAL.swift +++ /dev/null @@ -1,687 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -public protocol GPIOPlatform { - associatedtype Pin - static func configure(_ pin: Pin, _ configuration: GPIOConfiguration) - static func assert(_ pin: Pin, _ configuration: GPIOConfiguration) - static func deassert(_ pin: Pin, _ configuration: GPIOConfiguration) - static func value(_ pin: Pin) -> Bool -} -public enum STM32F746 {} - -public enum Mode { - case input - case output - case alternateFunction - case analog -} - -public enum OutputType { - case pushPull - case openDrain -} - -public enum OutputSpeed { - case low - case medium - case high - case max -} - -public enum Pull { - case `none` - case up - case down -} - -public enum AlternateFunction { - case alternateFunction0 - case alternateFunction1 - case alternateFunction2 - case alternateFunction3 - case alternateFunction4 - case alternateFunction5 - case alternateFunction6 - case alternateFunction7 - case alternateFunction8 - case alternateFunction9 - case alternateFunction10 - case alternateFunction11 - case alternateFunction12 - case alternateFunction13 - case alternateFunction14 - case alternateFunction15 - case `none` -} - -public struct GPIOConfiguration { - public var mode: Mode - public var outputType: OutputType - public var outputSpeed: OutputSpeed - public var pull: Pull - public var alternateFunction: AlternateFunction - public var activeHigh: Bool - - public init( - mode: Mode, outputType: OutputType, outputSpeed: OutputSpeed, pull: Pull, - alternateFunction: AlternateFunction, activeHigh: Bool - ) { - self.mode = mode - self.outputType = outputType - self.outputSpeed = outputSpeed - self.pull = pull - self.alternateFunction = alternateFunction - self.activeHigh = activeHigh - } -} - -public struct HALGPIO { - let pin: Platform.Pin - var configuration: GPIOConfiguration? - - public init(pin: Platform.Pin) { - self.pin = pin - self.configuration = nil - } - - public mutating func configure(configuration: GPIOConfiguration) { - self.configuration = configuration - guard let configuration = self.configuration else { return } - Platform.configure(pin, configuration) - } - - public func assert() { - guard let configuration = self.configuration else { return } - Platform.assert(pin, configuration) - } - - public func deassert() { - guard let configuration = self.configuration else { return } - Platform.deassert(pin, configuration) - } - - public func value() -> Bool { - Platform.value(pin) - } -} - -// MARK: - Abstract GPIO -> Platform GPIO -extension Mode { - var rawValue: UInt8 { - switch self { - case .input: return 0x0 - case .output: return 0x1 - case .alternateFunction: return 0x2 - case .analog: return 0x3 - } - } -} - -extension OutputType { - var rawValue: UInt8 { - switch self { - case .pushPull: - return 0x0 - case .openDrain: - return 0x1 - } - } -} - -extension OutputSpeed { - var rawValue: UInt8 { - switch self { - case .low: return 0x0 - case .medium: return 0x1 - case .high: return 0x2 - case .max: return 0x3 - } - } -} - -extension Pull { - var rawValue: UInt8 { - switch self { - case .none: return 0x0 - case .up: return 0x1 - case .down: return 0x2 - } - } -} - -extension AlternateFunction { - var rawValue: UInt8 { - switch self { - case .alternateFunction0: return 0 - case .alternateFunction1: return 1 - case .alternateFunction2: return 2 - case .alternateFunction3: return 3 - case .alternateFunction4: return 4 - case .alternateFunction5: return 5 - case .alternateFunction6: return 6 - case .alternateFunction7: return 7 - case .alternateFunction8: return 8 - case .alternateFunction9: return 9 - case .alternateFunction10: return 10 - case .alternateFunction11: return 11 - case .alternateFunction12: return 12 - case .alternateFunction13: return 13 - case .alternateFunction14: return 14 - case .alternateFunction15: return 15 - case .none: return .max - } - } -} - -// MARK: - GPIOPlatform Conformance -extension STM32F746: GPIOPlatform { - public struct Pin { - var port: GPIOPort - var number: UInt8 - - public init(port: GPIOPort, number: UInt8) { - self.port = port - self.number = number - } - - func checkValidPin() { - if self.number < 0 || self.number > 16 { - fatalError("STM32F746: invalid GPIO pin number") - } - } - - func setMode(_ mode: Mode) { - var rawValue = self.port.port - rawValue.moder.setModer(n: Int(self.number), value: mode.rawValue) - } - - func setOutputType(_ outputType: OutputType) { - var rawValue = self.port.port - rawValue.otyper.setOt(n: Int(self.number), value: outputType.rawValue) - } - - func setOutputSpeed(_ outputSpeed: OutputSpeed) { - var rawValue = self.port.port - rawValue.ospeedr.setOspeed( - n: Int(self.number), value: outputSpeed.rawValue) - } - - func setPull(_ pull: Pull) { - var rawValue = self.port.port - rawValue.pupdr.setPupd(n: Int(self.number), value: pull.rawValue) - } - - func setAlternateFunction(_ alternateFunction: AlternateFunction) { - var rawValue = self.port.port - if self.number < 8 { - rawValue.afrl.setAf( - n: Int(self.number), value: alternateFunction.rawValue) - } else { - rawValue.afrh.setAf( - n: Int(self.number), value: alternateFunction.rawValue) - } - } - - func setOutputData(_ data: UInt8) { - var rawValue = self.port.port - rawValue.odr.setOd(n: Int(self.number), value: data) - } - - func getInputData() -> UInt8 { - let rawValue = self.port.port - switch self.number { - case 0: return rawValue.idr.idr0 - case 1: return rawValue.idr.idr1 - case 2: return rawValue.idr.idr2 - case 3: return rawValue.idr.idr3 - case 4: return rawValue.idr.idr4 - case 5: return rawValue.idr.idr5 - case 6: return rawValue.idr.idr6 - case 7: return rawValue.idr.idr7 - case 8: return rawValue.idr.idr8 - case 9: return rawValue.idr.idr9 - case 10: return rawValue.idr.idr10 - case 11: return rawValue.idr.idr11 - case 12: return rawValue.idr.idr12 - case 13: return rawValue.idr.idr13 - case 14: return rawValue.idr.idr14 - case 15: return rawValue.idr.idr15 - default: fatalError("STM32F746: invalid GPIO pin number") - } - } - } - - public static func configure(_ pin: Pin, _ configuration: GPIOConfiguration) { - pin.checkValidPin() - - pin.setMode(configuration.mode) - pin.setOutputType(configuration.outputType) - pin.setOutputSpeed(configuration.outputSpeed) - pin.setPull(configuration.pull) - - if configuration.mode == .alternateFunction { - pin.setAlternateFunction(configuration.alternateFunction) - } - - } - - public static func assert(_ pin: Pin, _ configuration: GPIOConfiguration) { - if configuration.activeHigh { - pin.setOutputData(1) - } else { - pin.setOutputData(0) - } - } - - public static func deassert(_ pin: Pin, _ configuration: GPIOConfiguration) { - if configuration.activeHigh { - pin.setOutputData(0) - } else { - pin.setOutputData(1) - } - } - - public static func value(_ pin: Pin) -> Bool { - (pin.getInputData() & 0x1) != 0 - } -} - -public enum GPIOPort: Int { - case a, b, c, d, e, f, g, h, i, j, k - - var port: GPIO { - // swift-format-ignore: NeverForceUnwrap - GPIO( - baseAddress: UnsafeMutableRawPointer( - bitPattern: (0x4002_0000 + 0x400 * UInt(self.rawValue - Self.a.rawValue)) - )!) - } -} - -extension STM32F746 { - public static func enableGPIOPortClock(_ port: GPIOPort) { - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - switch port { - case .a: rcc.ahb1enr.gpioaen = 1 - case .b: rcc.ahb1enr.gpioben = 1 - case .c: rcc.ahb1enr.gpiocen = 1 - case .d: rcc.ahb1enr.gpioden = 1 - case .e: rcc.ahb1enr.gpioeen = 1 - case .f: rcc.ahb1enr.gpiofen = 1 - case .g: rcc.ahb1enr.gpiogen = 1 - case .h: rcc.ahb1enr.gpiohen = 1 - case .i: rcc.ahb1enr.gpioien = 1 - case .j: rcc.ahb1enr.gpiojen = 1 - case .k: rcc.ahb1enr.gpioken = 1 - } - } - - public static func enableUARTClock(_ uartNum: UInt8) { - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - switch uartNum { - case 1: rcc.apb2enr.usart1en = 1 - case 2: rcc.apb1enr.usart2en = 1 - case 3: rcc.apb1enr.usart3en = 1 - case 4: rcc.apb1enr.uart4en = 1 - case 5: rcc.apb1enr.uart5en = 1 - case 6: rcc.apb2enr.usart6en = 1 - case 7: rcc.apb1enr.uart7enr = 1 - case 8: rcc.apb1enr.uart8enr = 1 - default: return - } - } - - public static func enableI2CClock(_ i2cNum: UInt8) { - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - switch i2cNum { - case 1: rcc.apb1enr.i2c1en = 1 - case 2: rcc.apb1enr.i2c2en = 1 - case 3: rcc.apb1enr.i2c3en = 1 - case 4: rcc.apb1enr.i2c4en = 1 - default: return - } - } - - public static func enableSPIClock(_ spiNum: UInt8) { - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - switch spiNum { - case 1: rcc.apb2enr.spi1en = 1 - case 2: rcc.apb1enr.spi2en = 1 - case 3: rcc.apb1enr.spi3en = 1 - case 4: rcc.apb2enr.spi4enr = 1 - case 5: rcc.apb2enr.spi5enr = 1 - case 6: rcc.apb2enr.spi6enr = 1 - default: return - } - } - - public static func configureFlash() { - let flash = UnsafeMutableRawPointer(bitPattern: (0x4002_3C00)) - // swift-format-ignore: NeverForceUnwrap - let flashAcr = UnsafeMutablePointer( - bitPattern: UInt(bitPattern: flash))! - // Set FLASH_ACR to 0x5 - flashAcr.volatileStore(0x5) - } - - public static func initializeLTCD() { - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - rcc.cfgr.rawValue = 0 - rcc.cr.hsion = 1 - rcc.cr.csson = 0 - rcc.cr.pllon = 0 - rcc.cr.hsebyp = 0 - rcc.cr.hseon = 1 - while rcc.cr.hserdy == 0 {} - } - - enum LTDCConstants { - static let hsync = 30 - static let vsync = 10 - static let hbp = 13 - static let hfp = 32 - static let vbp = 2 - static let vfp = 2 - - static let pixelSize = 4 - - static let displayWidth = 480 - static let displayHeight = 272 - - static let layerWidth = 50 - static let layerHeight = 50 - } - - public static func configureLTCD() { - // swift-format-ignore: NeverForceUnwrap - var ltdc = LTDC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4001_6800)!) - // swift-format-ignore: NeverForceUnwrap - var rcc = RCC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4002_3800)!) - - rcc.pllcfgr.rawValue = 0 - rcc.pllcfgr.pllm0 = 1 - rcc.pllcfgr.pllm3 = 1 - rcc.pllcfgr.pllm4 = 1 - rcc.pllcfgr.plln4 = 1 - rcc.pllcfgr.plln5 = 1 - rcc.pllcfgr.plln7 = 1 - rcc.pllcfgr.plln8 = 1 - rcc.pllcfgr.pllsrc = 1 - - rcc.cr.pllon = 1 - while rcc.cr.pllrdy == 0 {} - - rcc.cfgr.rawValue &= 0b11 - rcc.cfgr.rawValue |= 0b10 - while rcc.cfgr.rawValue & 0b1100 != 0b1000 {} - - rcc.pllsaicfgr.pllsain = 192 - rcc.pllsaicfgr.pllsair = 5 - rcc.dkcfgr1.pllsaidivr = 1 - - rcc.cr.pllsaion = 1 - while rcc.cr.pllsairdy == 0 {} - - STM32F746.enableGPIOPortClock(.i) - - STM32F746.enableGPIOPortClock(.a) - STM32F746.enableGPIOPortClock(.b) - STM32F746.enableGPIOPortClock(.c) - STM32F746.enableGPIOPortClock(.d) - STM32F746.enableGPIOPortClock(.e) - STM32F746.enableGPIOPortClock(.f) - STM32F746.enableGPIOPortClock(.g) - STM32F746.enableGPIOPortClock(.h) - STM32F746.enableGPIOPortClock(.j) - STM32F746.enableGPIOPortClock(.k) - - var clkPin = HALGPIO(pin: .init(port: .i, number: 14)) - var dePin = HALGPIO(pin: .init(port: .k, number: 7)) - var hsyncPin = HALGPIO(pin: .init(port: .i, number: 10)) - var vsyncPin = HALGPIO(pin: .init(port: .i, number: 9)) - - clkPin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: false) - ) - dePin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: false) - ) - hsyncPin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: false) - ) - vsyncPin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: false) - ) - - var r0Pin = HALGPIO(pin: .init(port: .i, number: 15)) - var r1Pin = HALGPIO(pin: .init(port: .j, number: 0)) - var r2Pin = HALGPIO(pin: .init(port: .j, number: 1)) - var r3Pin = HALGPIO(pin: .init(port: .j, number: 2)) - var r4Pin = HALGPIO(pin: .init(port: .j, number: 3)) - var r5Pin = HALGPIO(pin: .init(port: .j, number: 4)) - var r6Pin = HALGPIO(pin: .init(port: .j, number: 5)) - var r7Pin = HALGPIO(pin: .init(port: .j, number: 6)) - - r0Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r1Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r2Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r3Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r4Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r5Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r6Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - r7Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - - var g0Pin = HALGPIO(pin: .init(port: .j, number: 7)) - var g1Pin = HALGPIO(pin: .init(port: .j, number: 8)) - var g2Pin = HALGPIO(pin: .init(port: .j, number: 9)) - var g3Pin = HALGPIO(pin: .init(port: .j, number: 10)) - var g4Pin = HALGPIO(pin: .init(port: .j, number: 11)) - var g5Pin = HALGPIO(pin: .init(port: .k, number: 0)) - var g6Pin = HALGPIO(pin: .init(port: .k, number: 1)) - var g7Pin = HALGPIO(pin: .init(port: .k, number: 2)) - - g0Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g1Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g2Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g3Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g4Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g5Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g6Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - g7Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - - var b0Pin = HALGPIO(pin: .init(port: .e, number: 4)) - var b1Pin = HALGPIO(pin: .init(port: .j, number: 13)) - var b2Pin = HALGPIO(pin: .init(port: .j, number: 14)) - var b3Pin = HALGPIO(pin: .init(port: .j, number: 15)) - var b4Pin = HALGPIO(pin: .init(port: .g, number: 12)) - var b5Pin = HALGPIO(pin: .init(port: .k, number: 4)) - var b6Pin = HALGPIO(pin: .init(port: .k, number: 5)) - var b7Pin = HALGPIO(pin: .init(port: .k, number: 6)) - - b0Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b1Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b2Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b3Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b4Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction9 /*!*/, - activeHigh: true)) - b5Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b6Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - b7Pin.configure( - configuration: .init( - mode: .alternateFunction, outputType: .pushPull, outputSpeed: .high, - pull: .none, alternateFunction: .alternateFunction14, activeHigh: true)) - - var backlightPin = HALGPIO(pin: .init(port: .k, number: 3)) - backlightPin.configure( - configuration: .init( - mode: .output, outputType: .pushPull, outputSpeed: .low, pull: .down, - alternateFunction: .none, activeHigh: true)) - - var lcdDispPin = HALGPIO(pin: .init(port: .i, number: 12)) - lcdDispPin.configure( - configuration: .init( - mode: .output, outputType: .pushPull, outputSpeed: .low, pull: .down, - alternateFunction: .none, activeHigh: true)) - - lcdDispPin.assert() - backlightPin.assert() - rcc.apb2enr.ltdcen = 1 - - ltdc.sscr.vsh = UInt16(LTDCConstants.vsync - 1) - ltdc.sscr.hsw = UInt16(LTDCConstants.hsync - 1) - ltdc.bpcr.ahbp = UInt16(LTDCConstants.hsync + LTDCConstants.hbp - 1) - ltdc.bpcr.avbp = UInt16(LTDCConstants.vsync + LTDCConstants.vbp - 1) - ltdc.awcr.aah = UInt16( - LTDCConstants.displayHeight + LTDCConstants.vsync + LTDCConstants.vbp - 1 - ) - ltdc.awcr.aav = UInt16( - LTDCConstants.displayWidth + LTDCConstants.hsync + LTDCConstants.hbp - 1) - ltdc.twcr.totalw = UInt16( - LTDCConstants.displayWidth + LTDCConstants.hsync + LTDCConstants.hbp - + LTDCConstants.hfp - 1) - ltdc.twcr.totalh = UInt16( - LTDCConstants.displayHeight + LTDCConstants.vsync + LTDCConstants.vbp - + LTDCConstants.vfp - 1) - - ltdc.bccr.rawValue = 0x00_00_00_00 // background color - - setLayer2Position(Point(x: 0, y: 0)) - - ltdc.l2pfcr.rawValue = 0 // Format ARGB8888 - ltdc.l2cfbar.rawValue = UInt32(UInt(bitPattern: logoPixelDataStartPointer)) - ltdc.l2cacr.consta = 255 - ltdc.l2bfcr.bf1 = 5 - ltdc.l2bfcr.bf2 = 4 - ltdc.l2cfblr.rawValue = - UInt32(UInt32(LTDCConstants.pixelSize * LTDCConstants.layerWidth) << 16) - | UInt32(LTDCConstants.pixelSize * LTDCConstants.layerWidth + 3) - ltdc.l2cfblnr.cfblnbr = UInt16(LTDCConstants.layerHeight) - ltdc.l2cr.len = 1 - - ltdc.srcr.vbr = 1 // reload - - ltdc.gcr.ltdcen = 1 - } - - static func setLayer2Position(_ point: Point) { - // swift-format-ignore: NeverForceUnwrap - var ltdc = LTDC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4001_6800)!) - - let i: Int = - ((LTDCConstants.layerWidth + LTDCConstants.hbp + LTDCConstants.hsync - 1 - + point.x) << 16) | (LTDCConstants.hbp + LTDCConstants.hsync + point.x) - ltdc.l2whpcr.rawValue = UInt32(i) - let j: Int = - ((LTDCConstants.layerHeight + LTDCConstants.vsync + LTDCConstants.vbp - 1 - + point.y) << 16) | (LTDCConstants.vsync + LTDCConstants.vbp + point.y) - ltdc.l2wvpcr.rawValue = UInt32(j) - ltdc.srcr.vbr = 1 - } - - static func setBackgroundColor(_ color: Color) { - // swift-format-ignore: NeverForceUnwrap - var ltdc = LTDC( - baseAddress: UnsafeMutableRawPointer(bitPattern: 0x4001_6800)!) - - ltdc.bccr.rawValue = UInt32(color.r | (color.g << 8) | (color.b << 16)) - } -} diff --git a/stm32-lcd-logo/Support/LTDC.swift b/stm32-lcd-logo/Support/LTDC.swift deleted file mode 100644 index 2a1446d6..00000000 --- a/stm32-lcd-logo/Support/LTDC.swift +++ /dev/null @@ -1,1425 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -// swift-format-ignore-file - -/// LCD-TFT Controller -public struct LTDC { - public var baseAddress: UnsafeMutableRawPointer - - enum Offsets { - static let SSCR: Int32 = 0x8 - static let BPCR: Int32 = 0xc - static let AWCR: Int32 = 0x10 - static let TWCR: Int32 = 0x14 - static let GCR: Int32 = 0x18 - static let SRCR: Int32 = 0x24 - static let BCCR: Int32 = 0x2c - static let IER: Int32 = 0x34 - static let ISR: Int32 = 0x38 - static let ICR: Int32 = 0x3c - static let LIPCR: Int32 = 0x40 - static let CPSR: Int32 = 0x44 - static let CDSR: Int32 = 0x48 - static let L1CR: Int32 = 0x84 - static let L1WHPCR: Int32 = 0x88 - static let L1WVPCR: Int32 = 0x8c - static let L1CKCR: Int32 = 0x90 - static let L1PFCR: Int32 = 0x94 - static let L1CACR: Int32 = 0x98 - static let L1DCCR: Int32 = 0x9c - static let L1BFCR: Int32 = 0xa0 - static let L1CFBAR: Int32 = 0xac - static let L1CFBLR: Int32 = 0xb0 - static let L1CFBLNR: Int32 = 0xb4 - static let L1CLUTWR: Int32 = 0xc4 - static let L2CR: Int32 = 0x104 - static let L2WHPCR: Int32 = 0x108 - static let L2WVPCR: Int32 = 0x10c - static let L2CKCR: Int32 = 0x110 - static let L2PFCR: Int32 = 0x114 - static let L2CACR: Int32 = 0x118 - static let L2DCCR: Int32 = 0x11c - static let L2BFCR: Int32 = 0x120 - static let L2CFBAR: Int32 = 0x12c - static let L2CFBLR: Int32 = 0x130 - static let L2CFBLNR: Int32 = 0x134 - static let L2CLUTWR: Int32 = 0x144 - } - - private func ld(_ offset: Int32) -> UInt32 { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileLoad() - } - - private func st(_ offset: Int32, _ value: UInt32) { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileStore(value) - } - - /// Synchronization Size Configuration Register - public var sscr: SSCR { - get { SSCR(rawValue: ld(Offsets.SSCR)) } - set { st(Offsets.SSCR, newValue.rawValue) } - } - /// Back Porch Configuration Register - public var bpcr: BPCR { - get { BPCR(rawValue: ld(Offsets.BPCR)) } - set { st(Offsets.BPCR, newValue.rawValue) } - } - /// Active Width Configuration Register - public var awcr: AWCR { - get { AWCR(rawValue: ld(Offsets.AWCR)) } - set { st(Offsets.AWCR, newValue.rawValue) } - } - /// Total Width Configuration Register - public var twcr: TWCR { - get { TWCR(rawValue: ld(Offsets.TWCR)) } - set { st(Offsets.TWCR, newValue.rawValue) } - } - /// Global Control Register - public var gcr: GCR { - get { GCR(rawValue: ld(Offsets.GCR)) } - set { st(Offsets.GCR, newValue.rawValue) } - } - /// Shadow Reload Configuration Register - public var srcr: SRCR { - get { SRCR(rawValue: ld(Offsets.SRCR)) } - set { st(Offsets.SRCR, newValue.rawValue) } - } - /// Background Color Configuration Register - public var bccr: BCCR { - get { BCCR(rawValue: ld(Offsets.BCCR)) } - set { st(Offsets.BCCR, newValue.rawValue) } - } - /// Interrupt Enable Register - public var ier: IER { - get { IER(rawValue: ld(Offsets.IER)) } - set { st(Offsets.IER, newValue.rawValue) } - } - /// Interrupt Status Register - public var isr: ISR { - get { ISR(rawValue: ld(Offsets.ISR)) } - set { st(Offsets.ISR, newValue.rawValue) } - } - /// Interrupt Clear Register - public var icr: ICR { - get { ICR(rawValue: ld(Offsets.ICR)) } - set { st(Offsets.ICR, newValue.rawValue) } - } - /// Line Interrupt Position Configuration Register - public var lipcr: LIPCR { - get { LIPCR(rawValue: ld(Offsets.LIPCR)) } - set { st(Offsets.LIPCR, newValue.rawValue) } - } - /// Current Position Status Register - public var cpsr: CPSR { - get { CPSR(rawValue: ld(Offsets.CPSR)) } - set { st(Offsets.CPSR, newValue.rawValue) } - } - /// Current Display Status Register - public var cdsr: CDSR { - get { CDSR(rawValue: ld(Offsets.CDSR)) } - set { st(Offsets.CDSR, newValue.rawValue) } - } - /// Layerx Control Register - public var l1cr: L1CR { - get { L1CR(rawValue: ld(Offsets.L1CR)) } - set { st(Offsets.L1CR, newValue.rawValue) } - } - /// Layerx Window Horizontal Position Configuration Register - public var l1whpcr: L1WHPCR { - get { L1WHPCR(rawValue: ld(Offsets.L1WHPCR)) } - set { st(Offsets.L1WHPCR, newValue.rawValue) } - } - /// Layerx Window Vertical Position Configuration Register - public var l1wvpcr: L1WVPCR { - get { L1WVPCR(rawValue: ld(Offsets.L1WVPCR)) } - set { st(Offsets.L1WVPCR, newValue.rawValue) } - } - /// Layerx Color Keying Configuration Register - public var l1ckcr: L1CKCR { - get { L1CKCR(rawValue: ld(Offsets.L1CKCR)) } - set { st(Offsets.L1CKCR, newValue.rawValue) } - } - /// Layerx Pixel Format Configuration Register - public var l1pfcr: L1PFCR { - get { L1PFCR(rawValue: ld(Offsets.L1PFCR)) } - set { st(Offsets.L1PFCR, newValue.rawValue) } - } - /// Layerx Constant Alpha Configuration Register - public var l1cacr: L1CACR { - get { L1CACR(rawValue: ld(Offsets.L1CACR)) } - set { st(Offsets.L1CACR, newValue.rawValue) } - } - /// Layerx Default Color Configuration Register - public var l1dccr: L1DCCR { - get { L1DCCR(rawValue: ld(Offsets.L1DCCR)) } - set { st(Offsets.L1DCCR, newValue.rawValue) } - } - /// Layerx Blending Factors Configuration Register - public var l1bfcr: L1BFCR { - get { L1BFCR(rawValue: ld(Offsets.L1BFCR)) } - set { st(Offsets.L1BFCR, newValue.rawValue) } - } - /// Layerx Color Frame Buffer Address Register - public var l1cfbar: L1CFBAR { - get { L1CFBAR(rawValue: ld(Offsets.L1CFBAR)) } - set { st(Offsets.L1CFBAR, newValue.rawValue) } - } - /// Layerx Color Frame Buffer Length Register - public var l1cfblr: L1CFBLR { - get { L1CFBLR(rawValue: ld(Offsets.L1CFBLR)) } - set { st(Offsets.L1CFBLR, newValue.rawValue) } - } - /// Layerx ColorFrame Buffer Line Number Register - public var l1cfblnr: L1CFBLNR { - get { L1CFBLNR(rawValue: ld(Offsets.L1CFBLNR)) } - set { st(Offsets.L1CFBLNR, newValue.rawValue) } - } - /// Layerx CLUT Write Register - public var l1clutwr: L1CLUTWR { - get { L1CLUTWR(rawValue: ld(Offsets.L1CLUTWR)) } - set { st(Offsets.L1CLUTWR, newValue.rawValue) } - } - /// Layerx Control Register - public var l2cr: L2CR { - get { L2CR(rawValue: ld(Offsets.L2CR)) } - set { st(Offsets.L2CR, newValue.rawValue) } - } - /// Layerx Window Horizontal Position Configuration Register - public var l2whpcr: L2WHPCR { - get { L2WHPCR(rawValue: ld(Offsets.L2WHPCR)) } - set { st(Offsets.L2WHPCR, newValue.rawValue) } - } - /// Layerx Window Vertical Position Configuration Register - public var l2wvpcr: L2WVPCR { - get { L2WVPCR(rawValue: ld(Offsets.L2WVPCR)) } - set { st(Offsets.L2WVPCR, newValue.rawValue) } - } - /// Layerx Color Keying Configuration Register - public var l2ckcr: L2CKCR { - get { L2CKCR(rawValue: ld(Offsets.L2CKCR)) } - set { st(Offsets.L2CKCR, newValue.rawValue) } - } - /// Layerx Pixel Format Configuration Register - public var l2pfcr: L2PFCR { - get { L2PFCR(rawValue: ld(Offsets.L2PFCR)) } - set { st(Offsets.L2PFCR, newValue.rawValue) } - } - /// Layerx Constant Alpha Configuration Register - public var l2cacr: L2CACR { - get { L2CACR(rawValue: ld(Offsets.L2CACR)) } - set { st(Offsets.L2CACR, newValue.rawValue) } - } - /// Layerx Default Color Configuration Register - public var l2dccr: L2DCCR { - get { L2DCCR(rawValue: ld(Offsets.L2DCCR)) } - set { st(Offsets.L2DCCR, newValue.rawValue) } - } - /// Layerx Blending Factors Configuration Register - public var l2bfcr: L2BFCR { - get { L2BFCR(rawValue: ld(Offsets.L2BFCR)) } - set { st(Offsets.L2BFCR, newValue.rawValue) } - } - /// Layerx Color Frame Buffer Address Register - public var l2cfbar: L2CFBAR { - get { L2CFBAR(rawValue: ld(Offsets.L2CFBAR)) } - set { st(Offsets.L2CFBAR, newValue.rawValue) } - } - /// Layerx Color Frame Buffer Length Register - public var l2cfblr: L2CFBLR { - get { L2CFBLR(rawValue: ld(Offsets.L2CFBLR)) } - set { st(Offsets.L2CFBLR, newValue.rawValue) } - } - /// Layerx ColorFrame Buffer Line Number Register - public var l2cfblnr: L2CFBLNR { - get { L2CFBLNR(rawValue: ld(Offsets.L2CFBLNR)) } - set { st(Offsets.L2CFBLNR, newValue.rawValue) } - } - /// Layerx CLUT Write Register - public var l2clutwr: L2CLUTWR { - get { L2CLUTWR(rawValue: ld(Offsets.L2CLUTWR)) } - set { st(Offsets.L2CLUTWR, newValue.rawValue) } - } -} - -extension LTDC { - public struct SSCR { - public var rawValue: UInt32 - - static let hsw_offset = UInt32(16) - static let hsw_mask = UInt32(0b1111111111) &<< hsw_offset - public var hsw: UInt16 { - get { UInt16((self.rawValue & (LTDC.SSCR.hsw_mask)) >> LTDC.SSCR.hsw_offset) } - set { - let preserve = self.rawValue & ~LTDC.SSCR.hsw_mask - let shift = (UInt32(newValue) << LTDC.SSCR.hsw_offset) & LTDC.SSCR.hsw_mask - self.rawValue = preserve | shift - } - } - - static let vsh_offset = UInt32(0) - static let vsh_mask = UInt32(0b11111111111) &<< vsh_offset - public var vsh: UInt16 { - get { UInt16((self.rawValue & (LTDC.SSCR.vsh_mask)) >> LTDC.SSCR.vsh_offset) } - set { - let preserve = self.rawValue & ~LTDC.SSCR.vsh_mask - let shift = (UInt32(newValue) << LTDC.SSCR.vsh_offset) & LTDC.SSCR.vsh_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct BPCR { - public var rawValue: UInt32 - - static let ahbp_offset = UInt32(16) - static let ahbp_mask = UInt32(0b1111111111) &<< ahbp_offset - public var ahbp: UInt16 { - get { UInt16((self.rawValue & (LTDC.BPCR.ahbp_mask)) >> LTDC.BPCR.ahbp_offset) } - set { - let preserve = self.rawValue & ~LTDC.BPCR.ahbp_mask - let shift = (UInt32(newValue) << LTDC.BPCR.ahbp_offset) & LTDC.BPCR.ahbp_mask - self.rawValue = preserve | shift - } - } - - static let avbp_offset = UInt32(0) - static let avbp_mask = UInt32(0b11111111111) &<< avbp_offset - public var avbp: UInt16 { - get { UInt16((self.rawValue & (LTDC.BPCR.avbp_mask)) >> LTDC.BPCR.avbp_offset) } - set { - let preserve = self.rawValue & ~LTDC.BPCR.avbp_mask - let shift = (UInt32(newValue) << LTDC.BPCR.avbp_offset) & LTDC.BPCR.avbp_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct AWCR { - public var rawValue: UInt32 - - static let aav_offset = UInt32(16) - static let aav_mask = UInt32(0b1111111111) &<< aav_offset - public var aav: UInt16 { - get { UInt16((self.rawValue & (LTDC.AWCR.aav_mask)) >> LTDC.AWCR.aav_offset) } - set { - let preserve = self.rawValue & ~LTDC.AWCR.aav_mask - let shift = (UInt32(newValue) << LTDC.AWCR.aav_offset) & LTDC.AWCR.aav_mask - self.rawValue = preserve | shift - } - } - - static let aah_offset = UInt32(0) - static let aah_mask = UInt32(0b11111111111) &<< aah_offset - public var aah: UInt16 { - get { UInt16((self.rawValue & (LTDC.AWCR.aah_mask)) >> LTDC.AWCR.aah_offset) } - set { - let preserve = self.rawValue & ~LTDC.AWCR.aah_mask - let shift = (UInt32(newValue) << LTDC.AWCR.aah_offset) & LTDC.AWCR.aah_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct TWCR { - public var rawValue: UInt32 - - static let totalw_offset = UInt32(16) - static let totalw_mask = UInt32(0b1111111111) &<< totalw_offset - public var totalw: UInt16 { - get { UInt16((self.rawValue & (LTDC.TWCR.totalw_mask)) >> LTDC.TWCR.totalw_offset) } - set { - let preserve = self.rawValue & ~LTDC.TWCR.totalw_mask - let shift = (UInt32(newValue) << LTDC.TWCR.totalw_offset) & LTDC.TWCR.totalw_mask - self.rawValue = preserve | shift - } - } - - static let totalh_offset = UInt32(0) - static let totalh_mask = UInt32(0b11111111111) &<< totalh_offset - public var totalh: UInt16 { - get { UInt16((self.rawValue & (LTDC.TWCR.totalh_mask)) >> LTDC.TWCR.totalh_offset) } - set { - let preserve = self.rawValue & ~LTDC.TWCR.totalh_mask - let shift = (UInt32(newValue) << LTDC.TWCR.totalh_offset) & LTDC.TWCR.totalh_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct GCR { - public var rawValue: UInt32 - - static let hspol_offset = UInt32(31) - static let hspol_mask = UInt32(0b1) &<< hspol_offset - public var hspol: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.hspol_mask)) >> LTDC.GCR.hspol_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.hspol_mask - let shift = (UInt32(newValue) << LTDC.GCR.hspol_offset) & LTDC.GCR.hspol_mask - self.rawValue = preserve | shift - } - } - - static let vspol_offset = UInt32(30) - static let vspol_mask = UInt32(0b1) &<< vspol_offset - public var vspol: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.vspol_mask)) >> LTDC.GCR.vspol_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.vspol_mask - let shift = (UInt32(newValue) << LTDC.GCR.vspol_offset) & LTDC.GCR.vspol_mask - self.rawValue = preserve | shift - } - } - - static let depol_offset = UInt32(29) - static let depol_mask = UInt32(0b1) &<< depol_offset - public var depol: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.depol_mask)) >> LTDC.GCR.depol_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.depol_mask - let shift = (UInt32(newValue) << LTDC.GCR.depol_offset) & LTDC.GCR.depol_mask - self.rawValue = preserve | shift - } - } - - static let pcpol_offset = UInt32(28) - static let pcpol_mask = UInt32(0b1) &<< pcpol_offset - public var pcpol: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.pcpol_mask)) >> LTDC.GCR.pcpol_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.pcpol_mask - let shift = (UInt32(newValue) << LTDC.GCR.pcpol_offset) & LTDC.GCR.pcpol_mask - self.rawValue = preserve | shift - } - } - - static let den_offset = UInt32(16) - static let den_mask = UInt32(0b1) &<< den_offset - public var den: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.den_mask)) >> LTDC.GCR.den_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.den_mask - let shift = (UInt32(newValue) << LTDC.GCR.den_offset) & LTDC.GCR.den_mask - self.rawValue = preserve | shift - } - } - - static let drw_offset = UInt32(12) - static let drw_mask = UInt32(0b111) &<< drw_offset - public var drw: UInt8 { - UInt8((self.rawValue & (LTDC.GCR.drw_mask)) >> LTDC.GCR.drw_offset) - } - - static let dgw_offset = UInt32(8) - static let dgw_mask = UInt32(0b111) &<< dgw_offset - public var dgw: UInt8 { - UInt8((self.rawValue & (LTDC.GCR.dgw_mask)) >> LTDC.GCR.dgw_offset) - } - - static let dbw_offset = UInt32(4) - static let dbw_mask = UInt32(0b111) &<< dbw_offset - public var dbw: UInt8 { - UInt8((self.rawValue & (LTDC.GCR.dbw_mask)) >> LTDC.GCR.dbw_offset) - } - - static let ltdcen_offset = UInt32(0) - static let ltdcen_mask = UInt32(0b1) &<< ltdcen_offset - public var ltdcen: UInt8 { - get { UInt8((self.rawValue & (LTDC.GCR.ltdcen_mask)) >> LTDC.GCR.ltdcen_offset) } - set { - let preserve = self.rawValue & ~LTDC.GCR.ltdcen_mask - let shift = (UInt32(newValue) << LTDC.GCR.ltdcen_offset) & LTDC.GCR.ltdcen_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct SRCR { - public var rawValue: UInt32 - - static let vbr_offset = UInt32(1) - static let vbr_mask = UInt32(0b1) &<< vbr_offset - public var vbr: UInt8 { - get { UInt8((self.rawValue & (LTDC.SRCR.vbr_mask)) >> LTDC.SRCR.vbr_offset) } - set { - let preserve = self.rawValue & ~LTDC.SRCR.vbr_mask - let shift = (UInt32(newValue) << LTDC.SRCR.vbr_offset) & LTDC.SRCR.vbr_mask - self.rawValue = preserve | shift - } - } - - static let imr_offset = UInt32(0) - static let imr_mask = UInt32(0b1) &<< imr_offset - public var imr: UInt8 { - get { UInt8((self.rawValue & (LTDC.SRCR.imr_mask)) >> LTDC.SRCR.imr_offset) } - set { - let preserve = self.rawValue & ~LTDC.SRCR.imr_mask - let shift = (UInt32(newValue) << LTDC.SRCR.imr_offset) & LTDC.SRCR.imr_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct BCCR { - public var rawValue: UInt32 - - static let bc_offset = UInt32(0) - static let bc_mask = UInt32(0b111111111111111111111111) &<< bc_offset - public var bc: UInt32 { - get { UInt32((self.rawValue & (LTDC.BCCR.bc_mask)) >> LTDC.BCCR.bc_offset) } - set { - let preserve = self.rawValue & ~LTDC.BCCR.bc_mask - let shift = (UInt32(newValue) << LTDC.BCCR.bc_offset) & LTDC.BCCR.bc_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct IER { - public var rawValue: UInt32 - - static let rrie_offset = UInt32(3) - static let rrie_mask = UInt32(0b1) &<< rrie_offset - public var rrie: UInt8 { - get { UInt8((self.rawValue & (LTDC.IER.rrie_mask)) >> LTDC.IER.rrie_offset) } - set { - let preserve = self.rawValue & ~LTDC.IER.rrie_mask - let shift = (UInt32(newValue) << LTDC.IER.rrie_offset) & LTDC.IER.rrie_mask - self.rawValue = preserve | shift - } - } - - static let terrie_offset = UInt32(2) - static let terrie_mask = UInt32(0b1) &<< terrie_offset - public var terrie: UInt8 { - get { UInt8((self.rawValue & (LTDC.IER.terrie_mask)) >> LTDC.IER.terrie_offset) } - set { - let preserve = self.rawValue & ~LTDC.IER.terrie_mask - let shift = (UInt32(newValue) << LTDC.IER.terrie_offset) & LTDC.IER.terrie_mask - self.rawValue = preserve | shift - } - } - - static let fuie_offset = UInt32(1) - static let fuie_mask = UInt32(0b1) &<< fuie_offset - public var fuie: UInt8 { - get { UInt8((self.rawValue & (LTDC.IER.fuie_mask)) >> LTDC.IER.fuie_offset) } - set { - let preserve = self.rawValue & ~LTDC.IER.fuie_mask - let shift = (UInt32(newValue) << LTDC.IER.fuie_offset) & LTDC.IER.fuie_mask - self.rawValue = preserve | shift - } - } - - static let lie_offset = UInt32(0) - static let lie_mask = UInt32(0b1) &<< lie_offset - public var lie: UInt8 { - get { UInt8((self.rawValue & (LTDC.IER.lie_mask)) >> LTDC.IER.lie_offset) } - set { - let preserve = self.rawValue & ~LTDC.IER.lie_mask - let shift = (UInt32(newValue) << LTDC.IER.lie_offset) & LTDC.IER.lie_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct ISR { - public var rawValue: UInt32 - - static let rrif_offset = UInt32(3) - static let rrif_mask = UInt32(0b1) &<< rrif_offset - public var rrif: UInt8 { - UInt8((self.rawValue & (LTDC.ISR.rrif_mask)) >> LTDC.ISR.rrif_offset) - } - - static let terrif_offset = UInt32(2) - static let terrif_mask = UInt32(0b1) &<< terrif_offset - public var terrif: UInt8 { - UInt8((self.rawValue & (LTDC.ISR.terrif_mask)) >> LTDC.ISR.terrif_offset) - } - - static let fuif_offset = UInt32(1) - static let fuif_mask = UInt32(0b1) &<< fuif_offset - public var fuif: UInt8 { - UInt8((self.rawValue & (LTDC.ISR.fuif_mask)) >> LTDC.ISR.fuif_offset) - } - - static let lif_offset = UInt32(0) - static let lif_mask = UInt32(0b1) &<< lif_offset - public var lif: UInt8 { - UInt8((self.rawValue & (LTDC.ISR.lif_mask)) >> LTDC.ISR.lif_offset) - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct ICR { - public var rawValue: UInt32 - - static let crrif_offset = UInt32(3) - static let crrif_mask = UInt32(0b1) &<< crrif_offset - public var crrif: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.ICR.crrif_offset) & LTDC.ICR.crrif_mask - } - } - - static let cterrif_offset = UInt32(2) - static let cterrif_mask = UInt32(0b1) &<< cterrif_offset - public var cterrif: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.ICR.cterrif_offset) & LTDC.ICR.cterrif_mask - } - } - - static let cfuif_offset = UInt32(1) - static let cfuif_mask = UInt32(0b1) &<< cfuif_offset - public var cfuif: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.ICR.cfuif_offset) & LTDC.ICR.cfuif_mask - } - } - - static let clif_offset = UInt32(0) - static let clif_mask = UInt32(0b1) &<< clif_offset - public var clif: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.ICR.clif_offset) & LTDC.ICR.clif_mask - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct LIPCR { - public var rawValue: UInt32 - - static let lipos_offset = UInt32(0) - static let lipos_mask = UInt32(0b11111111111) &<< lipos_offset - public var lipos: UInt16 { - get { UInt16((self.rawValue & (LTDC.LIPCR.lipos_mask)) >> LTDC.LIPCR.lipos_offset) } - set { - let preserve = self.rawValue & ~LTDC.LIPCR.lipos_mask - let shift = (UInt32(newValue) << LTDC.LIPCR.lipos_offset) & LTDC.LIPCR.lipos_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct CPSR { - public var rawValue: UInt32 - - static let cxpos_offset = UInt32(16) - static let cxpos_mask = UInt32(0b1111111111111111) &<< cxpos_offset - public var cxpos: UInt16 { - UInt16((self.rawValue & (LTDC.CPSR.cxpos_mask)) >> LTDC.CPSR.cxpos_offset) - } - - static let cypos_offset = UInt32(0) - static let cypos_mask = UInt32(0b1111111111111111) &<< cypos_offset - public var cypos: UInt16 { - UInt16((self.rawValue & (LTDC.CPSR.cypos_mask)) >> LTDC.CPSR.cypos_offset) - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct CDSR { - public var rawValue: UInt32 - - static let hsyncs_offset = UInt32(3) - static let hsyncs_mask = UInt32(0b1) &<< hsyncs_offset - public var hsyncs: UInt8 { - UInt8((self.rawValue & (LTDC.CDSR.hsyncs_mask)) >> LTDC.CDSR.hsyncs_offset) - } - - static let vsyncs_offset = UInt32(2) - static let vsyncs_mask = UInt32(0b1) &<< vsyncs_offset - public var vsyncs: UInt8 { - UInt8((self.rawValue & (LTDC.CDSR.vsyncs_mask)) >> LTDC.CDSR.vsyncs_offset) - } - - static let hdes_offset = UInt32(1) - static let hdes_mask = UInt32(0b1) &<< hdes_offset - public var hdes: UInt8 { - UInt8((self.rawValue & (LTDC.CDSR.hdes_mask)) >> LTDC.CDSR.hdes_offset) - } - - static let vdes_offset = UInt32(0) - static let vdes_mask = UInt32(0b1) &<< vdes_offset - public var vdes: UInt8 { - UInt8((self.rawValue & (LTDC.CDSR.vdes_mask)) >> LTDC.CDSR.vdes_offset) - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CR { - public var rawValue: UInt32 - - static let cluten_offset = UInt32(4) - static let cluten_mask = UInt32(0b1) &<< cluten_offset - public var cluten: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CR.cluten_mask)) >> LTDC.L1CR.cluten_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CR.cluten_mask - let shift = (UInt32(newValue) << LTDC.L1CR.cluten_offset) & LTDC.L1CR.cluten_mask - self.rawValue = preserve | shift - } - } - - static let colken_offset = UInt32(1) - static let colken_mask = UInt32(0b1) &<< colken_offset - public var colken: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CR.colken_mask)) >> LTDC.L1CR.colken_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CR.colken_mask - let shift = (UInt32(newValue) << LTDC.L1CR.colken_offset) & LTDC.L1CR.colken_mask - self.rawValue = preserve | shift - } - } - - static let len_offset = UInt32(0) - static let len_mask = UInt32(0b1) &<< len_offset - public var len: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CR.len_mask)) >> LTDC.L1CR.len_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CR.len_mask - let shift = (UInt32(newValue) << LTDC.L1CR.len_offset) & LTDC.L1CR.len_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1WHPCR { - public var rawValue: UInt32 - - static let whsppos_offset = UInt32(16) - static let whsppos_mask = UInt32(0b111111111111) &<< whsppos_offset - public var whsppos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1WHPCR.whsppos_mask)) >> LTDC.L1WHPCR.whsppos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1WHPCR.whsppos_mask - let shift = (UInt32(newValue) << LTDC.L1WHPCR.whsppos_offset) & LTDC.L1WHPCR.whsppos_mask - self.rawValue = preserve | shift - } - } - - static let whstpos_offset = UInt32(0) - static let whstpos_mask = UInt32(0b111111111111) &<< whstpos_offset - public var whstpos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1WHPCR.whstpos_mask)) >> LTDC.L1WHPCR.whstpos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1WHPCR.whstpos_mask - let shift = (UInt32(newValue) << LTDC.L1WHPCR.whstpos_offset) & LTDC.L1WHPCR.whstpos_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1WVPCR { - public var rawValue: UInt32 - - static let wvsppos_offset = UInt32(16) - static let wvsppos_mask = UInt32(0b11111111111) &<< wvsppos_offset - public var wvsppos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1WVPCR.wvsppos_mask)) >> LTDC.L1WVPCR.wvsppos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1WVPCR.wvsppos_mask - let shift = (UInt32(newValue) << LTDC.L1WVPCR.wvsppos_offset) & LTDC.L1WVPCR.wvsppos_mask - self.rawValue = preserve | shift - } - } - - static let wvstpos_offset = UInt32(0) - static let wvstpos_mask = UInt32(0b11111111111) &<< wvstpos_offset - public var wvstpos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1WVPCR.wvstpos_mask)) >> LTDC.L1WVPCR.wvstpos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1WVPCR.wvstpos_mask - let shift = (UInt32(newValue) << LTDC.L1WVPCR.wvstpos_offset) & LTDC.L1WVPCR.wvstpos_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CKCR { - public var rawValue: UInt32 - - static let ckred_offset = UInt32(16) - static let ckred_mask = UInt32(0b11111111) &<< ckred_offset - public var ckred: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CKCR.ckred_mask)) >> LTDC.L1CKCR.ckred_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CKCR.ckred_mask - let shift = (UInt32(newValue) << LTDC.L1CKCR.ckred_offset) & LTDC.L1CKCR.ckred_mask - self.rawValue = preserve | shift - } - } - - static let ckgreen_offset = UInt32(8) - static let ckgreen_mask = UInt32(0b11111111) &<< ckgreen_offset - public var ckgreen: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CKCR.ckgreen_mask)) >> LTDC.L1CKCR.ckgreen_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CKCR.ckgreen_mask - let shift = (UInt32(newValue) << LTDC.L1CKCR.ckgreen_offset) & LTDC.L1CKCR.ckgreen_mask - self.rawValue = preserve | shift - } - } - - static let ckblue_offset = UInt32(0) - static let ckblue_mask = UInt32(0b11111111) &<< ckblue_offset - public var ckblue: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CKCR.ckblue_mask)) >> LTDC.L1CKCR.ckblue_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CKCR.ckblue_mask - let shift = (UInt32(newValue) << LTDC.L1CKCR.ckblue_offset) & LTDC.L1CKCR.ckblue_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1PFCR { - public var rawValue: UInt32 - - static let pf_offset = UInt32(0) - static let pf_mask = UInt32(0b111) &<< pf_offset - public var pf: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1PFCR.pf_mask)) >> LTDC.L1PFCR.pf_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1PFCR.pf_mask - let shift = (UInt32(newValue) << LTDC.L1PFCR.pf_offset) & LTDC.L1PFCR.pf_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CACR { - public var rawValue: UInt32 - - static let consta_offset = UInt32(0) - static let consta_mask = UInt32(0b11111111) &<< consta_offset - public var consta: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1CACR.consta_mask)) >> LTDC.L1CACR.consta_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CACR.consta_mask - let shift = (UInt32(newValue) << LTDC.L1CACR.consta_offset) & LTDC.L1CACR.consta_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1DCCR { - public var rawValue: UInt32 - - static let dcalpha_offset = UInt32(24) - static let dcalpha_mask = UInt32(0b11111111) &<< dcalpha_offset - public var dcalpha: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1DCCR.dcalpha_mask)) >> LTDC.L1DCCR.dcalpha_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1DCCR.dcalpha_mask - let shift = (UInt32(newValue) << LTDC.L1DCCR.dcalpha_offset) & LTDC.L1DCCR.dcalpha_mask - self.rawValue = preserve | shift - } - } - - static let dcred_offset = UInt32(16) - static let dcred_mask = UInt32(0b11111111) &<< dcred_offset - public var dcred: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1DCCR.dcred_mask)) >> LTDC.L1DCCR.dcred_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1DCCR.dcred_mask - let shift = (UInt32(newValue) << LTDC.L1DCCR.dcred_offset) & LTDC.L1DCCR.dcred_mask - self.rawValue = preserve | shift - } - } - - static let dcgreen_offset = UInt32(8) - static let dcgreen_mask = UInt32(0b11111111) &<< dcgreen_offset - public var dcgreen: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1DCCR.dcgreen_mask)) >> LTDC.L1DCCR.dcgreen_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1DCCR.dcgreen_mask - let shift = (UInt32(newValue) << LTDC.L1DCCR.dcgreen_offset) & LTDC.L1DCCR.dcgreen_mask - self.rawValue = preserve | shift - } - } - - static let dcblue_offset = UInt32(0) - static let dcblue_mask = UInt32(0b11111111) &<< dcblue_offset - public var dcblue: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1DCCR.dcblue_mask)) >> LTDC.L1DCCR.dcblue_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1DCCR.dcblue_mask - let shift = (UInt32(newValue) << LTDC.L1DCCR.dcblue_offset) & LTDC.L1DCCR.dcblue_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1BFCR { - public var rawValue: UInt32 - - static let bf1_offset = UInt32(8) - static let bf1_mask = UInt32(0b111) &<< bf1_offset - public var bf1: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1BFCR.bf1_mask)) >> LTDC.L1BFCR.bf1_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1BFCR.bf1_mask - let shift = (UInt32(newValue) << LTDC.L1BFCR.bf1_offset) & LTDC.L1BFCR.bf1_mask - self.rawValue = preserve | shift - } - } - - static let bf2_offset = UInt32(0) - static let bf2_mask = UInt32(0b111) &<< bf2_offset - public var bf2: UInt8 { - get { UInt8((self.rawValue & (LTDC.L1BFCR.bf2_mask)) >> LTDC.L1BFCR.bf2_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1BFCR.bf2_mask - let shift = (UInt32(newValue) << LTDC.L1BFCR.bf2_offset) & LTDC.L1BFCR.bf2_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CFBAR { - public var rawValue: UInt32 - - static let cfbadd_offset = UInt32(0) - static let cfbadd_mask = UInt32(0b11111111111111111111111111111111) &<< cfbadd_offset - public var cfbadd: UInt32 { - get { UInt32((self.rawValue & (LTDC.L1CFBAR.cfbadd_mask)) >> LTDC.L1CFBAR.cfbadd_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CFBAR.cfbadd_mask - let shift = (UInt32(newValue) << LTDC.L1CFBAR.cfbadd_offset) & LTDC.L1CFBAR.cfbadd_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CFBLR { - public var rawValue: UInt32 - - static let cfbp_offset = UInt32(16) - static let cfbp_mask = UInt32(0b1111111111111) &<< cfbp_offset - public var cfbp: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1CFBLR.cfbp_mask)) >> LTDC.L1CFBLR.cfbp_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CFBLR.cfbp_mask - let shift = (UInt32(newValue) << LTDC.L1CFBLR.cfbp_offset) & LTDC.L1CFBLR.cfbp_mask - self.rawValue = preserve | shift - } - } - - static let cfbll_offset = UInt32(0) - static let cfbll_mask = UInt32(0b1111111111111) &<< cfbll_offset - public var cfbll: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1CFBLR.cfbll_mask)) >> LTDC.L1CFBLR.cfbll_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CFBLR.cfbll_mask - let shift = (UInt32(newValue) << LTDC.L1CFBLR.cfbll_offset) & LTDC.L1CFBLR.cfbll_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CFBLNR { - public var rawValue: UInt32 - - static let cfblnbr_offset = UInt32(0) - static let cfblnbr_mask = UInt32(0b11111111111) &<< cfblnbr_offset - public var cfblnbr: UInt16 { - get { UInt16((self.rawValue & (LTDC.L1CFBLNR.cfblnbr_mask)) >> LTDC.L1CFBLNR.cfblnbr_offset) } - set { - let preserve = self.rawValue & ~LTDC.L1CFBLNR.cfblnbr_mask - let shift = (UInt32(newValue) << LTDC.L1CFBLNR.cfblnbr_offset) & LTDC.L1CFBLNR.cfblnbr_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L1CLUTWR { - public var rawValue: UInt32 - - static let clutadd_offset = UInt32(24) - static let clutadd_mask = UInt32(0b11111111) &<< clutadd_offset - public var clutadd: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L1CLUTWR.clutadd_offset) & LTDC.L1CLUTWR.clutadd_mask - } - } - - static let red_offset = UInt32(16) - static let red_mask = UInt32(0b11111111) &<< red_offset - public var red: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L1CLUTWR.red_offset) & LTDC.L1CLUTWR.red_mask - } - } - - static let green_offset = UInt32(8) - static let green_mask = UInt32(0b11111111) &<< green_offset - public var green: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L1CLUTWR.green_offset) & LTDC.L1CLUTWR.green_mask - } - } - - static let blue_offset = UInt32(0) - static let blue_mask = UInt32(0b11111111) &<< blue_offset - public var blue: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L1CLUTWR.blue_offset) & LTDC.L1CLUTWR.blue_mask - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CR { - public var rawValue: UInt32 - - static let cluten_offset = UInt32(4) - static let cluten_mask = UInt32(0b1) &<< cluten_offset - public var cluten: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CR.cluten_mask)) >> LTDC.L2CR.cluten_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CR.cluten_mask - let shift = (UInt32(newValue) << LTDC.L2CR.cluten_offset) & LTDC.L2CR.cluten_mask - self.rawValue = preserve | shift - } - } - - static let colken_offset = UInt32(1) - static let colken_mask = UInt32(0b1) &<< colken_offset - public var colken: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CR.colken_mask)) >> LTDC.L2CR.colken_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CR.colken_mask - let shift = (UInt32(newValue) << LTDC.L2CR.colken_offset) & LTDC.L2CR.colken_mask - self.rawValue = preserve | shift - } - } - - static let len_offset = UInt32(0) - static let len_mask = UInt32(0b1) &<< len_offset - public var len: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CR.len_mask)) >> LTDC.L2CR.len_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CR.len_mask - let shift = (UInt32(newValue) << LTDC.L2CR.len_offset) & LTDC.L2CR.len_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2WHPCR { - public var rawValue: UInt32 - - static let whsppos_offset = UInt32(16) - static let whsppos_mask = UInt32(0b111111111111) &<< whsppos_offset - public var whsppos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2WHPCR.whsppos_mask)) >> LTDC.L2WHPCR.whsppos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2WHPCR.whsppos_mask - let shift = (UInt32(newValue) << LTDC.L2WHPCR.whsppos_offset) & LTDC.L2WHPCR.whsppos_mask - self.rawValue = preserve | shift - } - } - - static let whstpos_offset = UInt32(0) - static let whstpos_mask = UInt32(0b111111111111) &<< whstpos_offset - public var whstpos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2WHPCR.whstpos_mask)) >> LTDC.L2WHPCR.whstpos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2WHPCR.whstpos_mask - let shift = (UInt32(newValue) << LTDC.L2WHPCR.whstpos_offset) & LTDC.L2WHPCR.whstpos_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2WVPCR { - public var rawValue: UInt32 - - static let wvsppos_offset = UInt32(16) - static let wvsppos_mask = UInt32(0b11111111111) &<< wvsppos_offset - public var wvsppos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2WVPCR.wvsppos_mask)) >> LTDC.L2WVPCR.wvsppos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2WVPCR.wvsppos_mask - let shift = (UInt32(newValue) << LTDC.L2WVPCR.wvsppos_offset) & LTDC.L2WVPCR.wvsppos_mask - self.rawValue = preserve | shift - } - } - - static let wvstpos_offset = UInt32(0) - static let wvstpos_mask = UInt32(0b11111111111) &<< wvstpos_offset - public var wvstpos: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2WVPCR.wvstpos_mask)) >> LTDC.L2WVPCR.wvstpos_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2WVPCR.wvstpos_mask - let shift = (UInt32(newValue) << LTDC.L2WVPCR.wvstpos_offset) & LTDC.L2WVPCR.wvstpos_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CKCR { - public var rawValue: UInt32 - - static let ckred_offset = UInt32(15) - static let ckred_mask = UInt32(0b111111111) &<< ckred_offset - public var ckred: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2CKCR.ckred_mask)) >> LTDC.L2CKCR.ckred_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CKCR.ckred_mask - let shift = (UInt32(newValue) << LTDC.L2CKCR.ckred_offset) & LTDC.L2CKCR.ckred_mask - self.rawValue = preserve | shift - } - } - - static let ckgreen_offset = UInt32(8) - static let ckgreen_mask = UInt32(0b1111111) &<< ckgreen_offset - public var ckgreen: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CKCR.ckgreen_mask)) >> LTDC.L2CKCR.ckgreen_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CKCR.ckgreen_mask - let shift = (UInt32(newValue) << LTDC.L2CKCR.ckgreen_offset) & LTDC.L2CKCR.ckgreen_mask - self.rawValue = preserve | shift - } - } - - static let ckblue_offset = UInt32(0) - static let ckblue_mask = UInt32(0b11111111) &<< ckblue_offset - public var ckblue: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CKCR.ckblue_mask)) >> LTDC.L2CKCR.ckblue_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CKCR.ckblue_mask - let shift = (UInt32(newValue) << LTDC.L2CKCR.ckblue_offset) & LTDC.L2CKCR.ckblue_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2PFCR { - public var rawValue: UInt32 - - static let pf_offset = UInt32(0) - static let pf_mask = UInt32(0b111) &<< pf_offset - public var pf: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2PFCR.pf_mask)) >> LTDC.L2PFCR.pf_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2PFCR.pf_mask - let shift = (UInt32(newValue) << LTDC.L2PFCR.pf_offset) & LTDC.L2PFCR.pf_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CACR { - public var rawValue: UInt32 - - static let consta_offset = UInt32(0) - static let consta_mask = UInt32(0b11111111) &<< consta_offset - public var consta: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2CACR.consta_mask)) >> LTDC.L2CACR.consta_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CACR.consta_mask - let shift = (UInt32(newValue) << LTDC.L2CACR.consta_offset) & LTDC.L2CACR.consta_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2DCCR { - public var rawValue: UInt32 - - static let dcalpha_offset = UInt32(24) - static let dcalpha_mask = UInt32(0b11111111) &<< dcalpha_offset - public var dcalpha: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2DCCR.dcalpha_mask)) >> LTDC.L2DCCR.dcalpha_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2DCCR.dcalpha_mask - let shift = (UInt32(newValue) << LTDC.L2DCCR.dcalpha_offset) & LTDC.L2DCCR.dcalpha_mask - self.rawValue = preserve | shift - } - } - - static let dcred_offset = UInt32(16) - static let dcred_mask = UInt32(0b11111111) &<< dcred_offset - public var dcred: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2DCCR.dcred_mask)) >> LTDC.L2DCCR.dcred_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2DCCR.dcred_mask - let shift = (UInt32(newValue) << LTDC.L2DCCR.dcred_offset) & LTDC.L2DCCR.dcred_mask - self.rawValue = preserve | shift - } - } - - static let dcgreen_offset = UInt32(8) - static let dcgreen_mask = UInt32(0b11111111) &<< dcgreen_offset - public var dcgreen: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2DCCR.dcgreen_mask)) >> LTDC.L2DCCR.dcgreen_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2DCCR.dcgreen_mask - let shift = (UInt32(newValue) << LTDC.L2DCCR.dcgreen_offset) & LTDC.L2DCCR.dcgreen_mask - self.rawValue = preserve | shift - } - } - - static let dcblue_offset = UInt32(0) - static let dcblue_mask = UInt32(0b11111111) &<< dcblue_offset - public var dcblue: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2DCCR.dcblue_mask)) >> LTDC.L2DCCR.dcblue_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2DCCR.dcblue_mask - let shift = (UInt32(newValue) << LTDC.L2DCCR.dcblue_offset) & LTDC.L2DCCR.dcblue_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2BFCR { - public var rawValue: UInt32 - - static let bf1_offset = UInt32(8) - static let bf1_mask = UInt32(0b111) &<< bf1_offset - public var bf1: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2BFCR.bf1_mask)) >> LTDC.L2BFCR.bf1_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2BFCR.bf1_mask - let shift = (UInt32(newValue) << LTDC.L2BFCR.bf1_offset) & LTDC.L2BFCR.bf1_mask - self.rawValue = preserve | shift - } - } - - static let bf2_offset = UInt32(0) - static let bf2_mask = UInt32(0b111) &<< bf2_offset - public var bf2: UInt8 { - get { UInt8((self.rawValue & (LTDC.L2BFCR.bf2_mask)) >> LTDC.L2BFCR.bf2_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2BFCR.bf2_mask - let shift = (UInt32(newValue) << LTDC.L2BFCR.bf2_offset) & LTDC.L2BFCR.bf2_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CFBAR { - public var rawValue: UInt32 - - static let cfbadd_offset = UInt32(0) - static let cfbadd_mask = UInt32(0b11111111111111111111111111111111) &<< cfbadd_offset - public var cfbadd: UInt32 { - get { UInt32((self.rawValue & (LTDC.L2CFBAR.cfbadd_mask)) >> LTDC.L2CFBAR.cfbadd_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CFBAR.cfbadd_mask - let shift = (UInt32(newValue) << LTDC.L2CFBAR.cfbadd_offset) & LTDC.L2CFBAR.cfbadd_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CFBLR { - public var rawValue: UInt32 - - static let cfbp_offset = UInt32(16) - static let cfbp_mask = UInt32(0b1111111111111) &<< cfbp_offset - public var cfbp: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2CFBLR.cfbp_mask)) >> LTDC.L2CFBLR.cfbp_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CFBLR.cfbp_mask - let shift = (UInt32(newValue) << LTDC.L2CFBLR.cfbp_offset) & LTDC.L2CFBLR.cfbp_mask - self.rawValue = preserve | shift - } - } - - static let cfbll_offset = UInt32(0) - static let cfbll_mask = UInt32(0b1111111111111) &<< cfbll_offset - public var cfbll: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2CFBLR.cfbll_mask)) >> LTDC.L2CFBLR.cfbll_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CFBLR.cfbll_mask - let shift = (UInt32(newValue) << LTDC.L2CFBLR.cfbll_offset) & LTDC.L2CFBLR.cfbll_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CFBLNR { - public var rawValue: UInt32 - - static let cfblnbr_offset = UInt32(0) - static let cfblnbr_mask = UInt32(0b11111111111) &<< cfblnbr_offset - public var cfblnbr: UInt16 { - get { UInt16((self.rawValue & (LTDC.L2CFBLNR.cfblnbr_mask)) >> LTDC.L2CFBLNR.cfblnbr_offset) } - set { - let preserve = self.rawValue & ~LTDC.L2CFBLNR.cfblnbr_mask - let shift = (UInt32(newValue) << LTDC.L2CFBLNR.cfblnbr_offset) & LTDC.L2CFBLNR.cfblnbr_mask - self.rawValue = preserve | shift - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - public struct L2CLUTWR { - public var rawValue: UInt32 - - static let clutadd_offset = UInt32(24) - static let clutadd_mask = UInt32(0b11111111) &<< clutadd_offset - public var clutadd: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L2CLUTWR.clutadd_offset) & LTDC.L2CLUTWR.clutadd_mask - } - } - - static let red_offset = UInt32(16) - static let red_mask = UInt32(0b11111111) &<< red_offset - public var red: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L2CLUTWR.red_offset) & LTDC.L2CLUTWR.red_mask - } - } - - static let green_offset = UInt32(8) - static let green_mask = UInt32(0b11111111) &<< green_offset - public var green: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L2CLUTWR.green_offset) & LTDC.L2CLUTWR.green_mask - } - } - - static let blue_offset = UInt32(0) - static let blue_mask = UInt32(0b11111111) &<< blue_offset - public var blue: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << LTDC.L2CLUTWR.blue_offset) & LTDC.L2CLUTWR.blue_mask - } - } - - public init(rawValue: UInt32) { - self.rawValue = rawValue - } - } -} diff --git a/stm32-lcd-logo/Support/Libc.swift b/stm32-lcd-logo/Support/Libc.swift deleted file mode 100644 index 4c7a346b..00000000 --- a/stm32-lcd-logo/Support/Libc.swift +++ /dev/null @@ -1,33 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -@_silgen_name("memset") -func memset(_ dst: UnsafeMutableRawPointer, _ val: CInt, _ len: Int) - -> UnsafeMutableRawPointer -{ - let dst = dst.bindMemory(to: UInt8.self, capacity: len) - for i in 0.. UnsafeMutableRawPointer -{ - let src = src.bindMemory(to: UInt8.self, capacity: len) - let dst = dst.bindMemory(to: UInt8.self, capacity: len) - for i in 0.. UInt32 { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileLoad() - } - - private func st(_ offset: Int32, _ value: UInt32) { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileStore(value) - } - - /// clock control register - var cr: CR { - get { CR(rawValue: ld(Offsets.CR)) } - set { st(Offsets.CR, newValue.rawValue) } - } - /// PLL configuration register - var pllcfgr: PLLCFGR { - get { PLLCFGR(rawValue: ld(Offsets.PLLCFGR)) } - set { st(Offsets.PLLCFGR, newValue.rawValue) } - } - /// clock configuration register - var cfgr: CFGR { - get { CFGR(rawValue: ld(Offsets.CFGR)) } - set { st(Offsets.CFGR, newValue.rawValue) } - } - /// clock interrupt register - var cir: CIR { - get { CIR(rawValue: ld(Offsets.CIR)) } - set { st(Offsets.CIR, newValue.rawValue) } - } - /// AHB1 peripheral reset register - var ahb1rstr: AHB1RSTR { - get { AHB1RSTR(rawValue: ld(Offsets.AHB1RSTR)) } - set { st(Offsets.AHB1RSTR, newValue.rawValue) } - } - /// AHB2 peripheral reset register - var ahb2rstr: AHB2RSTR { - get { AHB2RSTR(rawValue: ld(Offsets.AHB2RSTR)) } - set { st(Offsets.AHB2RSTR, newValue.rawValue) } - } - /// AHB3 peripheral reset register - var ahb3rstr: AHB3RSTR { - get { AHB3RSTR(rawValue: ld(Offsets.AHB3RSTR)) } - set { st(Offsets.AHB3RSTR, newValue.rawValue) } - } - /// APB1 peripheral reset register - var apb1rstr: APB1RSTR { - get { APB1RSTR(rawValue: ld(Offsets.APB1RSTR)) } - set { st(Offsets.APB1RSTR, newValue.rawValue) } - } - /// APB2 peripheral reset register - var apb2rstr: APB2RSTR { - get { APB2RSTR(rawValue: ld(Offsets.APB2RSTR)) } - set { st(Offsets.APB2RSTR, newValue.rawValue) } - } - /// AHB1 peripheral clock register - var ahb1enr: AHB1ENR { - get { AHB1ENR(rawValue: ld(Offsets.AHB1ENR)) } - set { st(Offsets.AHB1ENR, newValue.rawValue) } - } - /// AHB2 peripheral clock enable register - var ahb2enr: AHB2ENR { - get { AHB2ENR(rawValue: ld(Offsets.AHB2ENR)) } - set { st(Offsets.AHB2ENR, newValue.rawValue) } - } - /// AHB3 peripheral clock enable register - var ahb3enr: AHB3ENR { - get { AHB3ENR(rawValue: ld(Offsets.AHB3ENR)) } - set { st(Offsets.AHB3ENR, newValue.rawValue) } - } - /// APB1 peripheral clock enable register - var apb1enr: APB1ENR { - get { APB1ENR(rawValue: ld(Offsets.APB1ENR)) } - set { st(Offsets.APB1ENR, newValue.rawValue) } - } - /// APB2 peripheral clock enable register - var apb2enr: APB2ENR { - get { APB2ENR(rawValue: ld(Offsets.APB2ENR)) } - set { st(Offsets.APB2ENR, newValue.rawValue) } - } - /// AHB1 peripheral clock enable in low power mode register - var ahb1lpenr: AHB1LPENR { - get { AHB1LPENR(rawValue: ld(Offsets.AHB1LPENR)) } - set { st(Offsets.AHB1LPENR, newValue.rawValue) } - } - /// AHB2 peripheral clock enable in low power mode register - var ahb2lpenr: AHB2LPENR { - get { AHB2LPENR(rawValue: ld(Offsets.AHB2LPENR)) } - set { st(Offsets.AHB2LPENR, newValue.rawValue) } - } - /// AHB3 peripheral clock enable in low power mode register - var ahb3lpenr: AHB3LPENR { - get { AHB3LPENR(rawValue: ld(Offsets.AHB3LPENR)) } - set { st(Offsets.AHB3LPENR, newValue.rawValue) } - } - /// APB1 peripheral clock enable in low power mode register - var apb1lpenr: APB1LPENR { - get { APB1LPENR(rawValue: ld(Offsets.APB1LPENR)) } - set { st(Offsets.APB1LPENR, newValue.rawValue) } - } - /// APB2 peripheral clock enabled in low power mode register - var apb2lpenr: APB2LPENR { - get { APB2LPENR(rawValue: ld(Offsets.APB2LPENR)) } - set { st(Offsets.APB2LPENR, newValue.rawValue) } - } - /// Backup domain control register - var bdcr: BDCR { - get { BDCR(rawValue: ld(Offsets.BDCR)) } - set { st(Offsets.BDCR, newValue.rawValue) } - } - /// clock control & status register - var csr: CSR { - get { CSR(rawValue: ld(Offsets.CSR)) } - set { st(Offsets.CSR, newValue.rawValue) } - } - /// spread spectrum clock generation register - var sscgr: SSCGR { - get { SSCGR(rawValue: ld(Offsets.SSCGR)) } - set { st(Offsets.SSCGR, newValue.rawValue) } - } - /// PLLI2S configuration register - var plli2scfgr: PLLI2SCFGR { - get { PLLI2SCFGR(rawValue: ld(Offsets.PLLI2SCFGR)) } - set { st(Offsets.PLLI2SCFGR, newValue.rawValue) } - } - /// PLL configuration register - var pllsaicfgr: PLLSAICFGR { - get { PLLSAICFGR(rawValue: ld(Offsets.PLLSAICFGR)) } - set { st(Offsets.PLLSAICFGR, newValue.rawValue) } - } - /// dedicated clocks configuration register - var dkcfgr1: DKCFGR1 { - get { DKCFGR1(rawValue: ld(Offsets.DKCFGR1)) } - set { st(Offsets.DKCFGR1, newValue.rawValue) } - } - /// dedicated clocks configuration register - var dkcfgr2: DKCFGR2 { - get { DKCFGR2(rawValue: ld(Offsets.DKCFGR2)) } - set { st(Offsets.DKCFGR2, newValue.rawValue) } - } -} - -extension RCC { - struct CR { - var rawValue: UInt32 - - static let pllsairdy_offset = UInt32(29) - static let pllsairdy_mask = UInt32(0b1) &<< pllsairdy_offset - var pllsairdy: UInt8 { - UInt8((self.rawValue & (RCC.CR.pllsairdy_mask)) >> RCC.CR.pllsairdy_offset) - } - - static let pllsaion_offset = UInt32(28) - static let pllsaion_mask = UInt32(0b1) &<< pllsaion_offset - var pllsaion: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.pllsaion_mask)) >> RCC.CR.pllsaion_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.pllsaion_mask - let shift = (UInt32(newValue) << RCC.CR.pllsaion_offset) & RCC.CR.pllsaion_mask - self.rawValue = preserve | shift - } - } - - static let plli2srdy_offset = UInt32(27) - static let plli2srdy_mask = UInt32(0b1) &<< plli2srdy_offset - var plli2srdy: UInt8 { - UInt8((self.rawValue & (RCC.CR.plli2srdy_mask)) >> RCC.CR.plli2srdy_offset) - } - - static let plli2son_offset = UInt32(26) - static let plli2son_mask = UInt32(0b1) &<< plli2son_offset - var plli2son: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.plli2son_mask)) >> RCC.CR.plli2son_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.plli2son_mask - let shift = (UInt32(newValue) << RCC.CR.plli2son_offset) & RCC.CR.plli2son_mask - self.rawValue = preserve | shift - } - } - - static let pllrdy_offset = UInt32(25) - static let pllrdy_mask = UInt32(0b1) &<< pllrdy_offset - var pllrdy: UInt8 { - UInt8((self.rawValue & (RCC.CR.pllrdy_mask)) >> RCC.CR.pllrdy_offset) - } - - static let pllon_offset = UInt32(24) - static let pllon_mask = UInt32(0b1) &<< pllon_offset - var pllon: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.pllon_mask)) >> RCC.CR.pllon_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.pllon_mask - let shift = (UInt32(newValue) << RCC.CR.pllon_offset) & RCC.CR.pllon_mask - self.rawValue = preserve | shift - } - } - - static let csson_offset = UInt32(19) - static let csson_mask = UInt32(0b1) &<< csson_offset - var csson: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.csson_mask)) >> RCC.CR.csson_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.csson_mask - let shift = (UInt32(newValue) << RCC.CR.csson_offset) & RCC.CR.csson_mask - self.rawValue = preserve | shift - } - } - - static let hsebyp_offset = UInt32(18) - static let hsebyp_mask = UInt32(0b1) &<< hsebyp_offset - var hsebyp: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.hsebyp_mask)) >> RCC.CR.hsebyp_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.hsebyp_mask - let shift = (UInt32(newValue) << RCC.CR.hsebyp_offset) & RCC.CR.hsebyp_mask - self.rawValue = preserve | shift - } - } - - static let hserdy_offset = UInt32(17) - static let hserdy_mask = UInt32(0b1) &<< hserdy_offset - var hserdy: UInt8 { - UInt8((self.rawValue & (RCC.CR.hserdy_mask)) >> RCC.CR.hserdy_offset) - } - - static let hseon_offset = UInt32(16) - static let hseon_mask = UInt32(0b1) &<< hseon_offset - var hseon: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.hseon_mask)) >> RCC.CR.hseon_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.hseon_mask - let shift = (UInt32(newValue) << RCC.CR.hseon_offset) & RCC.CR.hseon_mask - self.rawValue = preserve | shift - } - } - - static let hsical_offset = UInt32(8) - static let hsical_mask = UInt32(0b11111111) &<< hsical_offset - var hsical: UInt8 { - UInt8((self.rawValue & (RCC.CR.hsical_mask)) >> RCC.CR.hsical_offset) - } - - static let hsitrim_offset = UInt32(3) - static let hsitrim_mask = UInt32(0b11111) &<< hsitrim_offset - var hsitrim: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.hsitrim_mask)) >> RCC.CR.hsitrim_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.hsitrim_mask - let shift = (UInt32(newValue) << RCC.CR.hsitrim_offset) & RCC.CR.hsitrim_mask - self.rawValue = preserve | shift - } - } - - static let hsirdy_offset = UInt32(1) - static let hsirdy_mask = UInt32(0b1) &<< hsirdy_offset - var hsirdy: UInt8 { - UInt8((self.rawValue & (RCC.CR.hsirdy_mask)) >> RCC.CR.hsirdy_offset) - } - - static let hsion_offset = UInt32(0) - static let hsion_mask = UInt32(0b1) &<< hsion_offset - var hsion: UInt8 { - get { UInt8((self.rawValue & (RCC.CR.hsion_mask)) >> RCC.CR.hsion_offset) } - set { - let preserve = self.rawValue & ~RCC.CR.hsion_mask - let shift = (UInt32(newValue) << RCC.CR.hsion_offset) & RCC.CR.hsion_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct PLLCFGR { - var rawValue: UInt32 - - static let pllq3_offset = UInt32(27) - static let pllq3_mask = UInt32(0b1) &<< pllq3_offset - var pllq3: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllq3_mask)) >> RCC.PLLCFGR.pllq3_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllq3_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllq3_offset) & RCC.PLLCFGR.pllq3_mask - self.rawValue = preserve | shift - } - } - - static let pllq2_offset = UInt32(26) - static let pllq2_mask = UInt32(0b1) &<< pllq2_offset - var pllq2: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllq2_mask)) >> RCC.PLLCFGR.pllq2_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllq2_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllq2_offset) & RCC.PLLCFGR.pllq2_mask - self.rawValue = preserve | shift - } - } - - static let pllq1_offset = UInt32(25) - static let pllq1_mask = UInt32(0b1) &<< pllq1_offset - var pllq1: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllq1_mask)) >> RCC.PLLCFGR.pllq1_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllq1_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllq1_offset) & RCC.PLLCFGR.pllq1_mask - self.rawValue = preserve | shift - } - } - - static let pllq0_offset = UInt32(24) - static let pllq0_mask = UInt32(0b1) &<< pllq0_offset - var pllq0: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllq0_mask)) >> RCC.PLLCFGR.pllq0_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllq0_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllq0_offset) & RCC.PLLCFGR.pllq0_mask - self.rawValue = preserve | shift - } - } - - static let pllsrc_offset = UInt32(22) - static let pllsrc_mask = UInt32(0b1) &<< pllsrc_offset - var pllsrc: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllsrc_mask)) >> RCC.PLLCFGR.pllsrc_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllsrc_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllsrc_offset) & RCC.PLLCFGR.pllsrc_mask - self.rawValue = preserve | shift - } - } - - static let pllp1_offset = UInt32(17) - static let pllp1_mask = UInt32(0b1) &<< pllp1_offset - var pllp1: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllp1_mask)) >> RCC.PLLCFGR.pllp1_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllp1_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllp1_offset) & RCC.PLLCFGR.pllp1_mask - self.rawValue = preserve | shift - } - } - - static let pllp0_offset = UInt32(16) - static let pllp0_mask = UInt32(0b1) &<< pllp0_offset - var pllp0: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllp0_mask)) >> RCC.PLLCFGR.pllp0_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllp0_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllp0_offset) & RCC.PLLCFGR.pllp0_mask - self.rawValue = preserve | shift - } - } - - static let plln8_offset = UInt32(14) - static let plln8_mask = UInt32(0b1) &<< plln8_offset - var plln8: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln8_mask)) >> RCC.PLLCFGR.plln8_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln8_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln8_offset) & RCC.PLLCFGR.plln8_mask - self.rawValue = preserve | shift - } - } - - static let plln7_offset = UInt32(13) - static let plln7_mask = UInt32(0b1) &<< plln7_offset - var plln7: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln7_mask)) >> RCC.PLLCFGR.plln7_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln7_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln7_offset) & RCC.PLLCFGR.plln7_mask - self.rawValue = preserve | shift - } - } - - static let plln6_offset = UInt32(12) - static let plln6_mask = UInt32(0b1) &<< plln6_offset - var plln6: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln6_mask)) >> RCC.PLLCFGR.plln6_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln6_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln6_offset) & RCC.PLLCFGR.plln6_mask - self.rawValue = preserve | shift - } - } - - static let plln5_offset = UInt32(11) - static let plln5_mask = UInt32(0b1) &<< plln5_offset - var plln5: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln5_mask)) >> RCC.PLLCFGR.plln5_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln5_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln5_offset) & RCC.PLLCFGR.plln5_mask - self.rawValue = preserve | shift - } - } - - static let plln4_offset = UInt32(10) - static let plln4_mask = UInt32(0b1) &<< plln4_offset - var plln4: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln4_mask)) >> RCC.PLLCFGR.plln4_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln4_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln4_offset) & RCC.PLLCFGR.plln4_mask - self.rawValue = preserve | shift - } - } - - static let plln3_offset = UInt32(9) - static let plln3_mask = UInt32(0b1) &<< plln3_offset - var plln3: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln3_mask)) >> RCC.PLLCFGR.plln3_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln3_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln3_offset) & RCC.PLLCFGR.plln3_mask - self.rawValue = preserve | shift - } - } - - static let plln2_offset = UInt32(8) - static let plln2_mask = UInt32(0b1) &<< plln2_offset - var plln2: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln2_mask)) >> RCC.PLLCFGR.plln2_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln2_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln2_offset) & RCC.PLLCFGR.plln2_mask - self.rawValue = preserve | shift - } - } - - static let plln1_offset = UInt32(7) - static let plln1_mask = UInt32(0b1) &<< plln1_offset - var plln1: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln1_mask)) >> RCC.PLLCFGR.plln1_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln1_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln1_offset) & RCC.PLLCFGR.plln1_mask - self.rawValue = preserve | shift - } - } - - static let plln0_offset = UInt32(6) - static let plln0_mask = UInt32(0b1) &<< plln0_offset - var plln0: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.plln0_mask)) >> RCC.PLLCFGR.plln0_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.plln0_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.plln0_offset) & RCC.PLLCFGR.plln0_mask - self.rawValue = preserve | shift - } - } - - static let pllm5_offset = UInt32(5) - static let pllm5_mask = UInt32(0b1) &<< pllm5_offset - var pllm5: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm5_mask)) >> RCC.PLLCFGR.pllm5_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm5_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm5_offset) & RCC.PLLCFGR.pllm5_mask - self.rawValue = preserve | shift - } - } - - static let pllm4_offset = UInt32(4) - static let pllm4_mask = UInt32(0b1) &<< pllm4_offset - var pllm4: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm4_mask)) >> RCC.PLLCFGR.pllm4_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm4_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm4_offset) & RCC.PLLCFGR.pllm4_mask - self.rawValue = preserve | shift - } - } - - static let pllm3_offset = UInt32(3) - static let pllm3_mask = UInt32(0b1) &<< pllm3_offset - var pllm3: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm3_mask)) >> RCC.PLLCFGR.pllm3_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm3_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm3_offset) & RCC.PLLCFGR.pllm3_mask - self.rawValue = preserve | shift - } - } - - static let pllm2_offset = UInt32(2) - static let pllm2_mask = UInt32(0b1) &<< pllm2_offset - var pllm2: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm2_mask)) >> RCC.PLLCFGR.pllm2_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm2_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm2_offset) & RCC.PLLCFGR.pllm2_mask - self.rawValue = preserve | shift - } - } - - static let pllm1_offset = UInt32(1) - static let pllm1_mask = UInt32(0b1) &<< pllm1_offset - var pllm1: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm1_mask)) >> RCC.PLLCFGR.pllm1_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm1_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm1_offset) & RCC.PLLCFGR.pllm1_mask - self.rawValue = preserve | shift - } - } - - static let pllm0_offset = UInt32(0) - static let pllm0_mask = UInt32(0b1) &<< pllm0_offset - var pllm0: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLCFGR.pllm0_mask)) >> RCC.PLLCFGR.pllm0_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLCFGR.pllm0_mask - let shift = (UInt32(newValue) << RCC.PLLCFGR.pllm0_offset) & RCC.PLLCFGR.pllm0_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct CFGR { - var rawValue: UInt32 - - static let mco2_offset = UInt32(30) - static let mco2_mask = UInt32(0b11) &<< mco2_offset - var mco2: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.mco2_mask)) >> RCC.CFGR.mco2_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.mco2_mask - let shift = (UInt32(newValue) << RCC.CFGR.mco2_offset) & RCC.CFGR.mco2_mask - self.rawValue = preserve | shift - } - } - - static let mco2pre_offset = UInt32(27) - static let mco2pre_mask = UInt32(0b111) &<< mco2pre_offset - var mco2pre: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.mco2pre_mask)) >> RCC.CFGR.mco2pre_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.mco2pre_mask - let shift = (UInt32(newValue) << RCC.CFGR.mco2pre_offset) & RCC.CFGR.mco2pre_mask - self.rawValue = preserve | shift - } - } - - static let mco1pre_offset = UInt32(24) - static let mco1pre_mask = UInt32(0b111) &<< mco1pre_offset - var mco1pre: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.mco1pre_mask)) >> RCC.CFGR.mco1pre_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.mco1pre_mask - let shift = (UInt32(newValue) << RCC.CFGR.mco1pre_offset) & RCC.CFGR.mco1pre_mask - self.rawValue = preserve | shift - } - } - - static let i2ssrc_offset = UInt32(23) - static let i2ssrc_mask = UInt32(0b1) &<< i2ssrc_offset - var i2ssrc: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.i2ssrc_mask)) >> RCC.CFGR.i2ssrc_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.i2ssrc_mask - let shift = (UInt32(newValue) << RCC.CFGR.i2ssrc_offset) & RCC.CFGR.i2ssrc_mask - self.rawValue = preserve | shift - } - } - - static let mco1_offset = UInt32(21) - static let mco1_mask = UInt32(0b11) &<< mco1_offset - var mco1: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.mco1_mask)) >> RCC.CFGR.mco1_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.mco1_mask - let shift = (UInt32(newValue) << RCC.CFGR.mco1_offset) & RCC.CFGR.mco1_mask - self.rawValue = preserve | shift - } - } - - static let rtcpre_offset = UInt32(16) - static let rtcpre_mask = UInt32(0b11111) &<< rtcpre_offset - var rtcpre: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.rtcpre_mask)) >> RCC.CFGR.rtcpre_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.rtcpre_mask - let shift = (UInt32(newValue) << RCC.CFGR.rtcpre_offset) & RCC.CFGR.rtcpre_mask - self.rawValue = preserve | shift - } - } - - static let ppre2_offset = UInt32(13) - static let ppre2_mask = UInt32(0b111) &<< ppre2_offset - var ppre2: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.ppre2_mask)) >> RCC.CFGR.ppre2_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.ppre2_mask - let shift = (UInt32(newValue) << RCC.CFGR.ppre2_offset) & RCC.CFGR.ppre2_mask - self.rawValue = preserve | shift - } - } - - static let ppre1_offset = UInt32(10) - static let ppre1_mask = UInt32(0b111) &<< ppre1_offset - var ppre1: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.ppre1_mask)) >> RCC.CFGR.ppre1_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.ppre1_mask - let shift = (UInt32(newValue) << RCC.CFGR.ppre1_offset) & RCC.CFGR.ppre1_mask - self.rawValue = preserve | shift - } - } - - static let hpre_offset = UInt32(4) - static let hpre_mask = UInt32(0b1111) &<< hpre_offset - var hpre: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.hpre_mask)) >> RCC.CFGR.hpre_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.hpre_mask - let shift = (UInt32(newValue) << RCC.CFGR.hpre_offset) & RCC.CFGR.hpre_mask - self.rawValue = preserve | shift - } - } - - static let sws1_offset = UInt32(3) - static let sws1_mask = UInt32(0b1) &<< sws1_offset - var sws1: UInt8 { - UInt8((self.rawValue & (RCC.CFGR.sws1_mask)) >> RCC.CFGR.sws1_offset) - } - - static let sws0_offset = UInt32(2) - static let sws0_mask = UInt32(0b1) &<< sws0_offset - var sws0: UInt8 { - UInt8((self.rawValue & (RCC.CFGR.sws0_mask)) >> RCC.CFGR.sws0_offset) - } - - static let sw1_offset = UInt32(1) - static let sw1_mask = UInt32(0b1) &<< sw1_offset - var sw1: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.sw1_mask)) >> RCC.CFGR.sw1_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.sw1_mask - let shift = (UInt32(newValue) << RCC.CFGR.sw1_offset) & RCC.CFGR.sw1_mask - self.rawValue = preserve | shift - } - } - - static let sw0_offset = UInt32(0) - static let sw0_mask = UInt32(0b1) &<< sw0_offset - var sw0: UInt8 { - get { UInt8((self.rawValue & (RCC.CFGR.sw0_mask)) >> RCC.CFGR.sw0_offset) } - set { - let preserve = self.rawValue & ~RCC.CFGR.sw0_mask - let shift = (UInt32(newValue) << RCC.CFGR.sw0_offset) & RCC.CFGR.sw0_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct CIR { - var rawValue: UInt32 - - static let cssc_offset = UInt32(23) - static let cssc_mask = UInt32(0b1) &<< cssc_offset - var cssc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.cssc_offset) & RCC.CIR.cssc_mask - } - } - - static let pllsairdyc_offset = UInt32(22) - static let pllsairdyc_mask = UInt32(0b1) &<< pllsairdyc_offset - var pllsairdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.pllsairdyc_offset) & RCC.CIR.pllsairdyc_mask - } - } - - static let plli2srdyc_offset = UInt32(21) - static let plli2srdyc_mask = UInt32(0b1) &<< plli2srdyc_offset - var plli2srdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.plli2srdyc_offset) & RCC.CIR.plli2srdyc_mask - } - } - - static let pllrdyc_offset = UInt32(20) - static let pllrdyc_mask = UInt32(0b1) &<< pllrdyc_offset - var pllrdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.pllrdyc_offset) & RCC.CIR.pllrdyc_mask - } - } - - static let hserdyc_offset = UInt32(19) - static let hserdyc_mask = UInt32(0b1) &<< hserdyc_offset - var hserdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.hserdyc_offset) & RCC.CIR.hserdyc_mask - } - } - - static let hsirdyc_offset = UInt32(18) - static let hsirdyc_mask = UInt32(0b1) &<< hsirdyc_offset - var hsirdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.hsirdyc_offset) & RCC.CIR.hsirdyc_mask - } - } - - static let lserdyc_offset = UInt32(17) - static let lserdyc_mask = UInt32(0b1) &<< lserdyc_offset - var lserdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.lserdyc_offset) & RCC.CIR.lserdyc_mask - } - } - - static let lsirdyc_offset = UInt32(16) - static let lsirdyc_mask = UInt32(0b1) &<< lsirdyc_offset - var lsirdyc: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << RCC.CIR.lsirdyc_offset) & RCC.CIR.lsirdyc_mask - } - } - - static let pllsairdyie_offset = UInt32(14) - static let pllsairdyie_mask = UInt32(0b1) &<< pllsairdyie_offset - var pllsairdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.pllsairdyie_mask)) >> RCC.CIR.pllsairdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.pllsairdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.pllsairdyie_offset) & RCC.CIR.pllsairdyie_mask - self.rawValue = preserve | shift - } - } - - static let plli2srdyie_offset = UInt32(13) - static let plli2srdyie_mask = UInt32(0b1) &<< plli2srdyie_offset - var plli2srdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.plli2srdyie_mask)) >> RCC.CIR.plli2srdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.plli2srdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.plli2srdyie_offset) & RCC.CIR.plli2srdyie_mask - self.rawValue = preserve | shift - } - } - - static let pllrdyie_offset = UInt32(12) - static let pllrdyie_mask = UInt32(0b1) &<< pllrdyie_offset - var pllrdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.pllrdyie_mask)) >> RCC.CIR.pllrdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.pllrdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.pllrdyie_offset) & RCC.CIR.pllrdyie_mask - self.rawValue = preserve | shift - } - } - - static let hserdyie_offset = UInt32(11) - static let hserdyie_mask = UInt32(0b1) &<< hserdyie_offset - var hserdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.hserdyie_mask)) >> RCC.CIR.hserdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.hserdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.hserdyie_offset) & RCC.CIR.hserdyie_mask - self.rawValue = preserve | shift - } - } - - static let hsirdyie_offset = UInt32(10) - static let hsirdyie_mask = UInt32(0b1) &<< hsirdyie_offset - var hsirdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.hsirdyie_mask)) >> RCC.CIR.hsirdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.hsirdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.hsirdyie_offset) & RCC.CIR.hsirdyie_mask - self.rawValue = preserve | shift - } - } - - static let lserdyie_offset = UInt32(9) - static let lserdyie_mask = UInt32(0b1) &<< lserdyie_offset - var lserdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.lserdyie_mask)) >> RCC.CIR.lserdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.lserdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.lserdyie_offset) & RCC.CIR.lserdyie_mask - self.rawValue = preserve | shift - } - } - - static let lsirdyie_offset = UInt32(8) - static let lsirdyie_mask = UInt32(0b1) &<< lsirdyie_offset - var lsirdyie: UInt8 { - get { UInt8((self.rawValue & (RCC.CIR.lsirdyie_mask)) >> RCC.CIR.lsirdyie_offset) } - set { - let preserve = self.rawValue & ~RCC.CIR.lsirdyie_mask - let shift = (UInt32(newValue) << RCC.CIR.lsirdyie_offset) & RCC.CIR.lsirdyie_mask - self.rawValue = preserve | shift - } - } - - static let cssf_offset = UInt32(7) - static let cssf_mask = UInt32(0b1) &<< cssf_offset - var cssf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.cssf_mask)) >> RCC.CIR.cssf_offset) - } - - static let pllsairdyf_offset = UInt32(6) - static let pllsairdyf_mask = UInt32(0b1) &<< pllsairdyf_offset - var pllsairdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.pllsairdyf_mask)) >> RCC.CIR.pllsairdyf_offset) - } - - static let plli2srdyf_offset = UInt32(5) - static let plli2srdyf_mask = UInt32(0b1) &<< plli2srdyf_offset - var plli2srdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.plli2srdyf_mask)) >> RCC.CIR.plli2srdyf_offset) - } - - static let pllrdyf_offset = UInt32(4) - static let pllrdyf_mask = UInt32(0b1) &<< pllrdyf_offset - var pllrdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.pllrdyf_mask)) >> RCC.CIR.pllrdyf_offset) - } - - static let hserdyf_offset = UInt32(3) - static let hserdyf_mask = UInt32(0b1) &<< hserdyf_offset - var hserdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.hserdyf_mask)) >> RCC.CIR.hserdyf_offset) - } - - static let hsirdyf_offset = UInt32(2) - static let hsirdyf_mask = UInt32(0b1) &<< hsirdyf_offset - var hsirdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.hsirdyf_mask)) >> RCC.CIR.hsirdyf_offset) - } - - static let lserdyf_offset = UInt32(1) - static let lserdyf_mask = UInt32(0b1) &<< lserdyf_offset - var lserdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.lserdyf_mask)) >> RCC.CIR.lserdyf_offset) - } - - static let lsirdyf_offset = UInt32(0) - static let lsirdyf_mask = UInt32(0b1) &<< lsirdyf_offset - var lsirdyf: UInt8 { - UInt8((self.rawValue & (RCC.CIR.lsirdyf_mask)) >> RCC.CIR.lsirdyf_offset) - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB1RSTR { - var rawValue: UInt32 - - static let otghsrst_offset = UInt32(29) - static let otghsrst_mask = UInt32(0b1) &<< otghsrst_offset - var otghsrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.otghsrst_mask)) >> RCC.AHB1RSTR.otghsrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.otghsrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.otghsrst_offset) & RCC.AHB1RSTR.otghsrst_mask - self.rawValue = preserve | shift - } - } - - static let ethmacrst_offset = UInt32(25) - static let ethmacrst_mask = UInt32(0b1) &<< ethmacrst_offset - var ethmacrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.ethmacrst_mask)) >> RCC.AHB1RSTR.ethmacrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.ethmacrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.ethmacrst_offset) & RCC.AHB1RSTR.ethmacrst_mask - self.rawValue = preserve | shift - } - } - - static let dma2drst_offset = UInt32(23) - static let dma2drst_mask = UInt32(0b1) &<< dma2drst_offset - var dma2drst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.dma2drst_mask)) >> RCC.AHB1RSTR.dma2drst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.dma2drst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.dma2drst_offset) & RCC.AHB1RSTR.dma2drst_mask - self.rawValue = preserve | shift - } - } - - static let dma2rst_offset = UInt32(22) - static let dma2rst_mask = UInt32(0b1) &<< dma2rst_offset - var dma2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.dma2rst_mask)) >> RCC.AHB1RSTR.dma2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.dma2rst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.dma2rst_offset) & RCC.AHB1RSTR.dma2rst_mask - self.rawValue = preserve | shift - } - } - - static let dma1rst_offset = UInt32(21) - static let dma1rst_mask = UInt32(0b1) &<< dma1rst_offset - var dma1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.dma1rst_mask)) >> RCC.AHB1RSTR.dma1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.dma1rst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.dma1rst_offset) & RCC.AHB1RSTR.dma1rst_mask - self.rawValue = preserve | shift - } - } - - static let crcrst_offset = UInt32(12) - static let crcrst_mask = UInt32(0b1) &<< crcrst_offset - var crcrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.crcrst_mask)) >> RCC.AHB1RSTR.crcrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.crcrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.crcrst_offset) & RCC.AHB1RSTR.crcrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiokrst_offset = UInt32(10) - static let gpiokrst_mask = UInt32(0b1) &<< gpiokrst_offset - var gpiokrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiokrst_mask)) >> RCC.AHB1RSTR.gpiokrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiokrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiokrst_offset) & RCC.AHB1RSTR.gpiokrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiojrst_offset = UInt32(9) - static let gpiojrst_mask = UInt32(0b1) &<< gpiojrst_offset - var gpiojrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiojrst_mask)) >> RCC.AHB1RSTR.gpiojrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiojrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiojrst_offset) & RCC.AHB1RSTR.gpiojrst_mask - self.rawValue = preserve | shift - } - } - - static let gpioirst_offset = UInt32(8) - static let gpioirst_mask = UInt32(0b1) &<< gpioirst_offset - var gpioirst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpioirst_mask)) >> RCC.AHB1RSTR.gpioirst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpioirst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpioirst_offset) & RCC.AHB1RSTR.gpioirst_mask - self.rawValue = preserve | shift - } - } - - static let gpiohrst_offset = UInt32(7) - static let gpiohrst_mask = UInt32(0b1) &<< gpiohrst_offset - var gpiohrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiohrst_mask)) >> RCC.AHB1RSTR.gpiohrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiohrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiohrst_offset) & RCC.AHB1RSTR.gpiohrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiogrst_offset = UInt32(6) - static let gpiogrst_mask = UInt32(0b1) &<< gpiogrst_offset - var gpiogrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiogrst_mask)) >> RCC.AHB1RSTR.gpiogrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiogrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiogrst_offset) & RCC.AHB1RSTR.gpiogrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiofrst_offset = UInt32(5) - static let gpiofrst_mask = UInt32(0b1) &<< gpiofrst_offset - var gpiofrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiofrst_mask)) >> RCC.AHB1RSTR.gpiofrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiofrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiofrst_offset) & RCC.AHB1RSTR.gpiofrst_mask - self.rawValue = preserve | shift - } - } - - static let gpioerst_offset = UInt32(4) - static let gpioerst_mask = UInt32(0b1) &<< gpioerst_offset - var gpioerst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpioerst_mask)) >> RCC.AHB1RSTR.gpioerst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpioerst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpioerst_offset) & RCC.AHB1RSTR.gpioerst_mask - self.rawValue = preserve | shift - } - } - - static let gpiodrst_offset = UInt32(3) - static let gpiodrst_mask = UInt32(0b1) &<< gpiodrst_offset - var gpiodrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiodrst_mask)) >> RCC.AHB1RSTR.gpiodrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiodrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiodrst_offset) & RCC.AHB1RSTR.gpiodrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiocrst_offset = UInt32(2) - static let gpiocrst_mask = UInt32(0b1) &<< gpiocrst_offset - var gpiocrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiocrst_mask)) >> RCC.AHB1RSTR.gpiocrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiocrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiocrst_offset) & RCC.AHB1RSTR.gpiocrst_mask - self.rawValue = preserve | shift - } - } - - static let gpiobrst_offset = UInt32(1) - static let gpiobrst_mask = UInt32(0b1) &<< gpiobrst_offset - var gpiobrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpiobrst_mask)) >> RCC.AHB1RSTR.gpiobrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpiobrst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpiobrst_offset) & RCC.AHB1RSTR.gpiobrst_mask - self.rawValue = preserve | shift - } - } - - static let gpioarst_offset = UInt32(0) - static let gpioarst_mask = UInt32(0b1) &<< gpioarst_offset - var gpioarst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1RSTR.gpioarst_mask)) >> RCC.AHB1RSTR.gpioarst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1RSTR.gpioarst_mask - let shift = (UInt32(newValue) << RCC.AHB1RSTR.gpioarst_offset) & RCC.AHB1RSTR.gpioarst_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB2RSTR { - var rawValue: UInt32 - - static let otgfsrst_offset = UInt32(7) - static let otgfsrst_mask = UInt32(0b1) &<< otgfsrst_offset - var otgfsrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2RSTR.otgfsrst_mask)) >> RCC.AHB2RSTR.otgfsrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2RSTR.otgfsrst_mask - let shift = (UInt32(newValue) << RCC.AHB2RSTR.otgfsrst_offset) & RCC.AHB2RSTR.otgfsrst_mask - self.rawValue = preserve | shift - } - } - - static let rngrst_offset = UInt32(6) - static let rngrst_mask = UInt32(0b1) &<< rngrst_offset - var rngrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2RSTR.rngrst_mask)) >> RCC.AHB2RSTR.rngrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2RSTR.rngrst_mask - let shift = (UInt32(newValue) << RCC.AHB2RSTR.rngrst_offset) & RCC.AHB2RSTR.rngrst_mask - self.rawValue = preserve | shift - } - } - - static let hsahrst_offset = UInt32(5) - static let hsahrst_mask = UInt32(0b1) &<< hsahrst_offset - var hsahrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2RSTR.hsahrst_mask)) >> RCC.AHB2RSTR.hsahrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2RSTR.hsahrst_mask - let shift = (UInt32(newValue) << RCC.AHB2RSTR.hsahrst_offset) & RCC.AHB2RSTR.hsahrst_mask - self.rawValue = preserve | shift - } - } - - static let cryprst_offset = UInt32(4) - static let cryprst_mask = UInt32(0b1) &<< cryprst_offset - var cryprst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2RSTR.cryprst_mask)) >> RCC.AHB2RSTR.cryprst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2RSTR.cryprst_mask - let shift = (UInt32(newValue) << RCC.AHB2RSTR.cryprst_offset) & RCC.AHB2RSTR.cryprst_mask - self.rawValue = preserve | shift - } - } - - static let dcmirst_offset = UInt32(0) - static let dcmirst_mask = UInt32(0b1) &<< dcmirst_offset - var dcmirst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2RSTR.dcmirst_mask)) >> RCC.AHB2RSTR.dcmirst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2RSTR.dcmirst_mask - let shift = (UInt32(newValue) << RCC.AHB2RSTR.dcmirst_offset) & RCC.AHB2RSTR.dcmirst_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB3RSTR { - var rawValue: UInt32 - - static let fmcrst_offset = UInt32(0) - static let fmcrst_mask = UInt32(0b1) &<< fmcrst_offset - var fmcrst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3RSTR.fmcrst_mask)) >> RCC.AHB3RSTR.fmcrst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3RSTR.fmcrst_mask - let shift = (UInt32(newValue) << RCC.AHB3RSTR.fmcrst_offset) & RCC.AHB3RSTR.fmcrst_mask - self.rawValue = preserve | shift - } - } - - static let qspirst_offset = UInt32(1) - static let qspirst_mask = UInt32(0b1) &<< qspirst_offset - var qspirst: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3RSTR.qspirst_mask)) >> RCC.AHB3RSTR.qspirst_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3RSTR.qspirst_mask - let shift = (UInt32(newValue) << RCC.AHB3RSTR.qspirst_offset) & RCC.AHB3RSTR.qspirst_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB1RSTR { - var rawValue: UInt32 - - static let tim2rst_offset = UInt32(0) - static let tim2rst_mask = UInt32(0b1) &<< tim2rst_offset - var tim2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim2rst_mask)) >> RCC.APB1RSTR.tim2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim2rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim2rst_offset) & RCC.APB1RSTR.tim2rst_mask - self.rawValue = preserve | shift - } - } - - static let tim3rst_offset = UInt32(1) - static let tim3rst_mask = UInt32(0b1) &<< tim3rst_offset - var tim3rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim3rst_mask)) >> RCC.APB1RSTR.tim3rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim3rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim3rst_offset) & RCC.APB1RSTR.tim3rst_mask - self.rawValue = preserve | shift - } - } - - static let tim4rst_offset = UInt32(2) - static let tim4rst_mask = UInt32(0b1) &<< tim4rst_offset - var tim4rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim4rst_mask)) >> RCC.APB1RSTR.tim4rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim4rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim4rst_offset) & RCC.APB1RSTR.tim4rst_mask - self.rawValue = preserve | shift - } - } - - static let tim5rst_offset = UInt32(3) - static let tim5rst_mask = UInt32(0b1) &<< tim5rst_offset - var tim5rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim5rst_mask)) >> RCC.APB1RSTR.tim5rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim5rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim5rst_offset) & RCC.APB1RSTR.tim5rst_mask - self.rawValue = preserve | shift - } - } - - static let tim6rst_offset = UInt32(4) - static let tim6rst_mask = UInt32(0b1) &<< tim6rst_offset - var tim6rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim6rst_mask)) >> RCC.APB1RSTR.tim6rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim6rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim6rst_offset) & RCC.APB1RSTR.tim6rst_mask - self.rawValue = preserve | shift - } - } - - static let tim7rst_offset = UInt32(5) - static let tim7rst_mask = UInt32(0b1) &<< tim7rst_offset - var tim7rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim7rst_mask)) >> RCC.APB1RSTR.tim7rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim7rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim7rst_offset) & RCC.APB1RSTR.tim7rst_mask - self.rawValue = preserve | shift - } - } - - static let tim12rst_offset = UInt32(6) - static let tim12rst_mask = UInt32(0b1) &<< tim12rst_offset - var tim12rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim12rst_mask)) >> RCC.APB1RSTR.tim12rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim12rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim12rst_offset) & RCC.APB1RSTR.tim12rst_mask - self.rawValue = preserve | shift - } - } - - static let tim13rst_offset = UInt32(7) - static let tim13rst_mask = UInt32(0b1) &<< tim13rst_offset - var tim13rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim13rst_mask)) >> RCC.APB1RSTR.tim13rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim13rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim13rst_offset) & RCC.APB1RSTR.tim13rst_mask - self.rawValue = preserve | shift - } - } - - static let tim14rst_offset = UInt32(8) - static let tim14rst_mask = UInt32(0b1) &<< tim14rst_offset - var tim14rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.tim14rst_mask)) >> RCC.APB1RSTR.tim14rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.tim14rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.tim14rst_offset) & RCC.APB1RSTR.tim14rst_mask - self.rawValue = preserve | shift - } - } - - static let wwdgrst_offset = UInt32(11) - static let wwdgrst_mask = UInt32(0b1) &<< wwdgrst_offset - var wwdgrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.wwdgrst_mask)) >> RCC.APB1RSTR.wwdgrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.wwdgrst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.wwdgrst_offset) & RCC.APB1RSTR.wwdgrst_mask - self.rawValue = preserve | shift - } - } - - static let spi2rst_offset = UInt32(14) - static let spi2rst_mask = UInt32(0b1) &<< spi2rst_offset - var spi2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.spi2rst_mask)) >> RCC.APB1RSTR.spi2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.spi2rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.spi2rst_offset) & RCC.APB1RSTR.spi2rst_mask - self.rawValue = preserve | shift - } - } - - static let spi3rst_offset = UInt32(15) - static let spi3rst_mask = UInt32(0b1) &<< spi3rst_offset - var spi3rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.spi3rst_mask)) >> RCC.APB1RSTR.spi3rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.spi3rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.spi3rst_offset) & RCC.APB1RSTR.spi3rst_mask - self.rawValue = preserve | shift - } - } - - static let uart2rst_offset = UInt32(17) - static let uart2rst_mask = UInt32(0b1) &<< uart2rst_offset - var uart2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart2rst_mask)) >> RCC.APB1RSTR.uart2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart2rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart2rst_offset) & RCC.APB1RSTR.uart2rst_mask - self.rawValue = preserve | shift - } - } - - static let uart3rst_offset = UInt32(18) - static let uart3rst_mask = UInt32(0b1) &<< uart3rst_offset - var uart3rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart3rst_mask)) >> RCC.APB1RSTR.uart3rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart3rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart3rst_offset) & RCC.APB1RSTR.uart3rst_mask - self.rawValue = preserve | shift - } - } - - static let uart4rst_offset = UInt32(19) - static let uart4rst_mask = UInt32(0b1) &<< uart4rst_offset - var uart4rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart4rst_mask)) >> RCC.APB1RSTR.uart4rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart4rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart4rst_offset) & RCC.APB1RSTR.uart4rst_mask - self.rawValue = preserve | shift - } - } - - static let uart5rst_offset = UInt32(20) - static let uart5rst_mask = UInt32(0b1) &<< uart5rst_offset - var uart5rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart5rst_mask)) >> RCC.APB1RSTR.uart5rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart5rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart5rst_offset) & RCC.APB1RSTR.uart5rst_mask - self.rawValue = preserve | shift - } - } - - static let i2c1rst_offset = UInt32(21) - static let i2c1rst_mask = UInt32(0b1) &<< i2c1rst_offset - var i2c1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.i2c1rst_mask)) >> RCC.APB1RSTR.i2c1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.i2c1rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.i2c1rst_offset) & RCC.APB1RSTR.i2c1rst_mask - self.rawValue = preserve | shift - } - } - - static let i2c2rst_offset = UInt32(22) - static let i2c2rst_mask = UInt32(0b1) &<< i2c2rst_offset - var i2c2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.i2c2rst_mask)) >> RCC.APB1RSTR.i2c2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.i2c2rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.i2c2rst_offset) & RCC.APB1RSTR.i2c2rst_mask - self.rawValue = preserve | shift - } - } - - static let i2c3rst_offset = UInt32(23) - static let i2c3rst_mask = UInt32(0b1) &<< i2c3rst_offset - var i2c3rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.i2c3rst_mask)) >> RCC.APB1RSTR.i2c3rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.i2c3rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.i2c3rst_offset) & RCC.APB1RSTR.i2c3rst_mask - self.rawValue = preserve | shift - } - } - - static let can1rst_offset = UInt32(25) - static let can1rst_mask = UInt32(0b1) &<< can1rst_offset - var can1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.can1rst_mask)) >> RCC.APB1RSTR.can1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.can1rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.can1rst_offset) & RCC.APB1RSTR.can1rst_mask - self.rawValue = preserve | shift - } - } - - static let can2rst_offset = UInt32(26) - static let can2rst_mask = UInt32(0b1) &<< can2rst_offset - var can2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.can2rst_mask)) >> RCC.APB1RSTR.can2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.can2rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.can2rst_offset) & RCC.APB1RSTR.can2rst_mask - self.rawValue = preserve | shift - } - } - - static let pwrrst_offset = UInt32(28) - static let pwrrst_mask = UInt32(0b1) &<< pwrrst_offset - var pwrrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.pwrrst_mask)) >> RCC.APB1RSTR.pwrrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.pwrrst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.pwrrst_offset) & RCC.APB1RSTR.pwrrst_mask - self.rawValue = preserve | shift - } - } - - static let dacrst_offset = UInt32(29) - static let dacrst_mask = UInt32(0b1) &<< dacrst_offset - var dacrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.dacrst_mask)) >> RCC.APB1RSTR.dacrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.dacrst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.dacrst_offset) & RCC.APB1RSTR.dacrst_mask - self.rawValue = preserve | shift - } - } - - static let uart7rst_offset = UInt32(30) - static let uart7rst_mask = UInt32(0b1) &<< uart7rst_offset - var uart7rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart7rst_mask)) >> RCC.APB1RSTR.uart7rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart7rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart7rst_offset) & RCC.APB1RSTR.uart7rst_mask - self.rawValue = preserve | shift - } - } - - static let uart8rst_offset = UInt32(31) - static let uart8rst_mask = UInt32(0b1) &<< uart8rst_offset - var uart8rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.uart8rst_mask)) >> RCC.APB1RSTR.uart8rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.uart8rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.uart8rst_offset) & RCC.APB1RSTR.uart8rst_mask - self.rawValue = preserve | shift - } - } - - static let spdifrxrst_offset = UInt32(16) - static let spdifrxrst_mask = UInt32(0b1) &<< spdifrxrst_offset - var spdifrxrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.spdifrxrst_mask)) >> RCC.APB1RSTR.spdifrxrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.spdifrxrst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.spdifrxrst_offset) & RCC.APB1RSTR.spdifrxrst_mask - self.rawValue = preserve | shift - } - } - - static let cecrst_offset = UInt32(27) - static let cecrst_mask = UInt32(0b1) &<< cecrst_offset - var cecrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.cecrst_mask)) >> RCC.APB1RSTR.cecrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.cecrst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.cecrst_offset) & RCC.APB1RSTR.cecrst_mask - self.rawValue = preserve | shift - } - } - - static let lptim1rst_offset = UInt32(9) - static let lptim1rst_mask = UInt32(0b1) &<< lptim1rst_offset - var lptim1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.lptim1rst_mask)) >> RCC.APB1RSTR.lptim1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.lptim1rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.lptim1rst_offset) & RCC.APB1RSTR.lptim1rst_mask - self.rawValue = preserve | shift - } - } - - static let i2c4rst_offset = UInt32(24) - static let i2c4rst_mask = UInt32(0b1) &<< i2c4rst_offset - var i2c4rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1RSTR.i2c4rst_mask)) >> RCC.APB1RSTR.i2c4rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1RSTR.i2c4rst_mask - let shift = (UInt32(newValue) << RCC.APB1RSTR.i2c4rst_offset) & RCC.APB1RSTR.i2c4rst_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB2RSTR { - var rawValue: UInt32 - - static let tim1rst_offset = UInt32(0) - static let tim1rst_mask = UInt32(0b1) &<< tim1rst_offset - var tim1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.tim1rst_mask)) >> RCC.APB2RSTR.tim1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.tim1rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.tim1rst_offset) & RCC.APB2RSTR.tim1rst_mask - self.rawValue = preserve | shift - } - } - - static let tim8rst_offset = UInt32(1) - static let tim8rst_mask = UInt32(0b1) &<< tim8rst_offset - var tim8rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.tim8rst_mask)) >> RCC.APB2RSTR.tim8rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.tim8rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.tim8rst_offset) & RCC.APB2RSTR.tim8rst_mask - self.rawValue = preserve | shift - } - } - - static let usart1rst_offset = UInt32(4) - static let usart1rst_mask = UInt32(0b1) &<< usart1rst_offset - var usart1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.usart1rst_mask)) >> RCC.APB2RSTR.usart1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.usart1rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.usart1rst_offset) & RCC.APB2RSTR.usart1rst_mask - self.rawValue = preserve | shift - } - } - - static let usart6rst_offset = UInt32(5) - static let usart6rst_mask = UInt32(0b1) &<< usart6rst_offset - var usart6rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.usart6rst_mask)) >> RCC.APB2RSTR.usart6rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.usart6rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.usart6rst_offset) & RCC.APB2RSTR.usart6rst_mask - self.rawValue = preserve | shift - } - } - - static let adcrst_offset = UInt32(8) - static let adcrst_mask = UInt32(0b1) &<< adcrst_offset - var adcrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.adcrst_mask)) >> RCC.APB2RSTR.adcrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.adcrst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.adcrst_offset) & RCC.APB2RSTR.adcrst_mask - self.rawValue = preserve | shift - } - } - - static let spi1rst_offset = UInt32(12) - static let spi1rst_mask = UInt32(0b1) &<< spi1rst_offset - var spi1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.spi1rst_mask)) >> RCC.APB2RSTR.spi1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.spi1rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.spi1rst_offset) & RCC.APB2RSTR.spi1rst_mask - self.rawValue = preserve | shift - } - } - - static let spi4rst_offset = UInt32(13) - static let spi4rst_mask = UInt32(0b1) &<< spi4rst_offset - var spi4rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.spi4rst_mask)) >> RCC.APB2RSTR.spi4rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.spi4rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.spi4rst_offset) & RCC.APB2RSTR.spi4rst_mask - self.rawValue = preserve | shift - } - } - - static let syscfgrst_offset = UInt32(14) - static let syscfgrst_mask = UInt32(0b1) &<< syscfgrst_offset - var syscfgrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.syscfgrst_mask)) >> RCC.APB2RSTR.syscfgrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.syscfgrst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.syscfgrst_offset) & RCC.APB2RSTR.syscfgrst_mask - self.rawValue = preserve | shift - } - } - - static let tim9rst_offset = UInt32(16) - static let tim9rst_mask = UInt32(0b1) &<< tim9rst_offset - var tim9rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.tim9rst_mask)) >> RCC.APB2RSTR.tim9rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.tim9rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.tim9rst_offset) & RCC.APB2RSTR.tim9rst_mask - self.rawValue = preserve | shift - } - } - - static let tim10rst_offset = UInt32(17) - static let tim10rst_mask = UInt32(0b1) &<< tim10rst_offset - var tim10rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.tim10rst_mask)) >> RCC.APB2RSTR.tim10rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.tim10rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.tim10rst_offset) & RCC.APB2RSTR.tim10rst_mask - self.rawValue = preserve | shift - } - } - - static let tim11rst_offset = UInt32(18) - static let tim11rst_mask = UInt32(0b1) &<< tim11rst_offset - var tim11rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.tim11rst_mask)) >> RCC.APB2RSTR.tim11rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.tim11rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.tim11rst_offset) & RCC.APB2RSTR.tim11rst_mask - self.rawValue = preserve | shift - } - } - - static let spi5rst_offset = UInt32(20) - static let spi5rst_mask = UInt32(0b1) &<< spi5rst_offset - var spi5rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.spi5rst_mask)) >> RCC.APB2RSTR.spi5rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.spi5rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.spi5rst_offset) & RCC.APB2RSTR.spi5rst_mask - self.rawValue = preserve | shift - } - } - - static let spi6rst_offset = UInt32(21) - static let spi6rst_mask = UInt32(0b1) &<< spi6rst_offset - var spi6rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.spi6rst_mask)) >> RCC.APB2RSTR.spi6rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.spi6rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.spi6rst_offset) & RCC.APB2RSTR.spi6rst_mask - self.rawValue = preserve | shift - } - } - - static let sai1rst_offset = UInt32(22) - static let sai1rst_mask = UInt32(0b1) &<< sai1rst_offset - var sai1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.sai1rst_mask)) >> RCC.APB2RSTR.sai1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.sai1rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.sai1rst_offset) & RCC.APB2RSTR.sai1rst_mask - self.rawValue = preserve | shift - } - } - - static let ltdcrst_offset = UInt32(26) - static let ltdcrst_mask = UInt32(0b1) &<< ltdcrst_offset - var ltdcrst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.ltdcrst_mask)) >> RCC.APB2RSTR.ltdcrst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.ltdcrst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.ltdcrst_offset) & RCC.APB2RSTR.ltdcrst_mask - self.rawValue = preserve | shift - } - } - - static let sai2rst_offset = UInt32(23) - static let sai2rst_mask = UInt32(0b1) &<< sai2rst_offset - var sai2rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.sai2rst_mask)) >> RCC.APB2RSTR.sai2rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.sai2rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.sai2rst_offset) & RCC.APB2RSTR.sai2rst_mask - self.rawValue = preserve | shift - } - } - - static let sdmmc1rst_offset = UInt32(11) - static let sdmmc1rst_mask = UInt32(0b1) &<< sdmmc1rst_offset - var sdmmc1rst: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2RSTR.sdmmc1rst_mask)) >> RCC.APB2RSTR.sdmmc1rst_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2RSTR.sdmmc1rst_mask - let shift = (UInt32(newValue) << RCC.APB2RSTR.sdmmc1rst_offset) & RCC.APB2RSTR.sdmmc1rst_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB1ENR { - var rawValue: UInt32 - - static let otghsulpien_offset = UInt32(30) - static let otghsulpien_mask = UInt32(0b1) &<< otghsulpien_offset - var otghsulpien: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.otghsulpien_mask)) >> RCC.AHB1ENR.otghsulpien_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.otghsulpien_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.otghsulpien_offset) & RCC.AHB1ENR.otghsulpien_mask - self.rawValue = preserve | shift - } - } - - static let otghsen_offset = UInt32(29) - static let otghsen_mask = UInt32(0b1) &<< otghsen_offset - var otghsen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.otghsen_mask)) >> RCC.AHB1ENR.otghsen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.otghsen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.otghsen_offset) & RCC.AHB1ENR.otghsen_mask - self.rawValue = preserve | shift - } - } - - static let ethmacptpen_offset = UInt32(28) - static let ethmacptpen_mask = UInt32(0b1) &<< ethmacptpen_offset - var ethmacptpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.ethmacptpen_mask)) >> RCC.AHB1ENR.ethmacptpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.ethmacptpen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.ethmacptpen_offset) & RCC.AHB1ENR.ethmacptpen_mask - self.rawValue = preserve | shift - } - } - - static let ethmacrxen_offset = UInt32(27) - static let ethmacrxen_mask = UInt32(0b1) &<< ethmacrxen_offset - var ethmacrxen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.ethmacrxen_mask)) >> RCC.AHB1ENR.ethmacrxen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.ethmacrxen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.ethmacrxen_offset) & RCC.AHB1ENR.ethmacrxen_mask - self.rawValue = preserve | shift - } - } - - static let ethmactxen_offset = UInt32(26) - static let ethmactxen_mask = UInt32(0b1) &<< ethmactxen_offset - var ethmactxen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.ethmactxen_mask)) >> RCC.AHB1ENR.ethmactxen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.ethmactxen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.ethmactxen_offset) & RCC.AHB1ENR.ethmactxen_mask - self.rawValue = preserve | shift - } - } - - static let ethmacen_offset = UInt32(25) - static let ethmacen_mask = UInt32(0b1) &<< ethmacen_offset - var ethmacen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.ethmacen_mask)) >> RCC.AHB1ENR.ethmacen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.ethmacen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.ethmacen_offset) & RCC.AHB1ENR.ethmacen_mask - self.rawValue = preserve | shift - } - } - - static let dma2den_offset = UInt32(23) - static let dma2den_mask = UInt32(0b1) &<< dma2den_offset - var dma2den: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.dma2den_mask)) >> RCC.AHB1ENR.dma2den_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.dma2den_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.dma2den_offset) & RCC.AHB1ENR.dma2den_mask - self.rawValue = preserve | shift - } - } - - static let dma2en_offset = UInt32(22) - static let dma2en_mask = UInt32(0b1) &<< dma2en_offset - var dma2en: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.dma2en_mask)) >> RCC.AHB1ENR.dma2en_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.dma2en_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.dma2en_offset) & RCC.AHB1ENR.dma2en_mask - self.rawValue = preserve | shift - } - } - - static let dma1en_offset = UInt32(21) - static let dma1en_mask = UInt32(0b1) &<< dma1en_offset - var dma1en: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.dma1en_mask)) >> RCC.AHB1ENR.dma1en_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.dma1en_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.dma1en_offset) & RCC.AHB1ENR.dma1en_mask - self.rawValue = preserve | shift - } - } - - static let ccmdataramen_offset = UInt32(20) - static let ccmdataramen_mask = UInt32(0b1) &<< ccmdataramen_offset - var ccmdataramen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.ccmdataramen_mask)) >> RCC.AHB1ENR.ccmdataramen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.ccmdataramen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.ccmdataramen_offset) & RCC.AHB1ENR.ccmdataramen_mask - self.rawValue = preserve | shift - } - } - - static let bkpsramen_offset = UInt32(18) - static let bkpsramen_mask = UInt32(0b1) &<< bkpsramen_offset - var bkpsramen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.bkpsramen_mask)) >> RCC.AHB1ENR.bkpsramen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.bkpsramen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.bkpsramen_offset) & RCC.AHB1ENR.bkpsramen_mask - self.rawValue = preserve | shift - } - } - - static let crcen_offset = UInt32(12) - static let crcen_mask = UInt32(0b1) &<< crcen_offset - var crcen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.crcen_mask)) >> RCC.AHB1ENR.crcen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.crcen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.crcen_offset) & RCC.AHB1ENR.crcen_mask - self.rawValue = preserve | shift - } - } - - static let gpioken_offset = UInt32(10) - static let gpioken_mask = UInt32(0b1) &<< gpioken_offset - var gpioken: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioken_mask)) >> RCC.AHB1ENR.gpioken_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioken_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioken_offset) & RCC.AHB1ENR.gpioken_mask - self.rawValue = preserve | shift - } - } - - static let gpiojen_offset = UInt32(9) - static let gpiojen_mask = UInt32(0b1) &<< gpiojen_offset - var gpiojen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpiojen_mask)) >> RCC.AHB1ENR.gpiojen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpiojen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpiojen_offset) & RCC.AHB1ENR.gpiojen_mask - self.rawValue = preserve | shift - } - } - - static let gpioien_offset = UInt32(8) - static let gpioien_mask = UInt32(0b1) &<< gpioien_offset - var gpioien: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioien_mask)) >> RCC.AHB1ENR.gpioien_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioien_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioien_offset) & RCC.AHB1ENR.gpioien_mask - self.rawValue = preserve | shift - } - } - - static let gpiohen_offset = UInt32(7) - static let gpiohen_mask = UInt32(0b1) &<< gpiohen_offset - var gpiohen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpiohen_mask)) >> RCC.AHB1ENR.gpiohen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpiohen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpiohen_offset) & RCC.AHB1ENR.gpiohen_mask - self.rawValue = preserve | shift - } - } - - static let gpiogen_offset = UInt32(6) - static let gpiogen_mask = UInt32(0b1) &<< gpiogen_offset - var gpiogen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpiogen_mask)) >> RCC.AHB1ENR.gpiogen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpiogen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpiogen_offset) & RCC.AHB1ENR.gpiogen_mask - self.rawValue = preserve | shift - } - } - - static let gpiofen_offset = UInt32(5) - static let gpiofen_mask = UInt32(0b1) &<< gpiofen_offset - var gpiofen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpiofen_mask)) >> RCC.AHB1ENR.gpiofen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpiofen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpiofen_offset) & RCC.AHB1ENR.gpiofen_mask - self.rawValue = preserve | shift - } - } - - static let gpioeen_offset = UInt32(4) - static let gpioeen_mask = UInt32(0b1) &<< gpioeen_offset - var gpioeen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioeen_mask)) >> RCC.AHB1ENR.gpioeen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioeen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioeen_offset) & RCC.AHB1ENR.gpioeen_mask - self.rawValue = preserve | shift - } - } - - static let gpioden_offset = UInt32(3) - static let gpioden_mask = UInt32(0b1) &<< gpioden_offset - var gpioden: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioden_mask)) >> RCC.AHB1ENR.gpioden_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioden_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioden_offset) & RCC.AHB1ENR.gpioden_mask - self.rawValue = preserve | shift - } - } - - static let gpiocen_offset = UInt32(2) - static let gpiocen_mask = UInt32(0b1) &<< gpiocen_offset - var gpiocen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpiocen_mask)) >> RCC.AHB1ENR.gpiocen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpiocen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpiocen_offset) & RCC.AHB1ENR.gpiocen_mask - self.rawValue = preserve | shift - } - } - - static let gpioben_offset = UInt32(1) - static let gpioben_mask = UInt32(0b1) &<< gpioben_offset - var gpioben: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioben_mask)) >> RCC.AHB1ENR.gpioben_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioben_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioben_offset) & RCC.AHB1ENR.gpioben_mask - self.rawValue = preserve | shift - } - } - - static let gpioaen_offset = UInt32(0) - static let gpioaen_mask = UInt32(0b1) &<< gpioaen_offset - var gpioaen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1ENR.gpioaen_mask)) >> RCC.AHB1ENR.gpioaen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1ENR.gpioaen_mask - let shift = (UInt32(newValue) << RCC.AHB1ENR.gpioaen_offset) & RCC.AHB1ENR.gpioaen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB2ENR { - var rawValue: UInt32 - - static let otgfsen_offset = UInt32(7) - static let otgfsen_mask = UInt32(0b1) &<< otgfsen_offset - var otgfsen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2ENR.otgfsen_mask)) >> RCC.AHB2ENR.otgfsen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2ENR.otgfsen_mask - let shift = (UInt32(newValue) << RCC.AHB2ENR.otgfsen_offset) & RCC.AHB2ENR.otgfsen_mask - self.rawValue = preserve | shift - } - } - - static let rngen_offset = UInt32(6) - static let rngen_mask = UInt32(0b1) &<< rngen_offset - var rngen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2ENR.rngen_mask)) >> RCC.AHB2ENR.rngen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2ENR.rngen_mask - let shift = (UInt32(newValue) << RCC.AHB2ENR.rngen_offset) & RCC.AHB2ENR.rngen_mask - self.rawValue = preserve | shift - } - } - - static let hashen_offset = UInt32(5) - static let hashen_mask = UInt32(0b1) &<< hashen_offset - var hashen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2ENR.hashen_mask)) >> RCC.AHB2ENR.hashen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2ENR.hashen_mask - let shift = (UInt32(newValue) << RCC.AHB2ENR.hashen_offset) & RCC.AHB2ENR.hashen_mask - self.rawValue = preserve | shift - } - } - - static let crypen_offset = UInt32(4) - static let crypen_mask = UInt32(0b1) &<< crypen_offset - var crypen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2ENR.crypen_mask)) >> RCC.AHB2ENR.crypen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2ENR.crypen_mask - let shift = (UInt32(newValue) << RCC.AHB2ENR.crypen_offset) & RCC.AHB2ENR.crypen_mask - self.rawValue = preserve | shift - } - } - - static let dcmien_offset = UInt32(0) - static let dcmien_mask = UInt32(0b1) &<< dcmien_offset - var dcmien: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2ENR.dcmien_mask)) >> RCC.AHB2ENR.dcmien_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2ENR.dcmien_mask - let shift = (UInt32(newValue) << RCC.AHB2ENR.dcmien_offset) & RCC.AHB2ENR.dcmien_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB3ENR { - var rawValue: UInt32 - - static let fmcen_offset = UInt32(0) - static let fmcen_mask = UInt32(0b1) &<< fmcen_offset - var fmcen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3ENR.fmcen_mask)) >> RCC.AHB3ENR.fmcen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3ENR.fmcen_mask - let shift = (UInt32(newValue) << RCC.AHB3ENR.fmcen_offset) & RCC.AHB3ENR.fmcen_mask - self.rawValue = preserve | shift - } - } - - static let qspien_offset = UInt32(1) - static let qspien_mask = UInt32(0b1) &<< qspien_offset - var qspien: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3ENR.qspien_mask)) >> RCC.AHB3ENR.qspien_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3ENR.qspien_mask - let shift = (UInt32(newValue) << RCC.AHB3ENR.qspien_offset) & RCC.AHB3ENR.qspien_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB1ENR { - var rawValue: UInt32 - - static let tim2en_offset = UInt32(0) - static let tim2en_mask = UInt32(0b1) &<< tim2en_offset - var tim2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim2en_mask)) >> RCC.APB1ENR.tim2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim2en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim2en_offset) & RCC.APB1ENR.tim2en_mask - self.rawValue = preserve | shift - } - } - - static let tim3en_offset = UInt32(1) - static let tim3en_mask = UInt32(0b1) &<< tim3en_offset - var tim3en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim3en_mask)) >> RCC.APB1ENR.tim3en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim3en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim3en_offset) & RCC.APB1ENR.tim3en_mask - self.rawValue = preserve | shift - } - } - - static let tim4en_offset = UInt32(2) - static let tim4en_mask = UInt32(0b1) &<< tim4en_offset - var tim4en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim4en_mask)) >> RCC.APB1ENR.tim4en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim4en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim4en_offset) & RCC.APB1ENR.tim4en_mask - self.rawValue = preserve | shift - } - } - - static let tim5en_offset = UInt32(3) - static let tim5en_mask = UInt32(0b1) &<< tim5en_offset - var tim5en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim5en_mask)) >> RCC.APB1ENR.tim5en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim5en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim5en_offset) & RCC.APB1ENR.tim5en_mask - self.rawValue = preserve | shift - } - } - - static let tim6en_offset = UInt32(4) - static let tim6en_mask = UInt32(0b1) &<< tim6en_offset - var tim6en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim6en_mask)) >> RCC.APB1ENR.tim6en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim6en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim6en_offset) & RCC.APB1ENR.tim6en_mask - self.rawValue = preserve | shift - } - } - - static let tim7en_offset = UInt32(5) - static let tim7en_mask = UInt32(0b1) &<< tim7en_offset - var tim7en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim7en_mask)) >> RCC.APB1ENR.tim7en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim7en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim7en_offset) & RCC.APB1ENR.tim7en_mask - self.rawValue = preserve | shift - } - } - - static let tim12en_offset = UInt32(6) - static let tim12en_mask = UInt32(0b1) &<< tim12en_offset - var tim12en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim12en_mask)) >> RCC.APB1ENR.tim12en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim12en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim12en_offset) & RCC.APB1ENR.tim12en_mask - self.rawValue = preserve | shift - } - } - - static let tim13en_offset = UInt32(7) - static let tim13en_mask = UInt32(0b1) &<< tim13en_offset - var tim13en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim13en_mask)) >> RCC.APB1ENR.tim13en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim13en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim13en_offset) & RCC.APB1ENR.tim13en_mask - self.rawValue = preserve | shift - } - } - - static let tim14en_offset = UInt32(8) - static let tim14en_mask = UInt32(0b1) &<< tim14en_offset - var tim14en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.tim14en_mask)) >> RCC.APB1ENR.tim14en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.tim14en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.tim14en_offset) & RCC.APB1ENR.tim14en_mask - self.rawValue = preserve | shift - } - } - - static let wwdgen_offset = UInt32(11) - static let wwdgen_mask = UInt32(0b1) &<< wwdgen_offset - var wwdgen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.wwdgen_mask)) >> RCC.APB1ENR.wwdgen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.wwdgen_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.wwdgen_offset) & RCC.APB1ENR.wwdgen_mask - self.rawValue = preserve | shift - } - } - - static let spi2en_offset = UInt32(14) - static let spi2en_mask = UInt32(0b1) &<< spi2en_offset - var spi2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.spi2en_mask)) >> RCC.APB1ENR.spi2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.spi2en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.spi2en_offset) & RCC.APB1ENR.spi2en_mask - self.rawValue = preserve | shift - } - } - - static let spi3en_offset = UInt32(15) - static let spi3en_mask = UInt32(0b1) &<< spi3en_offset - var spi3en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.spi3en_mask)) >> RCC.APB1ENR.spi3en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.spi3en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.spi3en_offset) & RCC.APB1ENR.spi3en_mask - self.rawValue = preserve | shift - } - } - - static let usart2en_offset = UInt32(17) - static let usart2en_mask = UInt32(0b1) &<< usart2en_offset - var usart2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.usart2en_mask)) >> RCC.APB1ENR.usart2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.usart2en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.usart2en_offset) & RCC.APB1ENR.usart2en_mask - self.rawValue = preserve | shift - } - } - - static let usart3en_offset = UInt32(18) - static let usart3en_mask = UInt32(0b1) &<< usart3en_offset - var usart3en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.usart3en_mask)) >> RCC.APB1ENR.usart3en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.usart3en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.usart3en_offset) & RCC.APB1ENR.usart3en_mask - self.rawValue = preserve | shift - } - } - - static let uart4en_offset = UInt32(19) - static let uart4en_mask = UInt32(0b1) &<< uart4en_offset - var uart4en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.uart4en_mask)) >> RCC.APB1ENR.uart4en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.uart4en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.uart4en_offset) & RCC.APB1ENR.uart4en_mask - self.rawValue = preserve | shift - } - } - - static let uart5en_offset = UInt32(20) - static let uart5en_mask = UInt32(0b1) &<< uart5en_offset - var uart5en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.uart5en_mask)) >> RCC.APB1ENR.uart5en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.uart5en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.uart5en_offset) & RCC.APB1ENR.uart5en_mask - self.rawValue = preserve | shift - } - } - - static let i2c1en_offset = UInt32(21) - static let i2c1en_mask = UInt32(0b1) &<< i2c1en_offset - var i2c1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.i2c1en_mask)) >> RCC.APB1ENR.i2c1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.i2c1en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.i2c1en_offset) & RCC.APB1ENR.i2c1en_mask - self.rawValue = preserve | shift - } - } - - static let i2c2en_offset = UInt32(22) - static let i2c2en_mask = UInt32(0b1) &<< i2c2en_offset - var i2c2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.i2c2en_mask)) >> RCC.APB1ENR.i2c2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.i2c2en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.i2c2en_offset) & RCC.APB1ENR.i2c2en_mask - self.rawValue = preserve | shift - } - } - - static let i2c3en_offset = UInt32(23) - static let i2c3en_mask = UInt32(0b1) &<< i2c3en_offset - var i2c3en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.i2c3en_mask)) >> RCC.APB1ENR.i2c3en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.i2c3en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.i2c3en_offset) & RCC.APB1ENR.i2c3en_mask - self.rawValue = preserve | shift - } - } - - static let can1en_offset = UInt32(25) - static let can1en_mask = UInt32(0b1) &<< can1en_offset - var can1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.can1en_mask)) >> RCC.APB1ENR.can1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.can1en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.can1en_offset) & RCC.APB1ENR.can1en_mask - self.rawValue = preserve | shift - } - } - - static let can2en_offset = UInt32(26) - static let can2en_mask = UInt32(0b1) &<< can2en_offset - var can2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.can2en_mask)) >> RCC.APB1ENR.can2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.can2en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.can2en_offset) & RCC.APB1ENR.can2en_mask - self.rawValue = preserve | shift - } - } - - static let pwren_offset = UInt32(28) - static let pwren_mask = UInt32(0b1) &<< pwren_offset - var pwren: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.pwren_mask)) >> RCC.APB1ENR.pwren_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.pwren_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.pwren_offset) & RCC.APB1ENR.pwren_mask - self.rawValue = preserve | shift - } - } - - static let dacen_offset = UInt32(29) - static let dacen_mask = UInt32(0b1) &<< dacen_offset - var dacen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.dacen_mask)) >> RCC.APB1ENR.dacen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.dacen_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.dacen_offset) & RCC.APB1ENR.dacen_mask - self.rawValue = preserve | shift - } - } - - static let uart7enr_offset = UInt32(30) - static let uart7enr_mask = UInt32(0b1) &<< uart7enr_offset - var uart7enr: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.uart7enr_mask)) >> RCC.APB1ENR.uart7enr_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.uart7enr_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.uart7enr_offset) & RCC.APB1ENR.uart7enr_mask - self.rawValue = preserve | shift - } - } - - static let uart8enr_offset = UInt32(31) - static let uart8enr_mask = UInt32(0b1) &<< uart8enr_offset - var uart8enr: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.uart8enr_mask)) >> RCC.APB1ENR.uart8enr_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.uart8enr_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.uart8enr_offset) & RCC.APB1ENR.uart8enr_mask - self.rawValue = preserve | shift - } - } - - static let spdifrxen_offset = UInt32(16) - static let spdifrxen_mask = UInt32(0b1) &<< spdifrxen_offset - var spdifrxen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.spdifrxen_mask)) >> RCC.APB1ENR.spdifrxen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.spdifrxen_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.spdifrxen_offset) & RCC.APB1ENR.spdifrxen_mask - self.rawValue = preserve | shift - } - } - - static let cecen_offset = UInt32(27) - static let cecen_mask = UInt32(0b1) &<< cecen_offset - var cecen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.cecen_mask)) >> RCC.APB1ENR.cecen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.cecen_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.cecen_offset) & RCC.APB1ENR.cecen_mask - self.rawValue = preserve | shift - } - } - - static let lptmi1en_offset = UInt32(9) - static let lptmi1en_mask = UInt32(0b1) &<< lptmi1en_offset - var lptmi1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.lptmi1en_mask)) >> RCC.APB1ENR.lptmi1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.lptmi1en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.lptmi1en_offset) & RCC.APB1ENR.lptmi1en_mask - self.rawValue = preserve | shift - } - } - - static let i2c4en_offset = UInt32(24) - static let i2c4en_mask = UInt32(0b1) &<< i2c4en_offset - var i2c4en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1ENR.i2c4en_mask)) >> RCC.APB1ENR.i2c4en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1ENR.i2c4en_mask - let shift = (UInt32(newValue) << RCC.APB1ENR.i2c4en_offset) & RCC.APB1ENR.i2c4en_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB2ENR { - var rawValue: UInt32 - - static let tim1en_offset = UInt32(0) - static let tim1en_mask = UInt32(0b1) &<< tim1en_offset - var tim1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.tim1en_mask)) >> RCC.APB2ENR.tim1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.tim1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.tim1en_offset) & RCC.APB2ENR.tim1en_mask - self.rawValue = preserve | shift - } - } - - static let tim8en_offset = UInt32(1) - static let tim8en_mask = UInt32(0b1) &<< tim8en_offset - var tim8en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.tim8en_mask)) >> RCC.APB2ENR.tim8en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.tim8en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.tim8en_offset) & RCC.APB2ENR.tim8en_mask - self.rawValue = preserve | shift - } - } - - static let usart1en_offset = UInt32(4) - static let usart1en_mask = UInt32(0b1) &<< usart1en_offset - var usart1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.usart1en_mask)) >> RCC.APB2ENR.usart1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.usart1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.usart1en_offset) & RCC.APB2ENR.usart1en_mask - self.rawValue = preserve | shift - } - } - - static let usart6en_offset = UInt32(5) - static let usart6en_mask = UInt32(0b1) &<< usart6en_offset - var usart6en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.usart6en_mask)) >> RCC.APB2ENR.usart6en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.usart6en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.usart6en_offset) & RCC.APB2ENR.usart6en_mask - self.rawValue = preserve | shift - } - } - - static let adc1en_offset = UInt32(8) - static let adc1en_mask = UInt32(0b1) &<< adc1en_offset - var adc1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.adc1en_mask)) >> RCC.APB2ENR.adc1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.adc1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.adc1en_offset) & RCC.APB2ENR.adc1en_mask - self.rawValue = preserve | shift - } - } - - static let adc2en_offset = UInt32(9) - static let adc2en_mask = UInt32(0b1) &<< adc2en_offset - var adc2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.adc2en_mask)) >> RCC.APB2ENR.adc2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.adc2en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.adc2en_offset) & RCC.APB2ENR.adc2en_mask - self.rawValue = preserve | shift - } - } - - static let adc3en_offset = UInt32(10) - static let adc3en_mask = UInt32(0b1) &<< adc3en_offset - var adc3en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.adc3en_mask)) >> RCC.APB2ENR.adc3en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.adc3en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.adc3en_offset) & RCC.APB2ENR.adc3en_mask - self.rawValue = preserve | shift - } - } - - static let spi1en_offset = UInt32(12) - static let spi1en_mask = UInt32(0b1) &<< spi1en_offset - var spi1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.spi1en_mask)) >> RCC.APB2ENR.spi1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.spi1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.spi1en_offset) & RCC.APB2ENR.spi1en_mask - self.rawValue = preserve | shift - } - } - - static let spi4enr_offset = UInt32(13) - static let spi4enr_mask = UInt32(0b1) &<< spi4enr_offset - var spi4enr: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.spi4enr_mask)) >> RCC.APB2ENR.spi4enr_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.spi4enr_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.spi4enr_offset) & RCC.APB2ENR.spi4enr_mask - self.rawValue = preserve | shift - } - } - - static let syscfgen_offset = UInt32(14) - static let syscfgen_mask = UInt32(0b1) &<< syscfgen_offset - var syscfgen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.syscfgen_mask)) >> RCC.APB2ENR.syscfgen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.syscfgen_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.syscfgen_offset) & RCC.APB2ENR.syscfgen_mask - self.rawValue = preserve | shift - } - } - - static let tim9en_offset = UInt32(16) - static let tim9en_mask = UInt32(0b1) &<< tim9en_offset - var tim9en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.tim9en_mask)) >> RCC.APB2ENR.tim9en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.tim9en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.tim9en_offset) & RCC.APB2ENR.tim9en_mask - self.rawValue = preserve | shift - } - } - - static let tim10en_offset = UInt32(17) - static let tim10en_mask = UInt32(0b1) &<< tim10en_offset - var tim10en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.tim10en_mask)) >> RCC.APB2ENR.tim10en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.tim10en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.tim10en_offset) & RCC.APB2ENR.tim10en_mask - self.rawValue = preserve | shift - } - } - - static let tim11en_offset = UInt32(18) - static let tim11en_mask = UInt32(0b1) &<< tim11en_offset - var tim11en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.tim11en_mask)) >> RCC.APB2ENR.tim11en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.tim11en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.tim11en_offset) & RCC.APB2ENR.tim11en_mask - self.rawValue = preserve | shift - } - } - - static let spi5enr_offset = UInt32(20) - static let spi5enr_mask = UInt32(0b1) &<< spi5enr_offset - var spi5enr: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.spi5enr_mask)) >> RCC.APB2ENR.spi5enr_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.spi5enr_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.spi5enr_offset) & RCC.APB2ENR.spi5enr_mask - self.rawValue = preserve | shift - } - } - - static let spi6enr_offset = UInt32(21) - static let spi6enr_mask = UInt32(0b1) &<< spi6enr_offset - var spi6enr: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.spi6enr_mask)) >> RCC.APB2ENR.spi6enr_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.spi6enr_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.spi6enr_offset) & RCC.APB2ENR.spi6enr_mask - self.rawValue = preserve | shift - } - } - - static let sai1en_offset = UInt32(22) - static let sai1en_mask = UInt32(0b1) &<< sai1en_offset - var sai1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.sai1en_mask)) >> RCC.APB2ENR.sai1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.sai1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.sai1en_offset) & RCC.APB2ENR.sai1en_mask - self.rawValue = preserve | shift - } - } - - static let ltdcen_offset = UInt32(26) - static let ltdcen_mask = UInt32(0b1) &<< ltdcen_offset - var ltdcen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.ltdcen_mask)) >> RCC.APB2ENR.ltdcen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.ltdcen_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.ltdcen_offset) & RCC.APB2ENR.ltdcen_mask - self.rawValue = preserve | shift - } - } - - static let sai2en_offset = UInt32(23) - static let sai2en_mask = UInt32(0b1) &<< sai2en_offset - var sai2en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.sai2en_mask)) >> RCC.APB2ENR.sai2en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.sai2en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.sai2en_offset) & RCC.APB2ENR.sai2en_mask - self.rawValue = preserve | shift - } - } - - static let sdmmc1en_offset = UInt32(11) - static let sdmmc1en_mask = UInt32(0b1) &<< sdmmc1en_offset - var sdmmc1en: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2ENR.sdmmc1en_mask)) >> RCC.APB2ENR.sdmmc1en_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2ENR.sdmmc1en_mask - let shift = (UInt32(newValue) << RCC.APB2ENR.sdmmc1en_offset) & RCC.APB2ENR.sdmmc1en_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB1LPENR { - var rawValue: UInt32 - - static let gpioalpen_offset = UInt32(0) - static let gpioalpen_mask = UInt32(0b1) &<< gpioalpen_offset - var gpioalpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioalpen_mask)) >> RCC.AHB1LPENR.gpioalpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioalpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioalpen_offset) & RCC.AHB1LPENR.gpioalpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioblpen_offset = UInt32(1) - static let gpioblpen_mask = UInt32(0b1) &<< gpioblpen_offset - var gpioblpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioblpen_mask)) >> RCC.AHB1LPENR.gpioblpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioblpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioblpen_offset) & RCC.AHB1LPENR.gpioblpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioclpen_offset = UInt32(2) - static let gpioclpen_mask = UInt32(0b1) &<< gpioclpen_offset - var gpioclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioclpen_mask)) >> RCC.AHB1LPENR.gpioclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioclpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioclpen_offset) & RCC.AHB1LPENR.gpioclpen_mask - self.rawValue = preserve | shift - } - } - - static let gpiodlpen_offset = UInt32(3) - static let gpiodlpen_mask = UInt32(0b1) &<< gpiodlpen_offset - var gpiodlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpiodlpen_mask)) >> RCC.AHB1LPENR.gpiodlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpiodlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpiodlpen_offset) & RCC.AHB1LPENR.gpiodlpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioelpen_offset = UInt32(4) - static let gpioelpen_mask = UInt32(0b1) &<< gpioelpen_offset - var gpioelpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioelpen_mask)) >> RCC.AHB1LPENR.gpioelpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioelpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioelpen_offset) & RCC.AHB1LPENR.gpioelpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioflpen_offset = UInt32(5) - static let gpioflpen_mask = UInt32(0b1) &<< gpioflpen_offset - var gpioflpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioflpen_mask)) >> RCC.AHB1LPENR.gpioflpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioflpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioflpen_offset) & RCC.AHB1LPENR.gpioflpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioglpen_offset = UInt32(6) - static let gpioglpen_mask = UInt32(0b1) &<< gpioglpen_offset - var gpioglpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioglpen_mask)) >> RCC.AHB1LPENR.gpioglpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioglpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioglpen_offset) & RCC.AHB1LPENR.gpioglpen_mask - self.rawValue = preserve | shift - } - } - - static let gpiohlpen_offset = UInt32(7) - static let gpiohlpen_mask = UInt32(0b1) &<< gpiohlpen_offset - var gpiohlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpiohlpen_mask)) >> RCC.AHB1LPENR.gpiohlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpiohlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpiohlpen_offset) & RCC.AHB1LPENR.gpiohlpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioilpen_offset = UInt32(8) - static let gpioilpen_mask = UInt32(0b1) &<< gpioilpen_offset - var gpioilpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioilpen_mask)) >> RCC.AHB1LPENR.gpioilpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioilpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioilpen_offset) & RCC.AHB1LPENR.gpioilpen_mask - self.rawValue = preserve | shift - } - } - - static let gpiojlpen_offset = UInt32(9) - static let gpiojlpen_mask = UInt32(0b1) &<< gpiojlpen_offset - var gpiojlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpiojlpen_mask)) >> RCC.AHB1LPENR.gpiojlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpiojlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpiojlpen_offset) & RCC.AHB1LPENR.gpiojlpen_mask - self.rawValue = preserve | shift - } - } - - static let gpioklpen_offset = UInt32(10) - static let gpioklpen_mask = UInt32(0b1) &<< gpioklpen_offset - var gpioklpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.gpioklpen_mask)) >> RCC.AHB1LPENR.gpioklpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.gpioklpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.gpioklpen_offset) & RCC.AHB1LPENR.gpioklpen_mask - self.rawValue = preserve | shift - } - } - - static let crclpen_offset = UInt32(12) - static let crclpen_mask = UInt32(0b1) &<< crclpen_offset - var crclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.crclpen_mask)) >> RCC.AHB1LPENR.crclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.crclpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.crclpen_offset) & RCC.AHB1LPENR.crclpen_mask - self.rawValue = preserve | shift - } - } - - static let flitflpen_offset = UInt32(15) - static let flitflpen_mask = UInt32(0b1) &<< flitflpen_offset - var flitflpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.flitflpen_mask)) >> RCC.AHB1LPENR.flitflpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.flitflpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.flitflpen_offset) & RCC.AHB1LPENR.flitflpen_mask - self.rawValue = preserve | shift - } - } - - static let sram1lpen_offset = UInt32(16) - static let sram1lpen_mask = UInt32(0b1) &<< sram1lpen_offset - var sram1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.sram1lpen_mask)) >> RCC.AHB1LPENR.sram1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.sram1lpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.sram1lpen_offset) & RCC.AHB1LPENR.sram1lpen_mask - self.rawValue = preserve | shift - } - } - - static let sram2lpen_offset = UInt32(17) - static let sram2lpen_mask = UInt32(0b1) &<< sram2lpen_offset - var sram2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.sram2lpen_mask)) >> RCC.AHB1LPENR.sram2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.sram2lpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.sram2lpen_offset) & RCC.AHB1LPENR.sram2lpen_mask - self.rawValue = preserve | shift - } - } - - static let bkpsramlpen_offset = UInt32(18) - static let bkpsramlpen_mask = UInt32(0b1) &<< bkpsramlpen_offset - var bkpsramlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.bkpsramlpen_mask)) >> RCC.AHB1LPENR.bkpsramlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.bkpsramlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.bkpsramlpen_offset) & RCC.AHB1LPENR.bkpsramlpen_mask - self.rawValue = preserve | shift - } - } - - static let sram3lpen_offset = UInt32(19) - static let sram3lpen_mask = UInt32(0b1) &<< sram3lpen_offset - var sram3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.sram3lpen_mask)) >> RCC.AHB1LPENR.sram3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.sram3lpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.sram3lpen_offset) & RCC.AHB1LPENR.sram3lpen_mask - self.rawValue = preserve | shift - } - } - - static let dma1lpen_offset = UInt32(21) - static let dma1lpen_mask = UInt32(0b1) &<< dma1lpen_offset - var dma1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.dma1lpen_mask)) >> RCC.AHB1LPENR.dma1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.dma1lpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.dma1lpen_offset) & RCC.AHB1LPENR.dma1lpen_mask - self.rawValue = preserve | shift - } - } - - static let dma2lpen_offset = UInt32(22) - static let dma2lpen_mask = UInt32(0b1) &<< dma2lpen_offset - var dma2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.dma2lpen_mask)) >> RCC.AHB1LPENR.dma2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.dma2lpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.dma2lpen_offset) & RCC.AHB1LPENR.dma2lpen_mask - self.rawValue = preserve | shift - } - } - - static let dma2dlpen_offset = UInt32(23) - static let dma2dlpen_mask = UInt32(0b1) &<< dma2dlpen_offset - var dma2dlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.dma2dlpen_mask)) >> RCC.AHB1LPENR.dma2dlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.dma2dlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.dma2dlpen_offset) & RCC.AHB1LPENR.dma2dlpen_mask - self.rawValue = preserve | shift - } - } - - static let ethmaclpen_offset = UInt32(25) - static let ethmaclpen_mask = UInt32(0b1) &<< ethmaclpen_offset - var ethmaclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.ethmaclpen_mask)) >> RCC.AHB1LPENR.ethmaclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.ethmaclpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.ethmaclpen_offset) & RCC.AHB1LPENR.ethmaclpen_mask - self.rawValue = preserve | shift - } - } - - static let ethmactxlpen_offset = UInt32(26) - static let ethmactxlpen_mask = UInt32(0b1) &<< ethmactxlpen_offset - var ethmactxlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.ethmactxlpen_mask)) >> RCC.AHB1LPENR.ethmactxlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.ethmactxlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.ethmactxlpen_offset) & RCC.AHB1LPENR.ethmactxlpen_mask - self.rawValue = preserve | shift - } - } - - static let ethmacrxlpen_offset = UInt32(27) - static let ethmacrxlpen_mask = UInt32(0b1) &<< ethmacrxlpen_offset - var ethmacrxlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.ethmacrxlpen_mask)) >> RCC.AHB1LPENR.ethmacrxlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.ethmacrxlpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.ethmacrxlpen_offset) & RCC.AHB1LPENR.ethmacrxlpen_mask - self.rawValue = preserve | shift - } - } - - static let ethmacptplpen_offset = UInt32(28) - static let ethmacptplpen_mask = UInt32(0b1) &<< ethmacptplpen_offset - var ethmacptplpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.ethmacptplpen_mask)) >> RCC.AHB1LPENR.ethmacptplpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.ethmacptplpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.ethmacptplpen_offset) & RCC.AHB1LPENR.ethmacptplpen_mask - self.rawValue = preserve | shift - } - } - - static let otghslpen_offset = UInt32(29) - static let otghslpen_mask = UInt32(0b1) &<< otghslpen_offset - var otghslpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.otghslpen_mask)) >> RCC.AHB1LPENR.otghslpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.otghslpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.otghslpen_offset) & RCC.AHB1LPENR.otghslpen_mask - self.rawValue = preserve | shift - } - } - - static let otghsulpilpen_offset = UInt32(30) - static let otghsulpilpen_mask = UInt32(0b1) &<< otghsulpilpen_offset - var otghsulpilpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB1LPENR.otghsulpilpen_mask)) >> RCC.AHB1LPENR.otghsulpilpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB1LPENR.otghsulpilpen_mask - let shift = (UInt32(newValue) << RCC.AHB1LPENR.otghsulpilpen_offset) & RCC.AHB1LPENR.otghsulpilpen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB2LPENR { - var rawValue: UInt32 - - static let otgfslpen_offset = UInt32(7) - static let otgfslpen_mask = UInt32(0b1) &<< otgfslpen_offset - var otgfslpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2LPENR.otgfslpen_mask)) >> RCC.AHB2LPENR.otgfslpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2LPENR.otgfslpen_mask - let shift = (UInt32(newValue) << RCC.AHB2LPENR.otgfslpen_offset) & RCC.AHB2LPENR.otgfslpen_mask - self.rawValue = preserve | shift - } - } - - static let rnglpen_offset = UInt32(6) - static let rnglpen_mask = UInt32(0b1) &<< rnglpen_offset - var rnglpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2LPENR.rnglpen_mask)) >> RCC.AHB2LPENR.rnglpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2LPENR.rnglpen_mask - let shift = (UInt32(newValue) << RCC.AHB2LPENR.rnglpen_offset) & RCC.AHB2LPENR.rnglpen_mask - self.rawValue = preserve | shift - } - } - - static let hashlpen_offset = UInt32(5) - static let hashlpen_mask = UInt32(0b1) &<< hashlpen_offset - var hashlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2LPENR.hashlpen_mask)) >> RCC.AHB2LPENR.hashlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2LPENR.hashlpen_mask - let shift = (UInt32(newValue) << RCC.AHB2LPENR.hashlpen_offset) & RCC.AHB2LPENR.hashlpen_mask - self.rawValue = preserve | shift - } - } - - static let cryplpen_offset = UInt32(4) - static let cryplpen_mask = UInt32(0b1) &<< cryplpen_offset - var cryplpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2LPENR.cryplpen_mask)) >> RCC.AHB2LPENR.cryplpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2LPENR.cryplpen_mask - let shift = (UInt32(newValue) << RCC.AHB2LPENR.cryplpen_offset) & RCC.AHB2LPENR.cryplpen_mask - self.rawValue = preserve | shift - } - } - - static let dcmilpen_offset = UInt32(0) - static let dcmilpen_mask = UInt32(0b1) &<< dcmilpen_offset - var dcmilpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB2LPENR.dcmilpen_mask)) >> RCC.AHB2LPENR.dcmilpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB2LPENR.dcmilpen_mask - let shift = (UInt32(newValue) << RCC.AHB2LPENR.dcmilpen_offset) & RCC.AHB2LPENR.dcmilpen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct AHB3LPENR { - var rawValue: UInt32 - - static let fmclpen_offset = UInt32(0) - static let fmclpen_mask = UInt32(0b1) &<< fmclpen_offset - var fmclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3LPENR.fmclpen_mask)) >> RCC.AHB3LPENR.fmclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3LPENR.fmclpen_mask - let shift = (UInt32(newValue) << RCC.AHB3LPENR.fmclpen_offset) & RCC.AHB3LPENR.fmclpen_mask - self.rawValue = preserve | shift - } - } - - static let qspilpen_offset = UInt32(1) - static let qspilpen_mask = UInt32(0b1) &<< qspilpen_offset - var qspilpen: UInt8 { - get { UInt8((self.rawValue & (RCC.AHB3LPENR.qspilpen_mask)) >> RCC.AHB3LPENR.qspilpen_offset) } - set { - let preserve = self.rawValue & ~RCC.AHB3LPENR.qspilpen_mask - let shift = (UInt32(newValue) << RCC.AHB3LPENR.qspilpen_offset) & RCC.AHB3LPENR.qspilpen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB1LPENR { - var rawValue: UInt32 - - static let tim2lpen_offset = UInt32(0) - static let tim2lpen_mask = UInt32(0b1) &<< tim2lpen_offset - var tim2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim2lpen_mask)) >> RCC.APB1LPENR.tim2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim2lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim2lpen_offset) & RCC.APB1LPENR.tim2lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim3lpen_offset = UInt32(1) - static let tim3lpen_mask = UInt32(0b1) &<< tim3lpen_offset - var tim3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim3lpen_mask)) >> RCC.APB1LPENR.tim3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim3lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim3lpen_offset) & RCC.APB1LPENR.tim3lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim4lpen_offset = UInt32(2) - static let tim4lpen_mask = UInt32(0b1) &<< tim4lpen_offset - var tim4lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim4lpen_mask)) >> RCC.APB1LPENR.tim4lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim4lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim4lpen_offset) & RCC.APB1LPENR.tim4lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim5lpen_offset = UInt32(3) - static let tim5lpen_mask = UInt32(0b1) &<< tim5lpen_offset - var tim5lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim5lpen_mask)) >> RCC.APB1LPENR.tim5lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim5lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim5lpen_offset) & RCC.APB1LPENR.tim5lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim6lpen_offset = UInt32(4) - static let tim6lpen_mask = UInt32(0b1) &<< tim6lpen_offset - var tim6lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim6lpen_mask)) >> RCC.APB1LPENR.tim6lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim6lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim6lpen_offset) & RCC.APB1LPENR.tim6lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim7lpen_offset = UInt32(5) - static let tim7lpen_mask = UInt32(0b1) &<< tim7lpen_offset - var tim7lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim7lpen_mask)) >> RCC.APB1LPENR.tim7lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim7lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim7lpen_offset) & RCC.APB1LPENR.tim7lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim12lpen_offset = UInt32(6) - static let tim12lpen_mask = UInt32(0b1) &<< tim12lpen_offset - var tim12lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim12lpen_mask)) >> RCC.APB1LPENR.tim12lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim12lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim12lpen_offset) & RCC.APB1LPENR.tim12lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim13lpen_offset = UInt32(7) - static let tim13lpen_mask = UInt32(0b1) &<< tim13lpen_offset - var tim13lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim13lpen_mask)) >> RCC.APB1LPENR.tim13lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim13lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim13lpen_offset) & RCC.APB1LPENR.tim13lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim14lpen_offset = UInt32(8) - static let tim14lpen_mask = UInt32(0b1) &<< tim14lpen_offset - var tim14lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.tim14lpen_mask)) >> RCC.APB1LPENR.tim14lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.tim14lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.tim14lpen_offset) & RCC.APB1LPENR.tim14lpen_mask - self.rawValue = preserve | shift - } - } - - static let wwdglpen_offset = UInt32(11) - static let wwdglpen_mask = UInt32(0b1) &<< wwdglpen_offset - var wwdglpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.wwdglpen_mask)) >> RCC.APB1LPENR.wwdglpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.wwdglpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.wwdglpen_offset) & RCC.APB1LPENR.wwdglpen_mask - self.rawValue = preserve | shift - } - } - - static let spi2lpen_offset = UInt32(14) - static let spi2lpen_mask = UInt32(0b1) &<< spi2lpen_offset - var spi2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.spi2lpen_mask)) >> RCC.APB1LPENR.spi2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.spi2lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.spi2lpen_offset) & RCC.APB1LPENR.spi2lpen_mask - self.rawValue = preserve | shift - } - } - - static let spi3lpen_offset = UInt32(15) - static let spi3lpen_mask = UInt32(0b1) &<< spi3lpen_offset - var spi3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.spi3lpen_mask)) >> RCC.APB1LPENR.spi3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.spi3lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.spi3lpen_offset) & RCC.APB1LPENR.spi3lpen_mask - self.rawValue = preserve | shift - } - } - - static let usart2lpen_offset = UInt32(17) - static let usart2lpen_mask = UInt32(0b1) &<< usart2lpen_offset - var usart2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.usart2lpen_mask)) >> RCC.APB1LPENR.usart2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.usart2lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.usart2lpen_offset) & RCC.APB1LPENR.usart2lpen_mask - self.rawValue = preserve | shift - } - } - - static let usart3lpen_offset = UInt32(18) - static let usart3lpen_mask = UInt32(0b1) &<< usart3lpen_offset - var usart3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.usart3lpen_mask)) >> RCC.APB1LPENR.usart3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.usart3lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.usart3lpen_offset) & RCC.APB1LPENR.usart3lpen_mask - self.rawValue = preserve | shift - } - } - - static let uart4lpen_offset = UInt32(19) - static let uart4lpen_mask = UInt32(0b1) &<< uart4lpen_offset - var uart4lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.uart4lpen_mask)) >> RCC.APB1LPENR.uart4lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.uart4lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.uart4lpen_offset) & RCC.APB1LPENR.uart4lpen_mask - self.rawValue = preserve | shift - } - } - - static let uart5lpen_offset = UInt32(20) - static let uart5lpen_mask = UInt32(0b1) &<< uart5lpen_offset - var uart5lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.uart5lpen_mask)) >> RCC.APB1LPENR.uart5lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.uart5lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.uart5lpen_offset) & RCC.APB1LPENR.uart5lpen_mask - self.rawValue = preserve | shift - } - } - - static let i2c1lpen_offset = UInt32(21) - static let i2c1lpen_mask = UInt32(0b1) &<< i2c1lpen_offset - var i2c1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.i2c1lpen_mask)) >> RCC.APB1LPENR.i2c1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.i2c1lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.i2c1lpen_offset) & RCC.APB1LPENR.i2c1lpen_mask - self.rawValue = preserve | shift - } - } - - static let i2c2lpen_offset = UInt32(22) - static let i2c2lpen_mask = UInt32(0b1) &<< i2c2lpen_offset - var i2c2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.i2c2lpen_mask)) >> RCC.APB1LPENR.i2c2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.i2c2lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.i2c2lpen_offset) & RCC.APB1LPENR.i2c2lpen_mask - self.rawValue = preserve | shift - } - } - - static let i2c3lpen_offset = UInt32(23) - static let i2c3lpen_mask = UInt32(0b1) &<< i2c3lpen_offset - var i2c3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.i2c3lpen_mask)) >> RCC.APB1LPENR.i2c3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.i2c3lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.i2c3lpen_offset) & RCC.APB1LPENR.i2c3lpen_mask - self.rawValue = preserve | shift - } - } - - static let can1lpen_offset = UInt32(25) - static let can1lpen_mask = UInt32(0b1) &<< can1lpen_offset - var can1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.can1lpen_mask)) >> RCC.APB1LPENR.can1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.can1lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.can1lpen_offset) & RCC.APB1LPENR.can1lpen_mask - self.rawValue = preserve | shift - } - } - - static let can2lpen_offset = UInt32(26) - static let can2lpen_mask = UInt32(0b1) &<< can2lpen_offset - var can2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.can2lpen_mask)) >> RCC.APB1LPENR.can2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.can2lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.can2lpen_offset) & RCC.APB1LPENR.can2lpen_mask - self.rawValue = preserve | shift - } - } - - static let pwrlpen_offset = UInt32(28) - static let pwrlpen_mask = UInt32(0b1) &<< pwrlpen_offset - var pwrlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.pwrlpen_mask)) >> RCC.APB1LPENR.pwrlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.pwrlpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.pwrlpen_offset) & RCC.APB1LPENR.pwrlpen_mask - self.rawValue = preserve | shift - } - } - - static let daclpen_offset = UInt32(29) - static let daclpen_mask = UInt32(0b1) &<< daclpen_offset - var daclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.daclpen_mask)) >> RCC.APB1LPENR.daclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.daclpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.daclpen_offset) & RCC.APB1LPENR.daclpen_mask - self.rawValue = preserve | shift - } - } - - static let uart7lpen_offset = UInt32(30) - static let uart7lpen_mask = UInt32(0b1) &<< uart7lpen_offset - var uart7lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.uart7lpen_mask)) >> RCC.APB1LPENR.uart7lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.uart7lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.uart7lpen_offset) & RCC.APB1LPENR.uart7lpen_mask - self.rawValue = preserve | shift - } - } - - static let uart8lpen_offset = UInt32(31) - static let uart8lpen_mask = UInt32(0b1) &<< uart8lpen_offset - var uart8lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.uart8lpen_mask)) >> RCC.APB1LPENR.uart8lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.uart8lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.uart8lpen_offset) & RCC.APB1LPENR.uart8lpen_mask - self.rawValue = preserve | shift - } - } - - static let spdifrxlpen_offset = UInt32(16) - static let spdifrxlpen_mask = UInt32(0b1) &<< spdifrxlpen_offset - var spdifrxlpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.spdifrxlpen_mask)) >> RCC.APB1LPENR.spdifrxlpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.spdifrxlpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.spdifrxlpen_offset) & RCC.APB1LPENR.spdifrxlpen_mask - self.rawValue = preserve | shift - } - } - - static let ceclpen_offset = UInt32(27) - static let ceclpen_mask = UInt32(0b1) &<< ceclpen_offset - var ceclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.ceclpen_mask)) >> RCC.APB1LPENR.ceclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.ceclpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.ceclpen_offset) & RCC.APB1LPENR.ceclpen_mask - self.rawValue = preserve | shift - } - } - - static let lptim1lpen_offset = UInt32(9) - static let lptim1lpen_mask = UInt32(0b1) &<< lptim1lpen_offset - var lptim1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.lptim1lpen_mask)) >> RCC.APB1LPENR.lptim1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.lptim1lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.lptim1lpen_offset) & RCC.APB1LPENR.lptim1lpen_mask - self.rawValue = preserve | shift - } - } - - static let i2c4lpen_offset = UInt32(24) - static let i2c4lpen_mask = UInt32(0b1) &<< i2c4lpen_offset - var i2c4lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB1LPENR.i2c4lpen_mask)) >> RCC.APB1LPENR.i2c4lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB1LPENR.i2c4lpen_mask - let shift = (UInt32(newValue) << RCC.APB1LPENR.i2c4lpen_offset) & RCC.APB1LPENR.i2c4lpen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct APB2LPENR { - var rawValue: UInt32 - - static let tim1lpen_offset = UInt32(0) - static let tim1lpen_mask = UInt32(0b1) &<< tim1lpen_offset - var tim1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.tim1lpen_mask)) >> RCC.APB2LPENR.tim1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.tim1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.tim1lpen_offset) & RCC.APB2LPENR.tim1lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim8lpen_offset = UInt32(1) - static let tim8lpen_mask = UInt32(0b1) &<< tim8lpen_offset - var tim8lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.tim8lpen_mask)) >> RCC.APB2LPENR.tim8lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.tim8lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.tim8lpen_offset) & RCC.APB2LPENR.tim8lpen_mask - self.rawValue = preserve | shift - } - } - - static let usart1lpen_offset = UInt32(4) - static let usart1lpen_mask = UInt32(0b1) &<< usart1lpen_offset - var usart1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.usart1lpen_mask)) >> RCC.APB2LPENR.usart1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.usart1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.usart1lpen_offset) & RCC.APB2LPENR.usart1lpen_mask - self.rawValue = preserve | shift - } - } - - static let usart6lpen_offset = UInt32(5) - static let usart6lpen_mask = UInt32(0b1) &<< usart6lpen_offset - var usart6lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.usart6lpen_mask)) >> RCC.APB2LPENR.usart6lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.usart6lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.usart6lpen_offset) & RCC.APB2LPENR.usart6lpen_mask - self.rawValue = preserve | shift - } - } - - static let adc1lpen_offset = UInt32(8) - static let adc1lpen_mask = UInt32(0b1) &<< adc1lpen_offset - var adc1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.adc1lpen_mask)) >> RCC.APB2LPENR.adc1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.adc1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.adc1lpen_offset) & RCC.APB2LPENR.adc1lpen_mask - self.rawValue = preserve | shift - } - } - - static let adc2lpen_offset = UInt32(9) - static let adc2lpen_mask = UInt32(0b1) &<< adc2lpen_offset - var adc2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.adc2lpen_mask)) >> RCC.APB2LPENR.adc2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.adc2lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.adc2lpen_offset) & RCC.APB2LPENR.adc2lpen_mask - self.rawValue = preserve | shift - } - } - - static let adc3lpen_offset = UInt32(10) - static let adc3lpen_mask = UInt32(0b1) &<< adc3lpen_offset - var adc3lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.adc3lpen_mask)) >> RCC.APB2LPENR.adc3lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.adc3lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.adc3lpen_offset) & RCC.APB2LPENR.adc3lpen_mask - self.rawValue = preserve | shift - } - } - - static let spi1lpen_offset = UInt32(12) - static let spi1lpen_mask = UInt32(0b1) &<< spi1lpen_offset - var spi1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.spi1lpen_mask)) >> RCC.APB2LPENR.spi1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.spi1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.spi1lpen_offset) & RCC.APB2LPENR.spi1lpen_mask - self.rawValue = preserve | shift - } - } - - static let spi4lpen_offset = UInt32(13) - static let spi4lpen_mask = UInt32(0b1) &<< spi4lpen_offset - var spi4lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.spi4lpen_mask)) >> RCC.APB2LPENR.spi4lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.spi4lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.spi4lpen_offset) & RCC.APB2LPENR.spi4lpen_mask - self.rawValue = preserve | shift - } - } - - static let syscfglpen_offset = UInt32(14) - static let syscfglpen_mask = UInt32(0b1) &<< syscfglpen_offset - var syscfglpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.syscfglpen_mask)) >> RCC.APB2LPENR.syscfglpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.syscfglpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.syscfglpen_offset) & RCC.APB2LPENR.syscfglpen_mask - self.rawValue = preserve | shift - } - } - - static let tim9lpen_offset = UInt32(16) - static let tim9lpen_mask = UInt32(0b1) &<< tim9lpen_offset - var tim9lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.tim9lpen_mask)) >> RCC.APB2LPENR.tim9lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.tim9lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.tim9lpen_offset) & RCC.APB2LPENR.tim9lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim10lpen_offset = UInt32(17) - static let tim10lpen_mask = UInt32(0b1) &<< tim10lpen_offset - var tim10lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.tim10lpen_mask)) >> RCC.APB2LPENR.tim10lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.tim10lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.tim10lpen_offset) & RCC.APB2LPENR.tim10lpen_mask - self.rawValue = preserve | shift - } - } - - static let tim11lpen_offset = UInt32(18) - static let tim11lpen_mask = UInt32(0b1) &<< tim11lpen_offset - var tim11lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.tim11lpen_mask)) >> RCC.APB2LPENR.tim11lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.tim11lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.tim11lpen_offset) & RCC.APB2LPENR.tim11lpen_mask - self.rawValue = preserve | shift - } - } - - static let spi5lpen_offset = UInt32(20) - static let spi5lpen_mask = UInt32(0b1) &<< spi5lpen_offset - var spi5lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.spi5lpen_mask)) >> RCC.APB2LPENR.spi5lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.spi5lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.spi5lpen_offset) & RCC.APB2LPENR.spi5lpen_mask - self.rawValue = preserve | shift - } - } - - static let spi6lpen_offset = UInt32(21) - static let spi6lpen_mask = UInt32(0b1) &<< spi6lpen_offset - var spi6lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.spi6lpen_mask)) >> RCC.APB2LPENR.spi6lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.spi6lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.spi6lpen_offset) & RCC.APB2LPENR.spi6lpen_mask - self.rawValue = preserve | shift - } - } - - static let sai1lpen_offset = UInt32(22) - static let sai1lpen_mask = UInt32(0b1) &<< sai1lpen_offset - var sai1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.sai1lpen_mask)) >> RCC.APB2LPENR.sai1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.sai1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.sai1lpen_offset) & RCC.APB2LPENR.sai1lpen_mask - self.rawValue = preserve | shift - } - } - - static let ltdclpen_offset = UInt32(26) - static let ltdclpen_mask = UInt32(0b1) &<< ltdclpen_offset - var ltdclpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.ltdclpen_mask)) >> RCC.APB2LPENR.ltdclpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.ltdclpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.ltdclpen_offset) & RCC.APB2LPENR.ltdclpen_mask - self.rawValue = preserve | shift - } - } - - static let sai2lpen_offset = UInt32(23) - static let sai2lpen_mask = UInt32(0b1) &<< sai2lpen_offset - var sai2lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.sai2lpen_mask)) >> RCC.APB2LPENR.sai2lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.sai2lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.sai2lpen_offset) & RCC.APB2LPENR.sai2lpen_mask - self.rawValue = preserve | shift - } - } - - static let sdmmc1lpen_offset = UInt32(11) - static let sdmmc1lpen_mask = UInt32(0b1) &<< sdmmc1lpen_offset - var sdmmc1lpen: UInt8 { - get { UInt8((self.rawValue & (RCC.APB2LPENR.sdmmc1lpen_mask)) >> RCC.APB2LPENR.sdmmc1lpen_offset) } - set { - let preserve = self.rawValue & ~RCC.APB2LPENR.sdmmc1lpen_mask - let shift = (UInt32(newValue) << RCC.APB2LPENR.sdmmc1lpen_offset) & RCC.APB2LPENR.sdmmc1lpen_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct BDCR { - var rawValue: UInt32 - - static let bdrst_offset = UInt32(16) - static let bdrst_mask = UInt32(0b1) &<< bdrst_offset - var bdrst: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.bdrst_mask)) >> RCC.BDCR.bdrst_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.bdrst_mask - let shift = (UInt32(newValue) << RCC.BDCR.bdrst_offset) & RCC.BDCR.bdrst_mask - self.rawValue = preserve | shift - } - } - - static let rtcen_offset = UInt32(15) - static let rtcen_mask = UInt32(0b1) &<< rtcen_offset - var rtcen: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.rtcen_mask)) >> RCC.BDCR.rtcen_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.rtcen_mask - let shift = (UInt32(newValue) << RCC.BDCR.rtcen_offset) & RCC.BDCR.rtcen_mask - self.rawValue = preserve | shift - } - } - - static let rtcsel1_offset = UInt32(9) - static let rtcsel1_mask = UInt32(0b1) &<< rtcsel1_offset - var rtcsel1: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.rtcsel1_mask)) >> RCC.BDCR.rtcsel1_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.rtcsel1_mask - let shift = (UInt32(newValue) << RCC.BDCR.rtcsel1_offset) & RCC.BDCR.rtcsel1_mask - self.rawValue = preserve | shift - } - } - - static let rtcsel0_offset = UInt32(8) - static let rtcsel0_mask = UInt32(0b1) &<< rtcsel0_offset - var rtcsel0: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.rtcsel0_mask)) >> RCC.BDCR.rtcsel0_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.rtcsel0_mask - let shift = (UInt32(newValue) << RCC.BDCR.rtcsel0_offset) & RCC.BDCR.rtcsel0_mask - self.rawValue = preserve | shift - } - } - - static let lsebyp_offset = UInt32(2) - static let lsebyp_mask = UInt32(0b1) &<< lsebyp_offset - var lsebyp: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.lsebyp_mask)) >> RCC.BDCR.lsebyp_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.lsebyp_mask - let shift = (UInt32(newValue) << RCC.BDCR.lsebyp_offset) & RCC.BDCR.lsebyp_mask - self.rawValue = preserve | shift - } - } - - static let lserdy_offset = UInt32(1) - static let lserdy_mask = UInt32(0b1) &<< lserdy_offset - var lserdy: UInt8 { - UInt8((self.rawValue & (RCC.BDCR.lserdy_mask)) >> RCC.BDCR.lserdy_offset) - } - - static let lseon_offset = UInt32(0) - static let lseon_mask = UInt32(0b1) &<< lseon_offset - var lseon: UInt8 { - get { UInt8((self.rawValue & (RCC.BDCR.lseon_mask)) >> RCC.BDCR.lseon_offset) } - set { - let preserve = self.rawValue & ~RCC.BDCR.lseon_mask - let shift = (UInt32(newValue) << RCC.BDCR.lseon_offset) & RCC.BDCR.lseon_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct CSR { - var rawValue: UInt32 - - static let lpwrrstf_offset = UInt32(31) - static let lpwrrstf_mask = UInt32(0b1) &<< lpwrrstf_offset - var lpwrrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.lpwrrstf_mask)) >> RCC.CSR.lpwrrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.lpwrrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.lpwrrstf_offset) & RCC.CSR.lpwrrstf_mask - self.rawValue = preserve | shift - } - } - - static let wwdgrstf_offset = UInt32(30) - static let wwdgrstf_mask = UInt32(0b1) &<< wwdgrstf_offset - var wwdgrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.wwdgrstf_mask)) >> RCC.CSR.wwdgrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.wwdgrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.wwdgrstf_offset) & RCC.CSR.wwdgrstf_mask - self.rawValue = preserve | shift - } - } - - static let wdgrstf_offset = UInt32(29) - static let wdgrstf_mask = UInt32(0b1) &<< wdgrstf_offset - var wdgrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.wdgrstf_mask)) >> RCC.CSR.wdgrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.wdgrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.wdgrstf_offset) & RCC.CSR.wdgrstf_mask - self.rawValue = preserve | shift - } - } - - static let sftrstf_offset = UInt32(28) - static let sftrstf_mask = UInt32(0b1) &<< sftrstf_offset - var sftrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.sftrstf_mask)) >> RCC.CSR.sftrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.sftrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.sftrstf_offset) & RCC.CSR.sftrstf_mask - self.rawValue = preserve | shift - } - } - - static let porrstf_offset = UInt32(27) - static let porrstf_mask = UInt32(0b1) &<< porrstf_offset - var porrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.porrstf_mask)) >> RCC.CSR.porrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.porrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.porrstf_offset) & RCC.CSR.porrstf_mask - self.rawValue = preserve | shift - } - } - - static let padrstf_offset = UInt32(26) - static let padrstf_mask = UInt32(0b1) &<< padrstf_offset - var padrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.padrstf_mask)) >> RCC.CSR.padrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.padrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.padrstf_offset) & RCC.CSR.padrstf_mask - self.rawValue = preserve | shift - } - } - - static let borrstf_offset = UInt32(25) - static let borrstf_mask = UInt32(0b1) &<< borrstf_offset - var borrstf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.borrstf_mask)) >> RCC.CSR.borrstf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.borrstf_mask - let shift = (UInt32(newValue) << RCC.CSR.borrstf_offset) & RCC.CSR.borrstf_mask - self.rawValue = preserve | shift - } - } - - static let rmvf_offset = UInt32(24) - static let rmvf_mask = UInt32(0b1) &<< rmvf_offset - var rmvf: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.rmvf_mask)) >> RCC.CSR.rmvf_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.rmvf_mask - let shift = (UInt32(newValue) << RCC.CSR.rmvf_offset) & RCC.CSR.rmvf_mask - self.rawValue = preserve | shift - } - } - - static let lsirdy_offset = UInt32(1) - static let lsirdy_mask = UInt32(0b1) &<< lsirdy_offset - var lsirdy: UInt8 { - UInt8((self.rawValue & (RCC.CSR.lsirdy_mask)) >> RCC.CSR.lsirdy_offset) - } - - static let lsion_offset = UInt32(0) - static let lsion_mask = UInt32(0b1) &<< lsion_offset - var lsion: UInt8 { - get { UInt8((self.rawValue & (RCC.CSR.lsion_mask)) >> RCC.CSR.lsion_offset) } - set { - let preserve = self.rawValue & ~RCC.CSR.lsion_mask - let shift = (UInt32(newValue) << RCC.CSR.lsion_offset) & RCC.CSR.lsion_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct SSCGR { - var rawValue: UInt32 - - static let sscgen_offset = UInt32(31) - static let sscgen_mask = UInt32(0b1) &<< sscgen_offset - var sscgen: UInt8 { - get { UInt8((self.rawValue & (RCC.SSCGR.sscgen_mask)) >> RCC.SSCGR.sscgen_offset) } - set { - let preserve = self.rawValue & ~RCC.SSCGR.sscgen_mask - let shift = (UInt32(newValue) << RCC.SSCGR.sscgen_offset) & RCC.SSCGR.sscgen_mask - self.rawValue = preserve | shift - } - } - - static let spreadsel_offset = UInt32(30) - static let spreadsel_mask = UInt32(0b1) &<< spreadsel_offset - var spreadsel: UInt8 { - get { UInt8((self.rawValue & (RCC.SSCGR.spreadsel_mask)) >> RCC.SSCGR.spreadsel_offset) } - set { - let preserve = self.rawValue & ~RCC.SSCGR.spreadsel_mask - let shift = (UInt32(newValue) << RCC.SSCGR.spreadsel_offset) & RCC.SSCGR.spreadsel_mask - self.rawValue = preserve | shift - } - } - - static let incstep_offset = UInt32(13) - static let incstep_mask = UInt32(0b111111111111111) &<< incstep_offset - var incstep: UInt16 { - get { UInt16((self.rawValue & (RCC.SSCGR.incstep_mask)) >> RCC.SSCGR.incstep_offset) } - set { - let preserve = self.rawValue & ~RCC.SSCGR.incstep_mask - let shift = (UInt32(newValue) << RCC.SSCGR.incstep_offset) & RCC.SSCGR.incstep_mask - self.rawValue = preserve | shift - } - } - - static let modper_offset = UInt32(0) - static let modper_mask = UInt32(0b1111111111111) &<< modper_offset - var modper: UInt16 { - get { UInt16((self.rawValue & (RCC.SSCGR.modper_mask)) >> RCC.SSCGR.modper_offset) } - set { - let preserve = self.rawValue & ~RCC.SSCGR.modper_mask - let shift = (UInt32(newValue) << RCC.SSCGR.modper_offset) & RCC.SSCGR.modper_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct PLLI2SCFGR { - var rawValue: UInt32 - - static let plli2sr_offset = UInt32(28) - static let plli2sr_mask = UInt32(0b111) &<< plli2sr_offset - var plli2sr: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLI2SCFGR.plli2sr_mask)) >> RCC.PLLI2SCFGR.plli2sr_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLI2SCFGR.plli2sr_mask - let shift = (UInt32(newValue) << RCC.PLLI2SCFGR.plli2sr_offset) & RCC.PLLI2SCFGR.plli2sr_mask - self.rawValue = preserve | shift - } - } - - static let plli2sq_offset = UInt32(24) - static let plli2sq_mask = UInt32(0b1111) &<< plli2sq_offset - var plli2sq: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLI2SCFGR.plli2sq_mask)) >> RCC.PLLI2SCFGR.plli2sq_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLI2SCFGR.plli2sq_mask - let shift = (UInt32(newValue) << RCC.PLLI2SCFGR.plli2sq_offset) & RCC.PLLI2SCFGR.plli2sq_mask - self.rawValue = preserve | shift - } - } - - static let plli2sn_offset = UInt32(6) - static let plli2sn_mask = UInt32(0b111111111) &<< plli2sn_offset - var plli2sn: UInt16 { - get { UInt16((self.rawValue & (RCC.PLLI2SCFGR.plli2sn_mask)) >> RCC.PLLI2SCFGR.plli2sn_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLI2SCFGR.plli2sn_mask - let shift = (UInt32(newValue) << RCC.PLLI2SCFGR.plli2sn_offset) & RCC.PLLI2SCFGR.plli2sn_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct PLLSAICFGR { - var rawValue: UInt32 - - static let pllsain_offset = UInt32(6) - static let pllsain_mask = UInt32(0b111111111) &<< pllsain_offset - var pllsain: UInt16 { - get { UInt16((self.rawValue & (RCC.PLLSAICFGR.pllsain_mask)) >> RCC.PLLSAICFGR.pllsain_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLSAICFGR.pllsain_mask - let shift = (UInt32(newValue) << RCC.PLLSAICFGR.pllsain_offset) & RCC.PLLSAICFGR.pllsain_mask - self.rawValue = preserve | shift - } - } - - static let pllsaip_offset = UInt32(16) - static let pllsaip_mask = UInt32(0b11) &<< pllsaip_offset - var pllsaip: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLSAICFGR.pllsaip_mask)) >> RCC.PLLSAICFGR.pllsaip_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLSAICFGR.pllsaip_mask - let shift = (UInt32(newValue) << RCC.PLLSAICFGR.pllsaip_offset) & RCC.PLLSAICFGR.pllsaip_mask - self.rawValue = preserve | shift - } - } - - static let pllsaiq_offset = UInt32(24) - static let pllsaiq_mask = UInt32(0b1111) &<< pllsaiq_offset - var pllsaiq: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLSAICFGR.pllsaiq_mask)) >> RCC.PLLSAICFGR.pllsaiq_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLSAICFGR.pllsaiq_mask - let shift = (UInt32(newValue) << RCC.PLLSAICFGR.pllsaiq_offset) & RCC.PLLSAICFGR.pllsaiq_mask - self.rawValue = preserve | shift - } - } - - static let pllsair_offset = UInt32(28) - static let pllsair_mask = UInt32(0b111) &<< pllsair_offset - var pllsair: UInt8 { - get { UInt8((self.rawValue & (RCC.PLLSAICFGR.pllsair_mask)) >> RCC.PLLSAICFGR.pllsair_offset) } - set { - let preserve = self.rawValue & ~RCC.PLLSAICFGR.pllsair_mask - let shift = (UInt32(newValue) << RCC.PLLSAICFGR.pllsair_offset) & RCC.PLLSAICFGR.pllsair_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct DKCFGR1 { - var rawValue: UInt32 - - static let plli2sdiv_offset = UInt32(0) - static let plli2sdiv_mask = UInt32(0b11111) &<< plli2sdiv_offset - var plli2sdiv: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.plli2sdiv_mask)) >> RCC.DKCFGR1.plli2sdiv_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.plli2sdiv_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.plli2sdiv_offset) & RCC.DKCFGR1.plli2sdiv_mask - self.rawValue = preserve | shift - } - } - - static let pllsaidivq_offset = UInt32(8) - static let pllsaidivq_mask = UInt32(0b11111) &<< pllsaidivq_offset - var pllsaidivq: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.pllsaidivq_mask)) >> RCC.DKCFGR1.pllsaidivq_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.pllsaidivq_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.pllsaidivq_offset) & RCC.DKCFGR1.pllsaidivq_mask - self.rawValue = preserve | shift - } - } - - static let pllsaidivr_offset = UInt32(16) - static let pllsaidivr_mask = UInt32(0b11) &<< pllsaidivr_offset - var pllsaidivr: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.pllsaidivr_mask)) >> RCC.DKCFGR1.pllsaidivr_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.pllsaidivr_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.pllsaidivr_offset) & RCC.DKCFGR1.pllsaidivr_mask - self.rawValue = preserve | shift - } - } - - static let sai1sel_offset = UInt32(20) - static let sai1sel_mask = UInt32(0b11) &<< sai1sel_offset - var sai1sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.sai1sel_mask)) >> RCC.DKCFGR1.sai1sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.sai1sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.sai1sel_offset) & RCC.DKCFGR1.sai1sel_mask - self.rawValue = preserve | shift - } - } - - static let sai2sel_offset = UInt32(22) - static let sai2sel_mask = UInt32(0b11) &<< sai2sel_offset - var sai2sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.sai2sel_mask)) >> RCC.DKCFGR1.sai2sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.sai2sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.sai2sel_offset) & RCC.DKCFGR1.sai2sel_mask - self.rawValue = preserve | shift - } - } - - static let timpre_offset = UInt32(24) - static let timpre_mask = UInt32(0b1) &<< timpre_offset - var timpre: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR1.timpre_mask)) >> RCC.DKCFGR1.timpre_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR1.timpre_mask - let shift = (UInt32(newValue) << RCC.DKCFGR1.timpre_offset) & RCC.DKCFGR1.timpre_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct DKCFGR2 { - var rawValue: UInt32 - - static let usart1sel_offset = UInt32(0) - static let usart1sel_mask = UInt32(0b11) &<< usart1sel_offset - var usart1sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.usart1sel_mask)) >> RCC.DKCFGR2.usart1sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.usart1sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.usart1sel_offset) & RCC.DKCFGR2.usart1sel_mask - self.rawValue = preserve | shift - } - } - - static let usart2sel_offset = UInt32(2) - static let usart2sel_mask = UInt32(0b11) &<< usart2sel_offset - var usart2sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.usart2sel_mask)) >> RCC.DKCFGR2.usart2sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.usart2sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.usart2sel_offset) & RCC.DKCFGR2.usart2sel_mask - self.rawValue = preserve | shift - } - } - - static let usart3sel_offset = UInt32(4) - static let usart3sel_mask = UInt32(0b11) &<< usart3sel_offset - var usart3sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.usart3sel_mask)) >> RCC.DKCFGR2.usart3sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.usart3sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.usart3sel_offset) & RCC.DKCFGR2.usart3sel_mask - self.rawValue = preserve | shift - } - } - - static let uart4sel_offset = UInt32(6) - static let uart4sel_mask = UInt32(0b11) &<< uart4sel_offset - var uart4sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.uart4sel_mask)) >> RCC.DKCFGR2.uart4sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.uart4sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.uart4sel_offset) & RCC.DKCFGR2.uart4sel_mask - self.rawValue = preserve | shift - } - } - - static let uart5sel_offset = UInt32(8) - static let uart5sel_mask = UInt32(0b11) &<< uart5sel_offset - var uart5sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.uart5sel_mask)) >> RCC.DKCFGR2.uart5sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.uart5sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.uart5sel_offset) & RCC.DKCFGR2.uart5sel_mask - self.rawValue = preserve | shift - } - } - - static let usart6sel_offset = UInt32(10) - static let usart6sel_mask = UInt32(0b11) &<< usart6sel_offset - var usart6sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.usart6sel_mask)) >> RCC.DKCFGR2.usart6sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.usart6sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.usart6sel_offset) & RCC.DKCFGR2.usart6sel_mask - self.rawValue = preserve | shift - } - } - - static let uart7sel_offset = UInt32(12) - static let uart7sel_mask = UInt32(0b11) &<< uart7sel_offset - var uart7sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.uart7sel_mask)) >> RCC.DKCFGR2.uart7sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.uart7sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.uart7sel_offset) & RCC.DKCFGR2.uart7sel_mask - self.rawValue = preserve | shift - } - } - - static let uart8sel_offset = UInt32(14) - static let uart8sel_mask = UInt32(0b11) &<< uart8sel_offset - var uart8sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.uart8sel_mask)) >> RCC.DKCFGR2.uart8sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.uart8sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.uart8sel_offset) & RCC.DKCFGR2.uart8sel_mask - self.rawValue = preserve | shift - } - } - - static let i2c1sel_offset = UInt32(16) - static let i2c1sel_mask = UInt32(0b11) &<< i2c1sel_offset - var i2c1sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.i2c1sel_mask)) >> RCC.DKCFGR2.i2c1sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.i2c1sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.i2c1sel_offset) & RCC.DKCFGR2.i2c1sel_mask - self.rawValue = preserve | shift - } - } - - static let i2c2sel_offset = UInt32(18) - static let i2c2sel_mask = UInt32(0b11) &<< i2c2sel_offset - var i2c2sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.i2c2sel_mask)) >> RCC.DKCFGR2.i2c2sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.i2c2sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.i2c2sel_offset) & RCC.DKCFGR2.i2c2sel_mask - self.rawValue = preserve | shift - } - } - - static let i2c3sel_offset = UInt32(20) - static let i2c3sel_mask = UInt32(0b11) &<< i2c3sel_offset - var i2c3sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.i2c3sel_mask)) >> RCC.DKCFGR2.i2c3sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.i2c3sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.i2c3sel_offset) & RCC.DKCFGR2.i2c3sel_mask - self.rawValue = preserve | shift - } - } - - static let i2c4sel_offset = UInt32(22) - static let i2c4sel_mask = UInt32(0b11) &<< i2c4sel_offset - var i2c4sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.i2c4sel_mask)) >> RCC.DKCFGR2.i2c4sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.i2c4sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.i2c4sel_offset) & RCC.DKCFGR2.i2c4sel_mask - self.rawValue = preserve | shift - } - } - - static let lptim1sel_offset = UInt32(24) - static let lptim1sel_mask = UInt32(0b11) &<< lptim1sel_offset - var lptim1sel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.lptim1sel_mask)) >> RCC.DKCFGR2.lptim1sel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.lptim1sel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.lptim1sel_offset) & RCC.DKCFGR2.lptim1sel_mask - self.rawValue = preserve | shift - } - } - - static let cecsel_offset = UInt32(26) - static let cecsel_mask = UInt32(0b1) &<< cecsel_offset - var cecsel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.cecsel_mask)) >> RCC.DKCFGR2.cecsel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.cecsel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.cecsel_offset) & RCC.DKCFGR2.cecsel_mask - self.rawValue = preserve | shift - } - } - - static let ck48msel_offset = UInt32(27) - static let ck48msel_mask = UInt32(0b1) &<< ck48msel_offset - var ck48msel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.ck48msel_mask)) >> RCC.DKCFGR2.ck48msel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.ck48msel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.ck48msel_offset) & RCC.DKCFGR2.ck48msel_mask - self.rawValue = preserve | shift - } - } - - static let sdmmcsel_offset = UInt32(28) - static let sdmmcsel_mask = UInt32(0b1) &<< sdmmcsel_offset - var sdmmcsel: UInt8 { - get { UInt8((self.rawValue & (RCC.DKCFGR2.sdmmcsel_mask)) >> RCC.DKCFGR2.sdmmcsel_offset) } - set { - let preserve = self.rawValue & ~RCC.DKCFGR2.sdmmcsel_mask - let shift = (UInt32(newValue) << RCC.DKCFGR2.sdmmcsel_offset) & RCC.DKCFGR2.sdmmcsel_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } -} diff --git a/stm32-lcd-logo/Support/USART.swift b/stm32-lcd-logo/Support/USART.swift deleted file mode 100644 index cba4e102..00000000 --- a/stm32-lcd-logo/Support/USART.swift +++ /dev/null @@ -1,1291 +0,0 @@ -//===----------------------------------------------------------------------===// -// -// This source file is part of the Swift open source project -// -// Copyright (c) 2023 Apple Inc. and the Swift project authors. -// Licensed under Apache License v2.0 with Runtime Library Exception -// -// See https://swift.org/LICENSE.txt for license information -// -//===----------------------------------------------------------------------===// - -// swift-format-ignore-file - -/// Universal synchronous asynchronous receiver transmitter -struct USART { - var baseAddress: UnsafeMutableRawPointer - - enum Offsets { - static let CR1: Int32 = 0x0 - static let CR2: Int32 = 0x4 - static let CR3: Int32 = 0x8 - static let BRR: Int32 = 0xc - static let GTPR: Int32 = 0x10 - static let RTOR: Int32 = 0x14 - static let RQR: Int32 = 0x18 - static let ISR: Int32 = 0x1c - static let ICR: Int32 = 0x20 - static let RDR: Int32 = 0x24 - static let TDR: Int32 = 0x28 - } - - private func ld(_ offset: Int32) -> UInt32 { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileLoad() - } - - private func st(_ offset: Int32, _ value: UInt32) { - UnsafeMutablePointer(bitPattern: UInt(bitPattern: UnsafeMutableRawPointer(baseAddress).advanced(by: Int(offset))))!.volatileStore(value) - } - - /// Control register 1 - var cr1: CR1 { - get { CR1(rawValue: ld(Offsets.CR1)) } - set { st(Offsets.CR1, newValue.rawValue) } - } - /// Control register 2 - var cr2: CR2 { - get { CR2(rawValue: ld(Offsets.CR2)) } - set { st(Offsets.CR2, newValue.rawValue) } - } - /// Control register 3 - var cr3: CR3 { - get { CR3(rawValue: ld(Offsets.CR3)) } - set { st(Offsets.CR3, newValue.rawValue) } - } - /// Baud rate register - var brr: BRR { - get { BRR(rawValue: ld(Offsets.BRR)) } - set { st(Offsets.BRR, newValue.rawValue) } - } - /// Guard time and prescaler register - var gtpr: GTPR { - get { GTPR(rawValue: ld(Offsets.GTPR)) } - set { st(Offsets.GTPR, newValue.rawValue) } - } - /// Receiver timeout register - var rtor: RTOR { - get { RTOR(rawValue: ld(Offsets.RTOR)) } - set { st(Offsets.RTOR, newValue.rawValue) } - } - /// Request register - var rqr: RQR { - get { RQR(rawValue: ld(Offsets.RQR)) } - set { st(Offsets.RQR, newValue.rawValue) } - } - /// Interrupt & status register - var isr: ISR { - get { ISR(rawValue: ld(Offsets.ISR)) } - set { st(Offsets.ISR, newValue.rawValue) } - } - /// Interrupt flag clear register - var icr: ICR { - get { ICR(rawValue: ld(Offsets.ICR)) } - set { st(Offsets.ICR, newValue.rawValue) } - } - /// Receive data register - var rdr: RDR { - get { RDR(rawValue: ld(Offsets.RDR)) } - set { st(Offsets.RDR, newValue.rawValue) } - } - /// Transmit data register - var tdr: TDR { - get { TDR(rawValue: ld(Offsets.TDR)) } - set { st(Offsets.TDR, newValue.rawValue) } - } -} - -extension USART { - struct CR1 { - var rawValue: UInt32 - - static let m1_offset = UInt32(28) - static let m1_mask = UInt32(0b1) &<< m1_offset - var m1: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.m1_mask)) >> USART.CR1.m1_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.m1_mask - let shift = (UInt32(newValue) << USART.CR1.m1_offset) & USART.CR1.m1_mask - self.rawValue = preserve | shift - } - } - - static let eobie_offset = UInt32(27) - static let eobie_mask = UInt32(0b1) &<< eobie_offset - var eobie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.eobie_mask)) >> USART.CR1.eobie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.eobie_mask - let shift = (UInt32(newValue) << USART.CR1.eobie_offset) & USART.CR1.eobie_mask - self.rawValue = preserve | shift - } - } - - static let rtoie_offset = UInt32(26) - static let rtoie_mask = UInt32(0b1) &<< rtoie_offset - var rtoie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.rtoie_mask)) >> USART.CR1.rtoie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.rtoie_mask - let shift = (UInt32(newValue) << USART.CR1.rtoie_offset) & USART.CR1.rtoie_mask - self.rawValue = preserve | shift - } - } - - static let deat4_offset = UInt32(25) - static let deat4_mask = UInt32(0b1) &<< deat4_offset - var deat4: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.deat4_mask)) >> USART.CR1.deat4_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.deat4_mask - let shift = (UInt32(newValue) << USART.CR1.deat4_offset) & USART.CR1.deat4_mask - self.rawValue = preserve | shift - } - } - - static let deat3_offset = UInt32(24) - static let deat3_mask = UInt32(0b1) &<< deat3_offset - var deat3: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.deat3_mask)) >> USART.CR1.deat3_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.deat3_mask - let shift = (UInt32(newValue) << USART.CR1.deat3_offset) & USART.CR1.deat3_mask - self.rawValue = preserve | shift - } - } - - static let deat2_offset = UInt32(23) - static let deat2_mask = UInt32(0b1) &<< deat2_offset - var deat2: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.deat2_mask)) >> USART.CR1.deat2_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.deat2_mask - let shift = (UInt32(newValue) << USART.CR1.deat2_offset) & USART.CR1.deat2_mask - self.rawValue = preserve | shift - } - } - - static let deat1_offset = UInt32(22) - static let deat1_mask = UInt32(0b1) &<< deat1_offset - var deat1: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.deat1_mask)) >> USART.CR1.deat1_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.deat1_mask - let shift = (UInt32(newValue) << USART.CR1.deat1_offset) & USART.CR1.deat1_mask - self.rawValue = preserve | shift - } - } - - static let deat0_offset = UInt32(21) - static let deat0_mask = UInt32(0b1) &<< deat0_offset - var deat0: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.deat0_mask)) >> USART.CR1.deat0_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.deat0_mask - let shift = (UInt32(newValue) << USART.CR1.deat0_offset) & USART.CR1.deat0_mask - self.rawValue = preserve | shift - } - } - - static let dedt4_offset = UInt32(20) - static let dedt4_mask = UInt32(0b1) &<< dedt4_offset - var dedt4: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.dedt4_mask)) >> USART.CR1.dedt4_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.dedt4_mask - let shift = (UInt32(newValue) << USART.CR1.dedt4_offset) & USART.CR1.dedt4_mask - self.rawValue = preserve | shift - } - } - - static let dedt3_offset = UInt32(19) - static let dedt3_mask = UInt32(0b1) &<< dedt3_offset - var dedt3: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.dedt3_mask)) >> USART.CR1.dedt3_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.dedt3_mask - let shift = (UInt32(newValue) << USART.CR1.dedt3_offset) & USART.CR1.dedt3_mask - self.rawValue = preserve | shift - } - } - - static let dedt2_offset = UInt32(18) - static let dedt2_mask = UInt32(0b1) &<< dedt2_offset - var dedt2: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.dedt2_mask)) >> USART.CR1.dedt2_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.dedt2_mask - let shift = (UInt32(newValue) << USART.CR1.dedt2_offset) & USART.CR1.dedt2_mask - self.rawValue = preserve | shift - } - } - - static let dedt1_offset = UInt32(17) - static let dedt1_mask = UInt32(0b1) &<< dedt1_offset - var dedt1: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.dedt1_mask)) >> USART.CR1.dedt1_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.dedt1_mask - let shift = (UInt32(newValue) << USART.CR1.dedt1_offset) & USART.CR1.dedt1_mask - self.rawValue = preserve | shift - } - } - - static let dedt0_offset = UInt32(16) - static let dedt0_mask = UInt32(0b1) &<< dedt0_offset - var dedt0: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.dedt0_mask)) >> USART.CR1.dedt0_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.dedt0_mask - let shift = (UInt32(newValue) << USART.CR1.dedt0_offset) & USART.CR1.dedt0_mask - self.rawValue = preserve | shift - } - } - - static let over8_offset = UInt32(15) - static let over8_mask = UInt32(0b1) &<< over8_offset - var over8: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.over8_mask)) >> USART.CR1.over8_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.over8_mask - let shift = (UInt32(newValue) << USART.CR1.over8_offset) & USART.CR1.over8_mask - self.rawValue = preserve | shift - } - } - - static let cmie_offset = UInt32(14) - static let cmie_mask = UInt32(0b1) &<< cmie_offset - var cmie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.cmie_mask)) >> USART.CR1.cmie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.cmie_mask - let shift = (UInt32(newValue) << USART.CR1.cmie_offset) & USART.CR1.cmie_mask - self.rawValue = preserve | shift - } - } - - static let mme_offset = UInt32(13) - static let mme_mask = UInt32(0b1) &<< mme_offset - var mme: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.mme_mask)) >> USART.CR1.mme_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.mme_mask - let shift = (UInt32(newValue) << USART.CR1.mme_offset) & USART.CR1.mme_mask - self.rawValue = preserve | shift - } - } - - static let m0_offset = UInt32(12) - static let m0_mask = UInt32(0b1) &<< m0_offset - var m0: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.m0_mask)) >> USART.CR1.m0_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.m0_mask - let shift = (UInt32(newValue) << USART.CR1.m0_offset) & USART.CR1.m0_mask - self.rawValue = preserve | shift - } - } - - static let wake_offset = UInt32(11) - static let wake_mask = UInt32(0b1) &<< wake_offset - var wake: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.wake_mask)) >> USART.CR1.wake_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.wake_mask - let shift = (UInt32(newValue) << USART.CR1.wake_offset) & USART.CR1.wake_mask - self.rawValue = preserve | shift - } - } - - static let pce_offset = UInt32(10) - static let pce_mask = UInt32(0b1) &<< pce_offset - var pce: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.pce_mask)) >> USART.CR1.pce_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.pce_mask - let shift = (UInt32(newValue) << USART.CR1.pce_offset) & USART.CR1.pce_mask - self.rawValue = preserve | shift - } - } - - static let ps_offset = UInt32(9) - static let ps_mask = UInt32(0b1) &<< ps_offset - var ps: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.ps_mask)) >> USART.CR1.ps_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.ps_mask - let shift = (UInt32(newValue) << USART.CR1.ps_offset) & USART.CR1.ps_mask - self.rawValue = preserve | shift - } - } - - static let peie_offset = UInt32(8) - static let peie_mask = UInt32(0b1) &<< peie_offset - var peie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.peie_mask)) >> USART.CR1.peie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.peie_mask - let shift = (UInt32(newValue) << USART.CR1.peie_offset) & USART.CR1.peie_mask - self.rawValue = preserve | shift - } - } - - static let txeie_offset = UInt32(7) - static let txeie_mask = UInt32(0b1) &<< txeie_offset - var txeie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.txeie_mask)) >> USART.CR1.txeie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.txeie_mask - let shift = (UInt32(newValue) << USART.CR1.txeie_offset) & USART.CR1.txeie_mask - self.rawValue = preserve | shift - } - } - - static let tcie_offset = UInt32(6) - static let tcie_mask = UInt32(0b1) &<< tcie_offset - var tcie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.tcie_mask)) >> USART.CR1.tcie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.tcie_mask - let shift = (UInt32(newValue) << USART.CR1.tcie_offset) & USART.CR1.tcie_mask - self.rawValue = preserve | shift - } - } - - static let rxneie_offset = UInt32(5) - static let rxneie_mask = UInt32(0b1) &<< rxneie_offset - var rxneie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.rxneie_mask)) >> USART.CR1.rxneie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.rxneie_mask - let shift = (UInt32(newValue) << USART.CR1.rxneie_offset) & USART.CR1.rxneie_mask - self.rawValue = preserve | shift - } - } - - static let idleie_offset = UInt32(4) - static let idleie_mask = UInt32(0b1) &<< idleie_offset - var idleie: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.idleie_mask)) >> USART.CR1.idleie_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.idleie_mask - let shift = (UInt32(newValue) << USART.CR1.idleie_offset) & USART.CR1.idleie_mask - self.rawValue = preserve | shift - } - } - - static let te_offset = UInt32(3) - static let te_mask = UInt32(0b1) &<< te_offset - var te: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.te_mask)) >> USART.CR1.te_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.te_mask - let shift = (UInt32(newValue) << USART.CR1.te_offset) & USART.CR1.te_mask - self.rawValue = preserve | shift - } - } - - static let re_offset = UInt32(2) - static let re_mask = UInt32(0b1) &<< re_offset - var re: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.re_mask)) >> USART.CR1.re_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.re_mask - let shift = (UInt32(newValue) << USART.CR1.re_offset) & USART.CR1.re_mask - self.rawValue = preserve | shift - } - } - - static let uesm_offset = UInt32(1) - static let uesm_mask = UInt32(0b1) &<< uesm_offset - var uesm: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.uesm_mask)) >> USART.CR1.uesm_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.uesm_mask - let shift = (UInt32(newValue) << USART.CR1.uesm_offset) & USART.CR1.uesm_mask - self.rawValue = preserve | shift - } - } - - static let ue_offset = UInt32(0) - static let ue_mask = UInt32(0b1) &<< ue_offset - var ue: UInt8 { - get { UInt8((self.rawValue & (USART.CR1.ue_mask)) >> USART.CR1.ue_offset) } - set { - let preserve = self.rawValue & ~USART.CR1.ue_mask - let shift = (UInt32(newValue) << USART.CR1.ue_offset) & USART.CR1.ue_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct CR2 { - var rawValue: UInt32 - - static let add4_7_offset = UInt32(28) - static let add4_7_mask = UInt32(0b1111) &<< add4_7_offset - var add4_7: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.add4_7_mask)) >> USART.CR2.add4_7_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.add4_7_mask - let shift = (UInt32(newValue) << USART.CR2.add4_7_offset) & USART.CR2.add4_7_mask - self.rawValue = preserve | shift - } - } - - static let add0_3_offset = UInt32(24) - static let add0_3_mask = UInt32(0b1111) &<< add0_3_offset - var add0_3: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.add0_3_mask)) >> USART.CR2.add0_3_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.add0_3_mask - let shift = (UInt32(newValue) << USART.CR2.add0_3_offset) & USART.CR2.add0_3_mask - self.rawValue = preserve | shift - } - } - - static let rtoen_offset = UInt32(23) - static let rtoen_mask = UInt32(0b1) &<< rtoen_offset - var rtoen: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.rtoen_mask)) >> USART.CR2.rtoen_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.rtoen_mask - let shift = (UInt32(newValue) << USART.CR2.rtoen_offset) & USART.CR2.rtoen_mask - self.rawValue = preserve | shift - } - } - - static let abrmod1_offset = UInt32(22) - static let abrmod1_mask = UInt32(0b1) &<< abrmod1_offset - var abrmod1: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.abrmod1_mask)) >> USART.CR2.abrmod1_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.abrmod1_mask - let shift = (UInt32(newValue) << USART.CR2.abrmod1_offset) & USART.CR2.abrmod1_mask - self.rawValue = preserve | shift - } - } - - static let abrmod0_offset = UInt32(21) - static let abrmod0_mask = UInt32(0b1) &<< abrmod0_offset - var abrmod0: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.abrmod0_mask)) >> USART.CR2.abrmod0_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.abrmod0_mask - let shift = (UInt32(newValue) << USART.CR2.abrmod0_offset) & USART.CR2.abrmod0_mask - self.rawValue = preserve | shift - } - } - - static let abren_offset = UInt32(20) - static let abren_mask = UInt32(0b1) &<< abren_offset - var abren: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.abren_mask)) >> USART.CR2.abren_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.abren_mask - let shift = (UInt32(newValue) << USART.CR2.abren_offset) & USART.CR2.abren_mask - self.rawValue = preserve | shift - } - } - - static let msbfirst_offset = UInt32(19) - static let msbfirst_mask = UInt32(0b1) &<< msbfirst_offset - var msbfirst: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.msbfirst_mask)) >> USART.CR2.msbfirst_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.msbfirst_mask - let shift = (UInt32(newValue) << USART.CR2.msbfirst_offset) & USART.CR2.msbfirst_mask - self.rawValue = preserve | shift - } - } - - static let tainv_offset = UInt32(18) - static let tainv_mask = UInt32(0b1) &<< tainv_offset - var tainv: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.tainv_mask)) >> USART.CR2.tainv_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.tainv_mask - let shift = (UInt32(newValue) << USART.CR2.tainv_offset) & USART.CR2.tainv_mask - self.rawValue = preserve | shift - } - } - - static let txinv_offset = UInt32(17) - static let txinv_mask = UInt32(0b1) &<< txinv_offset - var txinv: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.txinv_mask)) >> USART.CR2.txinv_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.txinv_mask - let shift = (UInt32(newValue) << USART.CR2.txinv_offset) & USART.CR2.txinv_mask - self.rawValue = preserve | shift - } - } - - static let rxinv_offset = UInt32(16) - static let rxinv_mask = UInt32(0b1) &<< rxinv_offset - var rxinv: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.rxinv_mask)) >> USART.CR2.rxinv_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.rxinv_mask - let shift = (UInt32(newValue) << USART.CR2.rxinv_offset) & USART.CR2.rxinv_mask - self.rawValue = preserve | shift - } - } - - static let swap_offset = UInt32(15) - static let swap_mask = UInt32(0b1) &<< swap_offset - var swap: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.swap_mask)) >> USART.CR2.swap_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.swap_mask - let shift = (UInt32(newValue) << USART.CR2.swap_offset) & USART.CR2.swap_mask - self.rawValue = preserve | shift - } - } - - static let linen_offset = UInt32(14) - static let linen_mask = UInt32(0b1) &<< linen_offset - var linen: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.linen_mask)) >> USART.CR2.linen_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.linen_mask - let shift = (UInt32(newValue) << USART.CR2.linen_offset) & USART.CR2.linen_mask - self.rawValue = preserve | shift - } - } - - static let stop_offset = UInt32(12) - static let stop_mask = UInt32(0b11) &<< stop_offset - var stop: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.stop_mask)) >> USART.CR2.stop_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.stop_mask - let shift = (UInt32(newValue) << USART.CR2.stop_offset) & USART.CR2.stop_mask - self.rawValue = preserve | shift - } - } - - static let clken_offset = UInt32(11) - static let clken_mask = UInt32(0b1) &<< clken_offset - var clken: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.clken_mask)) >> USART.CR2.clken_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.clken_mask - let shift = (UInt32(newValue) << USART.CR2.clken_offset) & USART.CR2.clken_mask - self.rawValue = preserve | shift - } - } - - static let cpol_offset = UInt32(10) - static let cpol_mask = UInt32(0b1) &<< cpol_offset - var cpol: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.cpol_mask)) >> USART.CR2.cpol_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.cpol_mask - let shift = (UInt32(newValue) << USART.CR2.cpol_offset) & USART.CR2.cpol_mask - self.rawValue = preserve | shift - } - } - - static let cpha_offset = UInt32(9) - static let cpha_mask = UInt32(0b1) &<< cpha_offset - var cpha: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.cpha_mask)) >> USART.CR2.cpha_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.cpha_mask - let shift = (UInt32(newValue) << USART.CR2.cpha_offset) & USART.CR2.cpha_mask - self.rawValue = preserve | shift - } - } - - static let lbcl_offset = UInt32(8) - static let lbcl_mask = UInt32(0b1) &<< lbcl_offset - var lbcl: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.lbcl_mask)) >> USART.CR2.lbcl_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.lbcl_mask - let shift = (UInt32(newValue) << USART.CR2.lbcl_offset) & USART.CR2.lbcl_mask - self.rawValue = preserve | shift - } - } - - static let lbdie_offset = UInt32(6) - static let lbdie_mask = UInt32(0b1) &<< lbdie_offset - var lbdie: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.lbdie_mask)) >> USART.CR2.lbdie_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.lbdie_mask - let shift = (UInt32(newValue) << USART.CR2.lbdie_offset) & USART.CR2.lbdie_mask - self.rawValue = preserve | shift - } - } - - static let lbdl_offset = UInt32(5) - static let lbdl_mask = UInt32(0b1) &<< lbdl_offset - var lbdl: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.lbdl_mask)) >> USART.CR2.lbdl_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.lbdl_mask - let shift = (UInt32(newValue) << USART.CR2.lbdl_offset) & USART.CR2.lbdl_mask - self.rawValue = preserve | shift - } - } - - static let addm7_offset = UInt32(4) - static let addm7_mask = UInt32(0b1) &<< addm7_offset - var addm7: UInt8 { - get { UInt8((self.rawValue & (USART.CR2.addm7_mask)) >> USART.CR2.addm7_offset) } - set { - let preserve = self.rawValue & ~USART.CR2.addm7_mask - let shift = (UInt32(newValue) << USART.CR2.addm7_offset) & USART.CR2.addm7_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct CR3 { - var rawValue: UInt32 - - static let wufie_offset = UInt32(22) - static let wufie_mask = UInt32(0b1) &<< wufie_offset - var wufie: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.wufie_mask)) >> USART.CR3.wufie_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.wufie_mask - let shift = (UInt32(newValue) << USART.CR3.wufie_offset) & USART.CR3.wufie_mask - self.rawValue = preserve | shift - } - } - - static let wus_offset = UInt32(20) - static let wus_mask = UInt32(0b11) &<< wus_offset - var wus: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.wus_mask)) >> USART.CR3.wus_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.wus_mask - let shift = (UInt32(newValue) << USART.CR3.wus_offset) & USART.CR3.wus_mask - self.rawValue = preserve | shift - } - } - - static let scarcnt_offset = UInt32(17) - static let scarcnt_mask = UInt32(0b111) &<< scarcnt_offset - var scarcnt: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.scarcnt_mask)) >> USART.CR3.scarcnt_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.scarcnt_mask - let shift = (UInt32(newValue) << USART.CR3.scarcnt_offset) & USART.CR3.scarcnt_mask - self.rawValue = preserve | shift - } - } - - static let dep_offset = UInt32(15) - static let dep_mask = UInt32(0b1) &<< dep_offset - var dep: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.dep_mask)) >> USART.CR3.dep_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.dep_mask - let shift = (UInt32(newValue) << USART.CR3.dep_offset) & USART.CR3.dep_mask - self.rawValue = preserve | shift - } - } - - static let dem_offset = UInt32(14) - static let dem_mask = UInt32(0b1) &<< dem_offset - var dem: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.dem_mask)) >> USART.CR3.dem_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.dem_mask - let shift = (UInt32(newValue) << USART.CR3.dem_offset) & USART.CR3.dem_mask - self.rawValue = preserve | shift - } - } - - static let ddre_offset = UInt32(13) - static let ddre_mask = UInt32(0b1) &<< ddre_offset - var ddre: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.ddre_mask)) >> USART.CR3.ddre_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.ddre_mask - let shift = (UInt32(newValue) << USART.CR3.ddre_offset) & USART.CR3.ddre_mask - self.rawValue = preserve | shift - } - } - - static let ovrdis_offset = UInt32(12) - static let ovrdis_mask = UInt32(0b1) &<< ovrdis_offset - var ovrdis: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.ovrdis_mask)) >> USART.CR3.ovrdis_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.ovrdis_mask - let shift = (UInt32(newValue) << USART.CR3.ovrdis_offset) & USART.CR3.ovrdis_mask - self.rawValue = preserve | shift - } - } - - static let onebit_offset = UInt32(11) - static let onebit_mask = UInt32(0b1) &<< onebit_offset - var onebit: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.onebit_mask)) >> USART.CR3.onebit_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.onebit_mask - let shift = (UInt32(newValue) << USART.CR3.onebit_offset) & USART.CR3.onebit_mask - self.rawValue = preserve | shift - } - } - - static let ctsie_offset = UInt32(10) - static let ctsie_mask = UInt32(0b1) &<< ctsie_offset - var ctsie: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.ctsie_mask)) >> USART.CR3.ctsie_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.ctsie_mask - let shift = (UInt32(newValue) << USART.CR3.ctsie_offset) & USART.CR3.ctsie_mask - self.rawValue = preserve | shift - } - } - - static let ctse_offset = UInt32(9) - static let ctse_mask = UInt32(0b1) &<< ctse_offset - var ctse: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.ctse_mask)) >> USART.CR3.ctse_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.ctse_mask - let shift = (UInt32(newValue) << USART.CR3.ctse_offset) & USART.CR3.ctse_mask - self.rawValue = preserve | shift - } - } - - static let rtse_offset = UInt32(8) - static let rtse_mask = UInt32(0b1) &<< rtse_offset - var rtse: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.rtse_mask)) >> USART.CR3.rtse_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.rtse_mask - let shift = (UInt32(newValue) << USART.CR3.rtse_offset) & USART.CR3.rtse_mask - self.rawValue = preserve | shift - } - } - - static let dmat_offset = UInt32(7) - static let dmat_mask = UInt32(0b1) &<< dmat_offset - var dmat: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.dmat_mask)) >> USART.CR3.dmat_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.dmat_mask - let shift = (UInt32(newValue) << USART.CR3.dmat_offset) & USART.CR3.dmat_mask - self.rawValue = preserve | shift - } - } - - static let dmar_offset = UInt32(6) - static let dmar_mask = UInt32(0b1) &<< dmar_offset - var dmar: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.dmar_mask)) >> USART.CR3.dmar_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.dmar_mask - let shift = (UInt32(newValue) << USART.CR3.dmar_offset) & USART.CR3.dmar_mask - self.rawValue = preserve | shift - } - } - - static let scen_offset = UInt32(5) - static let scen_mask = UInt32(0b1) &<< scen_offset - var scen: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.scen_mask)) >> USART.CR3.scen_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.scen_mask - let shift = (UInt32(newValue) << USART.CR3.scen_offset) & USART.CR3.scen_mask - self.rawValue = preserve | shift - } - } - - static let nack_offset = UInt32(4) - static let nack_mask = UInt32(0b1) &<< nack_offset - var nack: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.nack_mask)) >> USART.CR3.nack_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.nack_mask - let shift = (UInt32(newValue) << USART.CR3.nack_offset) & USART.CR3.nack_mask - self.rawValue = preserve | shift - } - } - - static let hdsel_offset = UInt32(3) - static let hdsel_mask = UInt32(0b1) &<< hdsel_offset - var hdsel: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.hdsel_mask)) >> USART.CR3.hdsel_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.hdsel_mask - let shift = (UInt32(newValue) << USART.CR3.hdsel_offset) & USART.CR3.hdsel_mask - self.rawValue = preserve | shift - } - } - - static let irlp_offset = UInt32(2) - static let irlp_mask = UInt32(0b1) &<< irlp_offset - var irlp: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.irlp_mask)) >> USART.CR3.irlp_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.irlp_mask - let shift = (UInt32(newValue) << USART.CR3.irlp_offset) & USART.CR3.irlp_mask - self.rawValue = preserve | shift - } - } - - static let iren_offset = UInt32(1) - static let iren_mask = UInt32(0b1) &<< iren_offset - var iren: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.iren_mask)) >> USART.CR3.iren_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.iren_mask - let shift = (UInt32(newValue) << USART.CR3.iren_offset) & USART.CR3.iren_mask - self.rawValue = preserve | shift - } - } - - static let eie_offset = UInt32(0) - static let eie_mask = UInt32(0b1) &<< eie_offset - var eie: UInt8 { - get { UInt8((self.rawValue & (USART.CR3.eie_mask)) >> USART.CR3.eie_offset) } - set { - let preserve = self.rawValue & ~USART.CR3.eie_mask - let shift = (UInt32(newValue) << USART.CR3.eie_offset) & USART.CR3.eie_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct BRR { - var rawValue: UInt32 - - static let div_mantissa_offset = UInt32(4) - static let div_mantissa_mask = UInt32(0b111111111111) &<< div_mantissa_offset - var div_mantissa: UInt16 { - get { UInt16((self.rawValue & (USART.BRR.div_mantissa_mask)) >> USART.BRR.div_mantissa_offset) } - set { - let preserve = self.rawValue & ~USART.BRR.div_mantissa_mask - let shift = (UInt32(newValue) << USART.BRR.div_mantissa_offset) & USART.BRR.div_mantissa_mask - self.rawValue = preserve | shift - } - } - - static let div_fraction_offset = UInt32(0) - static let div_fraction_mask = UInt32(0b1111) &<< div_fraction_offset - var div_fraction: UInt8 { - get { UInt8((self.rawValue & (USART.BRR.div_fraction_mask)) >> USART.BRR.div_fraction_offset) } - set { - let preserve = self.rawValue & ~USART.BRR.div_fraction_mask - let shift = (UInt32(newValue) << USART.BRR.div_fraction_offset) & USART.BRR.div_fraction_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct GTPR { - var rawValue: UInt32 - - static let gt_offset = UInt32(8) - static let gt_mask = UInt32(0b11111111) &<< gt_offset - var gt: UInt8 { - get { UInt8((self.rawValue & (USART.GTPR.gt_mask)) >> USART.GTPR.gt_offset) } - set { - let preserve = self.rawValue & ~USART.GTPR.gt_mask - let shift = (UInt32(newValue) << USART.GTPR.gt_offset) & USART.GTPR.gt_mask - self.rawValue = preserve | shift - } - } - - static let psc_offset = UInt32(0) - static let psc_mask = UInt32(0b11111111) &<< psc_offset - var psc: UInt8 { - get { UInt8((self.rawValue & (USART.GTPR.psc_mask)) >> USART.GTPR.psc_offset) } - set { - let preserve = self.rawValue & ~USART.GTPR.psc_mask - let shift = (UInt32(newValue) << USART.GTPR.psc_offset) & USART.GTPR.psc_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct RTOR { - var rawValue: UInt32 - - static let blen_offset = UInt32(24) - static let blen_mask = UInt32(0b11111111) &<< blen_offset - var blen: UInt8 { - get { UInt8((self.rawValue & (USART.RTOR.blen_mask)) >> USART.RTOR.blen_offset) } - set { - let preserve = self.rawValue & ~USART.RTOR.blen_mask - let shift = (UInt32(newValue) << USART.RTOR.blen_offset) & USART.RTOR.blen_mask - self.rawValue = preserve | shift - } - } - - static let rto_offset = UInt32(0) - static let rto_mask = UInt32(0b111111111111111111111111) &<< rto_offset - var rto: UInt32 { - get { UInt32((self.rawValue & (USART.RTOR.rto_mask)) >> USART.RTOR.rto_offset) } - set { - let preserve = self.rawValue & ~USART.RTOR.rto_mask - let shift = (UInt32(newValue) << USART.RTOR.rto_offset) & USART.RTOR.rto_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct RQR { - var rawValue: UInt32 - - static let txfrq_offset = UInt32(4) - static let txfrq_mask = UInt32(0b1) &<< txfrq_offset - var txfrq: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.RQR.txfrq_offset) & USART.RQR.txfrq_mask - } - } - - static let rxfrq_offset = UInt32(3) - static let rxfrq_mask = UInt32(0b1) &<< rxfrq_offset - var rxfrq: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.RQR.rxfrq_offset) & USART.RQR.rxfrq_mask - } - } - - static let mmrq_offset = UInt32(2) - static let mmrq_mask = UInt32(0b1) &<< mmrq_offset - var mmrq: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.RQR.mmrq_offset) & USART.RQR.mmrq_mask - } - } - - static let sbkrq_offset = UInt32(1) - static let sbkrq_mask = UInt32(0b1) &<< sbkrq_offset - var sbkrq: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.RQR.sbkrq_offset) & USART.RQR.sbkrq_mask - } - } - - static let abrrq_offset = UInt32(0) - static let abrrq_mask = UInt32(0b1) &<< abrrq_offset - var abrrq: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.RQR.abrrq_offset) & USART.RQR.abrrq_mask - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct ISR { - var rawValue: UInt32 - - static let reack_offset = UInt32(22) - static let reack_mask = UInt32(0b1) &<< reack_offset - var reack: UInt8 { - UInt8((self.rawValue & (USART.ISR.reack_mask)) >> USART.ISR.reack_offset) - } - - static let teack_offset = UInt32(21) - static let teack_mask = UInt32(0b1) &<< teack_offset - var teack: UInt8 { - UInt8((self.rawValue & (USART.ISR.teack_mask)) >> USART.ISR.teack_offset) - } - - static let wuf_offset = UInt32(20) - static let wuf_mask = UInt32(0b1) &<< wuf_offset - var wuf: UInt8 { - UInt8((self.rawValue & (USART.ISR.wuf_mask)) >> USART.ISR.wuf_offset) - } - - static let rwu_offset = UInt32(19) - static let rwu_mask = UInt32(0b1) &<< rwu_offset - var rwu: UInt8 { - UInt8((self.rawValue & (USART.ISR.rwu_mask)) >> USART.ISR.rwu_offset) - } - - static let sbkf_offset = UInt32(18) - static let sbkf_mask = UInt32(0b1) &<< sbkf_offset - var sbkf: UInt8 { - UInt8((self.rawValue & (USART.ISR.sbkf_mask)) >> USART.ISR.sbkf_offset) - } - - static let cmf_offset = UInt32(17) - static let cmf_mask = UInt32(0b1) &<< cmf_offset - var cmf: UInt8 { - UInt8((self.rawValue & (USART.ISR.cmf_mask)) >> USART.ISR.cmf_offset) - } - - static let busy_offset = UInt32(16) - static let busy_mask = UInt32(0b1) &<< busy_offset - var busy: UInt8 { - UInt8((self.rawValue & (USART.ISR.busy_mask)) >> USART.ISR.busy_offset) - } - - static let abrf_offset = UInt32(15) - static let abrf_mask = UInt32(0b1) &<< abrf_offset - var abrf: UInt8 { - UInt8((self.rawValue & (USART.ISR.abrf_mask)) >> USART.ISR.abrf_offset) - } - - static let abre_offset = UInt32(14) - static let abre_mask = UInt32(0b1) &<< abre_offset - var abre: UInt8 { - UInt8((self.rawValue & (USART.ISR.abre_mask)) >> USART.ISR.abre_offset) - } - - static let eobf_offset = UInt32(12) - static let eobf_mask = UInt32(0b1) &<< eobf_offset - var eobf: UInt8 { - UInt8((self.rawValue & (USART.ISR.eobf_mask)) >> USART.ISR.eobf_offset) - } - - static let rtof_offset = UInt32(11) - static let rtof_mask = UInt32(0b1) &<< rtof_offset - var rtof: UInt8 { - UInt8((self.rawValue & (USART.ISR.rtof_mask)) >> USART.ISR.rtof_offset) - } - - static let cts_offset = UInt32(10) - static let cts_mask = UInt32(0b1) &<< cts_offset - var cts: UInt8 { - UInt8((self.rawValue & (USART.ISR.cts_mask)) >> USART.ISR.cts_offset) - } - - static let ctsif_offset = UInt32(9) - static let ctsif_mask = UInt32(0b1) &<< ctsif_offset - var ctsif: UInt8 { - UInt8((self.rawValue & (USART.ISR.ctsif_mask)) >> USART.ISR.ctsif_offset) - } - - static let lbdf_offset = UInt32(8) - static let lbdf_mask = UInt32(0b1) &<< lbdf_offset - var lbdf: UInt8 { - UInt8((self.rawValue & (USART.ISR.lbdf_mask)) >> USART.ISR.lbdf_offset) - } - - static let txe_offset = UInt32(7) - static let txe_mask = UInt32(0b1) &<< txe_offset - var txe: UInt8 { - UInt8((self.rawValue & (USART.ISR.txe_mask)) >> USART.ISR.txe_offset) - } - - static let tc_offset = UInt32(6) - static let tc_mask = UInt32(0b1) &<< tc_offset - var tc: UInt8 { - UInt8((self.rawValue & (USART.ISR.tc_mask)) >> USART.ISR.tc_offset) - } - - static let rxne_offset = UInt32(5) - static let rxne_mask = UInt32(0b1) &<< rxne_offset - var rxne: UInt8 { - UInt8((self.rawValue & (USART.ISR.rxne_mask)) >> USART.ISR.rxne_offset) - } - - static let idle_offset = UInt32(4) - static let idle_mask = UInt32(0b1) &<< idle_offset - var idle: UInt8 { - UInt8((self.rawValue & (USART.ISR.idle_mask)) >> USART.ISR.idle_offset) - } - - static let ore_offset = UInt32(3) - static let ore_mask = UInt32(0b1) &<< ore_offset - var ore: UInt8 { - UInt8((self.rawValue & (USART.ISR.ore_mask)) >> USART.ISR.ore_offset) - } - - static let nf_offset = UInt32(2) - static let nf_mask = UInt32(0b1) &<< nf_offset - var nf: UInt8 { - UInt8((self.rawValue & (USART.ISR.nf_mask)) >> USART.ISR.nf_offset) - } - - static let fe_offset = UInt32(1) - static let fe_mask = UInt32(0b1) &<< fe_offset - var fe: UInt8 { - UInt8((self.rawValue & (USART.ISR.fe_mask)) >> USART.ISR.fe_offset) - } - - static let pe_offset = UInt32(0) - static let pe_mask = UInt32(0b1) &<< pe_offset - var pe: UInt8 { - UInt8((self.rawValue & (USART.ISR.pe_mask)) >> USART.ISR.pe_offset) - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct ICR { - var rawValue: UInt32 - - static let wucf_offset = UInt32(20) - static let wucf_mask = UInt32(0b1) &<< wucf_offset - var wucf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.wucf_offset) & USART.ICR.wucf_mask - } - } - - static let cmcf_offset = UInt32(17) - static let cmcf_mask = UInt32(0b1) &<< cmcf_offset - var cmcf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.cmcf_offset) & USART.ICR.cmcf_mask - } - } - - static let eobcf_offset = UInt32(12) - static let eobcf_mask = UInt32(0b1) &<< eobcf_offset - var eobcf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.eobcf_offset) & USART.ICR.eobcf_mask - } - } - - static let rtocf_offset = UInt32(11) - static let rtocf_mask = UInt32(0b1) &<< rtocf_offset - var rtocf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.rtocf_offset) & USART.ICR.rtocf_mask - } - } - - static let ctscf_offset = UInt32(9) - static let ctscf_mask = UInt32(0b1) &<< ctscf_offset - var ctscf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.ctscf_offset) & USART.ICR.ctscf_mask - } - } - - static let lbdcf_offset = UInt32(8) - static let lbdcf_mask = UInt32(0b1) &<< lbdcf_offset - var lbdcf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.lbdcf_offset) & USART.ICR.lbdcf_mask - } - } - - static let tccf_offset = UInt32(6) - static let tccf_mask = UInt32(0b1) &<< tccf_offset - var tccf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.tccf_offset) & USART.ICR.tccf_mask - } - } - - static let idlecf_offset = UInt32(4) - static let idlecf_mask = UInt32(0b1) &<< idlecf_offset - var idlecf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.idlecf_offset) & USART.ICR.idlecf_mask - } - } - - static let orecf_offset = UInt32(3) - static let orecf_mask = UInt32(0b1) &<< orecf_offset - var orecf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.orecf_offset) & USART.ICR.orecf_mask - } - } - - static let ncf_offset = UInt32(2) - static let ncf_mask = UInt32(0b1) &<< ncf_offset - var ncf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.ncf_offset) & USART.ICR.ncf_mask - } - } - - static let fecf_offset = UInt32(1) - static let fecf_mask = UInt32(0b1) &<< fecf_offset - var fecf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.fecf_offset) & USART.ICR.fecf_mask - } - } - - static let pecf_offset = UInt32(0) - static let pecf_mask = UInt32(0b1) &<< pecf_offset - var pecf: UInt8 { - get { fatalError("Trying to read a write-only field") } - set { - self.rawValue = (UInt32(newValue) << USART.ICR.pecf_offset) & USART.ICR.pecf_mask - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct RDR { - var rawValue: UInt32 - - static let rdr_offset = UInt32(0) - static let rdr_mask = UInt32(0b111111111) &<< rdr_offset - var rdr: UInt16 { - UInt16((self.rawValue & (USART.RDR.rdr_mask)) >> USART.RDR.rdr_offset) - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } - struct TDR { - var rawValue: UInt32 - - static let tdr_offset = UInt32(0) - static let tdr_mask = UInt32(0b111111111) &<< tdr_offset - var tdr: UInt16 { - get { UInt16((self.rawValue & (USART.TDR.tdr_mask)) >> USART.TDR.tdr_offset) } - set { - let preserve = self.rawValue & ~USART.TDR.tdr_mask - let shift = (UInt32(newValue) << USART.TDR.tdr_offset) & USART.TDR.tdr_mask - self.rawValue = preserve | shift - } - } - - init(rawValue: UInt32) { - self.rawValue = rawValue - } - } -} diff --git a/stm32-neopixel/Makefile b/stm32-neopixel/Makefile index 60845a91..51885ce5 100755 --- a/stm32-neopixel/Makefile +++ b/stm32-neopixel/Makefile @@ -9,42 +9,30 @@ ## ##===----------------------------------------------------------------------===## -# Determine file paths -REPOROOT := $(shell git rev-parse --show-toplevel) -TOOLSROOT := $(REPOROOT)/Tools -SRCROOT := $(REPOROOT)/stm32-neopixel -BUILDROOT := $(SRCROOT)/.build/release - -# Setup tools and build flags -ARCH := armv7em -TARGET := $(ARCH)-apple-none-macho -VECTORS_ADDRESS=-0x00200000 - -SWIFT_BUILD := $(shell xcrun -f swift-build) -MACHO2BIN := $(SRCROOT)/../Tools/macho2bin.py +# Paths +REPOROOT := $(shell git rev-parse --show-toplevel) +TOOLSROOT := $(REPOROOT)/Tools +TOOLSET := $(TOOLSROOT)/Toolsets/stm32f74x.json +MACHO2BIN := $(TOOLSROOT)/macho2bin.py +SWIFT_BUILD := swift build + +# Flags +ARCH := armv7em +TARGET := $(ARCH)-apple-none-macho +SWIFT_BUILD_ARGS := \ + --configuration release \ + --triple $(TARGET) \ + --toolset $(TOOLSET) \ + --disable-local-rpath +BUILDROOT := $(shell $(SWIFT_BUILD) $(SWIFT_BUILD_ARGS) --show-bin-path) .PHONY: build build: - @echo "compiling..." + @echo "building..." $(SWIFT_BUILD) \ - --configuration release \ - --verbose \ - --triple $(TARGET) \ - -Xcc -D__APPLE__ -Xcc -D__MACH__ \ - -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector - - @echo "linking..." - clang .build/release/libApplication.a -o .build/release/Application \ - -arch $(ARCH) \ - -dead_strip \ - -static \ - -Wl,-e,_reset \ - -Wl,-map,$(BUILDROOT)/Application.mangled.map \ - -Wl,-no_zero_fill_sections \ - -Wl,-segalign,4 \ - -Wl,-segaddr,__VECTORS,0x20010000 \ - -Wl,-seg1addr,0x20010200 \ - -Wl,-pagezero_size,0 + $(SWIFT_BUILD_ARGS) \ + -Xlinker -map -Xlinker $(BUILDROOT)/Application.mangled.map \ + --verbose @echo "demangling linker map..." cat $(BUILDROOT)/Application.mangled.map \ diff --git a/stm32-neopixel/Package.resolved b/stm32-neopixel/Package.resolved index aa9ec369..d7e51efb 100644 --- a/stm32-neopixel/Package.resolved +++ b/stm32-neopixel/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "c23a233e350eb87b64e1d6f65aeedeb84fdc86c7edd481dd3dae915017d8ac6f", + "originHash" : "1e5ddc29279ed8df40c89e2aa6c1b16483a597824c05a9e88d3e1b8e4607db39", "pins" : [ { "identity" : "swift-argument-parser", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { - "revision" : "0fbc8848e389af3bb55c182bc19ca9d5dc2f255b", - "version" : "1.4.0" + "revision" : "41982a3656a71c768319979febd796c6fd111d5c", + "version" : "1.5.0" } }, { @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-mmio", "state" : { - "branch" : "swift-embedded-examples", - "revision" : "06d96ed4916739f2edafde87f3951b2d2a04df65" + "branch" : "main", + "revision" : "daf25ecacc0d9b71036c6af32cb7786a01802799" } }, { diff --git a/stm32-neopixel/Package.swift b/stm32-neopixel/Package.swift index 77236624..e909758e 100644 --- a/stm32-neopixel/Package.swift +++ b/stm32-neopixel/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 5.10 +// swift-tools-version: 6.2 import PackageDescription @@ -8,22 +8,22 @@ let package = Package( .macOS(.v10_15) ], products: [ - .library(name: "Application", type: .static, targets: ["Application"]) + .executable(name: "Application", targets: ["Application"]) ], dependencies: [ - .package( - url: "https://github.com/apple/swift-mmio", - branch: "swift-embedded-examples") + .package(url: "https://github.com/apple/swift-mmio", branch: "main") ], targets: [ - .target( + // SVD2Swift \ + // -i ../Tools/SVDs/stm32f7x6.patched.svd \ + // -o Sources/Application/Registers \ + // --indentation-width 2 \ + // -p DMA1 DMA2 GPIOA GPIOB GPIOI RCC SPI1 SPI2 USART1 + .executableTarget( name: "Application", dependencies: [ .product(name: "MMIO", package: "swift-mmio"), "Support", - ], - swiftSettings: [ - .enableExperimentalFeature("Embedded") ]), .target(name: "Support"), ]) diff --git a/stm32-neopixel/Sources/Application/Application.swift b/stm32-neopixel/Sources/Application/Application.swift index 3a554ac7..93ea5a40 100644 --- a/stm32-neopixel/Sources/Application/Application.swift +++ b/stm32-neopixel/Sources/Application/Application.swift @@ -24,23 +24,23 @@ public struct Application { rcc.cr.modify { $1.raw.pllon = 0 } // Configure UART to always use HSI. - rcc.dkcfgr2.modify { $0.raw.usart1sel = 0b10 } + rcc.dckcfgr2.modify { $0.usart1sel = .HSI } // Configure PLL to convert the 16MHz HSI to a 12.8MHz SYSCLK. // HSI is measured to be closer to 16.6Mhz on my device. // The SPI bus must run at 6.4MHz which is achieved with a /2 prescalar. - let pllM: UInt8 = 10 - let pllN: UInt8 = 64 - let pllP: UInt8 = 0b11 // maps to 8 - // ((16MHz / M) * N) / P = 12.8MHz + // M = 10 + // N = 64 + // P = 8 + // ((16MHz / M ) * N) / P = 12.8MHz rcc.pllcfgr.modify { rw in // Clear all non-reserved registers. rw.raw.storage &= 0b1111_0000_1011_1100__1000_0000_0000_0000 - rw.raw.storage |= UInt32(pllM) << 0 // Set M constant - rw.raw.storage |= UInt32(pllN) << 6 // Set N constant - rw.raw.storage |= UInt32(pllP) << 16 // Set P constant - rw.raw.storage |= UInt32(0) << 22 // Select HSI PLL Source + rw.raw.pllm = 10 // Set M constant + rw.raw.plln = 64 // Set N constant + rw.pllp = .Div8 // Set P constant + rw.pllsrc = .HSI // Select HSI PLL Source } // Enable the PLL clock and wait for ready. @@ -48,18 +48,13 @@ public struct Application { while rcc.cr.read().raw.pllrdy != 1 {} // Change the SYSCLK mux to select the PLL clock and wait for ready. - rcc.cfgr.modify { _, w in - w.raw.sw0 = 0 // Select PLL clock low. - w.raw.sw1 = 1 // Select PLL clock high. - w.raw.hpre = 0 // system clock not divided - w.raw.ppre1 = 0 // AHB clock not divided - w.raw.ppre2 = 0 // AHB clock not divided - } - - while true { - let cfgr = rcc.cfgr.read().raw - if cfgr.sws0 == 0 && cfgr.sws1 == 1 { break } + rcc.cfgr.modify { rw in + rw.raw.sw = 0b10 // Select PLL clock. + rw.raw.hpre = 0 // system clock not divided + rw.raw.ppre1 = 0 // AHB clock not divided + rw.raw.ppre2 = 0 // AHB clock not divided } + while rcc.cfgr.read().raw.sws != 0b10 {} // DMA rcc.ahb1enr.modify { $0.raw.dma1en = 1 } @@ -112,11 +107,11 @@ public struct Application { alternateFunction: 7)) // UART configuration - usart1.brr.modify { $0.raw.storage = 16_000_000 / 115200 } + usart1.brr.modify { $0.raw.brr_field = 16_000_000 / 115200 } usart1.cr1.modify { rw in - rw.raw.ue = 1 - rw.raw.re = 1 - rw.raw.te = 1 + rw.ue = .Enabled + rw.re = .Enabled + rw.te = .Enabled } // MARK: Main loop diff --git a/stm32-neopixel/Sources/Application/Neopixel/SPINeoPixel.swift b/stm32-neopixel/Sources/Application/Neopixel/SPINeoPixel.swift index 8901d64d..98eee592 100644 --- a/stm32-neopixel/Sources/Application/Neopixel/SPINeoPixel.swift +++ b/stm32-neopixel/Sources/Application/Neopixel/SPINeoPixel.swift @@ -70,66 +70,71 @@ extension SPINeoPixel { let count = UInt32( self.pixels.buffer.count * MemoryLayout.size) - self.dma.s4cr.modify { rw in + let index = 4 + self.dma.st[index].cr.modify { rw in rw.raw.chsel = 0 // Set the DMA channel to 0 (spi tx). - rw.raw.pfctrl = 0 // Set the DMA as the flow controller. - rw.raw.pl = 0b11 // Set the stream priority to Very High. - rw.raw.dir = 0b01 // Set memory to peripheral transfer direction. - rw.raw.pinc = 0 // Set peripheral to fixed (no-increment) mode. - rw.raw.minc = 1 // Set memory to incremented mode. - rw.raw.pburst = 0b00 // Set peripheral to single transaction mode. rw.raw.mburst = 0b00 // Set memory to single transaction mode. - rw.raw.psize = 0b00 // Set peripheral data width to 8 bit. + rw.pburst = .Single // Set peripheral to single transaction mode. + // ct + rw.dbm = .Disabled // Disable double buffer mode. + rw.pl = .VeryHigh // Set the stream priority to very high. + // pincos rw.raw.msize = 0b00 // Set memory data width to 8 bit. - rw.raw.circ = 0 // Disable circular mode. - rw.raw.dbm = 0 // Disable double buffer mode. - rw.raw.tcie = 1 // Enable transfer complete interrupt. - rw.raw.htie = 1 // Enable half transfer interrupt. - rw.raw.teie = 1 // Enable transfer error interrupt. - rw.raw.dmeie = 1 // Enable direct mode error interrupt. + rw.psize = .Bits8 // Set peripheral data width to 8 bit. + rw.raw.minc = 1 // Set memory to incremented mode. + rw.pinc = .Fixed // Set peripheral to fixed (no-increment) mode. + rw.circ = .Disabled // Disable circular mode. + rw.dir = .MemoryToPeripheral // Set transfer direction. + rw.pfctrl = .DMA // Set the DMA as the flow controller. + rw.tcie = .Enabled // Enable transfer complete interrupt. + rw.htie = .Enabled // Enable half transfer interrupt. + rw.teie = .Enabled // Enable transfer error interrupt. + rw.dmeie = .Enabled // Enable direct mode error interrupt. } // Set the total number of data items to the buffer size. - self.dma.s4ndtr.modify { $0.raw.ndt = UInt32(count) } + self.dma.st[index].ndtr.modify { $0.raw.ndt = UInt32(count) } // Set the destination peripheral port address to the spi data port. - self.dma.s4par.modify { $0.raw.pa = peripheral } + self.dma.st[index].par.modify { $0.raw.pa = peripheral } // Set the source memory address to the buffer's base. - self.dma.s4m0ar.modify { $0.raw.m0a = memory } + self.dma.st[index].m0ar.modify { $0.raw.m0a = memory } // Clear the second memory address as double buffering mode is disabled. - self.dma.s4m1ar.modify { $0.raw.m1a = 0 } + self.dma.st[index].m1ar.modify { $0.raw.m1a = 0 } - self.dma.s4fcr.modify { _, w in - w.raw.feie = 1 // Enable FIFO error interrupt. - w.raw.dmdis = 0 // Enable direct mode (double negative). - w.raw.fth = 0b00 // Reset FIFO threshold (no effect in direct mode). + self.dma.st[index].fcr.modify { _, w in + w.feie = .Enabled // Enable FIFO error interrupt. + w.dmdis = .Disabled // Enable direct mode (double negative). + w.fth = .Quarter // Reset FIFO threshold (no effect in direct mode). } - self.dma.hifcr.modify { rw in - rw.raw.ctcif4 = 1 // Clear transfer complete interrupt flag. - rw.raw.chtif4 = 1 // Clear half transfer interrupt flag. - rw.raw.cteif4 = 1 // Clear transfer error interrupt flag. - rw.raw.cdmeif4 = 1 // Clear direct mode error interrupt flag. - rw.raw.cfeif4 = 1 // Clear FIFO error interrupt flag. + self.dma.hifcr.modify { _, w in + w.raw.ctcif4 = 1 // Clear transfer complete interrupt flag. + w.raw.chtif4 = 1 // Clear half transfer interrupt flag. + w.raw.cteif4 = 1 // Clear transfer error interrupt flag. + w.raw.cdmeif4 = 1 // Clear direct mode error interrupt flag. + w.raw.cfeif4 = 1 // Clear FIFO error interrupt flag. } self.spi.cr1.modify { rw in - rw.raw.bidimode = 0 // Set full duplex. - rw.raw.bidioe = 0 - rw.raw.crcen = 0 // Disable hardware crc. - rw.raw.crcnext = 0 - rw.raw.crcl = 0 - rw.raw.rxonly = 0 // Set full duplex. + rw.bidimode = .Unidirectional // Set full duplex. + rw.bidioe = .OutputDisabled + rw.crcen = .Disabled // Disable hardware crc. + rw.crcnext = .TxBuffer + rw.crcl = .EightBit + rw.rxonly = .FullDuplex // Set full duplex. // FIXME: understand this Disable software slave management and select. - rw.raw.ssm = 1 - rw.raw.ssi = 1 - rw.raw.lsbfirst = 0 // Set data MSB first. - rw.raw.br = 0b000 // Set Baud Rate as Fpclk/2. - rw.raw.mstr = 1 // Set Master mode. - rw.raw.cpol = 0 // Set active high logic. - rw.raw.cpha = 1 // FIXME: understand this Set trailing edge logic. + rw.ssm = .Enabled + rw.ssi = .SlaveNotSelected + rw.lsbfirst = .MSBFirst // Set data MSB first. + // spe + rw.br = .Div2 // Set Baud Rate as Fpclk/2. + rw.mstr = .Master // Set Master mode. + rw.cpol = .IdleLow // Set active high logic. + // FIXME: understand this Set trailing edge logic. + rw.cpha = .SecondEdge } // Write to SPI_CR2 register: @@ -144,25 +149,27 @@ extension SPINeoPixel { // f) Initialize LDMA_TX and LDMA_RX bits if DMA is used in packed mode. self.spi.cr2.modify { rw in - rw.raw.ldma_tx = 0 // Reset dma transmission length. - rw.raw.ldma_rx = 0 // Reset dma reception length. - rw.raw.frxth = 1 // Set RXNE if FIFO <8 bits. - rw.raw.ds = 0b0111 // Set Data size to 8 bit. - rw.raw.txeie = 1 // Enable tx buffer empty interrupt. - rw.raw.rxneie = 1 // Enable rx not buffer empty interrupt. - rw.raw.errie = 1 // Enable error interrupt. - rw.raw.frf = 0 // Reset frame format (i2s). - // rw.raw.nssp = 0 // FIXME: understand this Disable NSS pulse management. - // rw.raw.ssoe = 0 // FIXME: understand this Disable slave select. - rw.raw.txdmaen = 1 // Enable tx dma. - rw.raw.rxdmaen = 0 // Disable rx dma. + rw.rxdmaen = .Disabled // Disable rx dma. + rw.txdmaen = .Enabled // Enable tx dma. + // FIXME: understand this Disable slave select. + // rw.ssoe = 0 + // FIXME: understand this Disable NSS pulse management. + // rw.nssp = 0 + rw.frf = .Motorola // Reset frame format (i2s). + rw.errie = .NotMasked // Enable error interrupt. + rw.rxneie = .NotMasked // Enable rx not buffer empty interrupt. + rw.txeie = .NotMasked // Enable tx buffer empty interrupt. + rw.ds = .EightBit // Set Data size to 8 bit. + rw.frxth = .Quarter // Set RXNE if FIFO <8 bits. + rw.ldma_rx = .Even // Reset dma reception length. + rw.ldma_tx = .Even // Reset dma transmission length. } // Activate the stream. - self.dma.s4cr.modify { $0.raw.en = 1 } + self.dma.st[index].cr.modify { $0.en = .Enabled } // Activate the SPI peripheral - self.spi.cr1.modify { $0.raw.spe = 1 } + self.spi.cr1.modify { $0.spe = .Enabled } func wait() -> Bool { while true { @@ -181,15 +188,15 @@ extension SPINeoPixel { // Wait until the last data frame is processed. while self.spi.sr.read().raw.bsy != 0 {} // Disable the SPI peripheral. - self.spi.cr1.modify { $0.raw.spe = 0 } + self.spi.cr1.modify { $0.spe = .Disabled } // Don't wait until the read data is received since the NeoPixel is not // a real SPI device. This will lead to overrun errors but they can be // safely ignored. // while self.spi.sr.read().raw.frlvl != 0b00 { } // Disable any existing DMA transfer on stream 0. - self.dma.s4cr.modify { $0.raw.en = 0 } + self.dma.st[index].cr.modify { $0.en = .Disabled } // Wait for the DMA stream to actually shutdown. - while self.dma.s4cr.read().raw.en != 0 {} + while self.dma.st[index].cr.read().en != .Disabled {} } } diff --git a/stm32-neopixel/Sources/Application/Registers/DMA1.swift b/stm32-neopixel/Sources/Application/Registers/DMA1.swift index be118f86..13ca8e33 100644 --- a/stm32-neopixel/Sources/Application/Registers/DMA1.swift +++ b/stm32-neopixel/Sources/Application/Registers/DMA1.swift @@ -3,1635 +3,5 @@ import MMIO /// DMA controller -@RegisterBlock -struct DMA1 { - /// low interrupt status register - @RegisterBlock(offset: 0x0) - var lisr: Register +typealias DMA1 = DMA2 - /// high interrupt status register - @RegisterBlock(offset: 0x4) - var hisr: Register - - /// low interrupt flag clear register - @RegisterBlock(offset: 0x8) - var lifcr: Register - - /// high interrupt flag clear register - @RegisterBlock(offset: 0xc) - var hifcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x10) - var s0cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x14) - var s0ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x18) - var s0par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x1c) - var s0m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x20) - var s0m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x24) - var s0fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x28) - var s1cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x2c) - var s1ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x30) - var s1par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x34) - var s1m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x38) - var s1m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x3c) - var s1fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x40) - var s2cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x44) - var s2ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x48) - var s2par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x4c) - var s2m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x50) - var s2m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x54) - var s2fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x58) - var s3cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x5c) - var s3ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x60) - var s3par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x64) - var s3m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x68) - var s3m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x6c) - var s3fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x70) - var s4cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x74) - var s4ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x78) - var s4par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x7c) - var s4m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x80) - var s4m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x84) - var s4fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0x88) - var s5cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0x8c) - var s5ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0x90) - var s5par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0x94) - var s5m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0x98) - var s5m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0x9c) - var s5fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0xa0) - var s6cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0xa4) - var s6ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0xa8) - var s6par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0xac) - var s6m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0xb0) - var s6m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0xb4) - var s6fcr: Register - - /// stream x configuration register - @RegisterBlock(offset: 0xb8) - var s7cr: Register - - /// stream x number of data register - @RegisterBlock(offset: 0xbc) - var s7ndtr: Register - - /// stream x peripheral address register - @RegisterBlock(offset: 0xc0) - var s7par: Register - - /// stream x memory 0 address register - @RegisterBlock(offset: 0xc4) - var s7m0ar: Register - - /// stream x memory 1 address register - @RegisterBlock(offset: 0xc8) - var s7m1ar: Register - - /// stream x FIFO control register - @RegisterBlock(offset: 0xcc) - var s7fcr: Register -} - -extension DMA1 { - /// low interrupt status register - @Register(bitWidth: 32) - struct LISR { - /// Stream x transfer complete interrupt flag (x = 3..0) - @ReadOnly(bits: 27..<28) - var tcif3: TCIF3 - - /// Stream x half transfer interrupt flag (x=3..0) - @ReadOnly(bits: 26..<27) - var htif3: HTIF3 - - /// Stream x transfer error interrupt flag (x=3..0) - @ReadOnly(bits: 25..<26) - var teif3: TEIF3 - - /// Stream x direct mode error interrupt flag (x=3..0) - @ReadOnly(bits: 24..<25) - var dmeif3: DMEIF3 - - /// Stream x FIFO error interrupt flag (x=3..0) - @ReadOnly(bits: 22..<23) - var feif3: FEIF3 - - /// Stream x transfer complete interrupt flag (x = 3..0) - @ReadOnly(bits: 21..<22) - var tcif2: TCIF2 - - /// Stream x half transfer interrupt flag (x=3..0) - @ReadOnly(bits: 20..<21) - var htif2: HTIF2 - - /// Stream x transfer error interrupt flag (x=3..0) - @ReadOnly(bits: 19..<20) - var teif2: TEIF2 - - /// Stream x direct mode error interrupt flag (x=3..0) - @ReadOnly(bits: 18..<19) - var dmeif2: DMEIF2 - - /// Stream x FIFO error interrupt flag (x=3..0) - @ReadOnly(bits: 16..<17) - var feif2: FEIF2 - - /// Stream x transfer complete interrupt flag (x = 3..0) - @ReadOnly(bits: 11..<12) - var tcif1: TCIF1 - - /// Stream x half transfer interrupt flag (x=3..0) - @ReadOnly(bits: 10..<11) - var htif1: HTIF1 - - /// Stream x transfer error interrupt flag (x=3..0) - @ReadOnly(bits: 9..<10) - var teif1: TEIF1 - - /// Stream x direct mode error interrupt flag (x=3..0) - @ReadOnly(bits: 8..<9) - var dmeif1: DMEIF1 - - /// Stream x FIFO error interrupt flag (x=3..0) - @ReadOnly(bits: 6..<7) - var feif1: FEIF1 - - /// Stream x transfer complete interrupt flag (x = 3..0) - @ReadOnly(bits: 5..<6) - var tcif0: TCIF0 - - /// Stream x half transfer interrupt flag (x=3..0) - @ReadOnly(bits: 4..<5) - var htif0: HTIF0 - - /// Stream x transfer error interrupt flag (x=3..0) - @ReadOnly(bits: 3..<4) - var teif0: TEIF0 - - /// Stream x direct mode error interrupt flag (x=3..0) - @ReadOnly(bits: 2..<3) - var dmeif0: DMEIF0 - - /// Stream x FIFO error interrupt flag (x=3..0) - @ReadOnly(bits: 0..<1) - var feif0: FEIF0 - } - - /// high interrupt status register - @Register(bitWidth: 32) - struct HISR { - /// Stream x transfer complete interrupt flag (x=7..4) - @ReadOnly(bits: 27..<28) - var tcif7: TCIF7 - - /// Stream x half transfer interrupt flag (x=7..4) - @ReadOnly(bits: 26..<27) - var htif7: HTIF7 - - /// Stream x transfer error interrupt flag (x=7..4) - @ReadOnly(bits: 25..<26) - var teif7: TEIF7 - - /// Stream x direct mode error interrupt flag (x=7..4) - @ReadOnly(bits: 24..<25) - var dmeif7: DMEIF7 - - /// Stream x FIFO error interrupt flag (x=7..4) - @ReadOnly(bits: 22..<23) - var feif7: FEIF7 - - /// Stream x transfer complete interrupt flag (x=7..4) - @ReadOnly(bits: 21..<22) - var tcif6: TCIF6 - - /// Stream x half transfer interrupt flag (x=7..4) - @ReadOnly(bits: 20..<21) - var htif6: HTIF6 - - /// Stream x transfer error interrupt flag (x=7..4) - @ReadOnly(bits: 19..<20) - var teif6: TEIF6 - - /// Stream x direct mode error interrupt flag (x=7..4) - @ReadOnly(bits: 18..<19) - var dmeif6: DMEIF6 - - /// Stream x FIFO error interrupt flag (x=7..4) - @ReadOnly(bits: 16..<17) - var feif6: FEIF6 - - /// Stream x transfer complete interrupt flag (x=7..4) - @ReadOnly(bits: 11..<12) - var tcif5: TCIF5 - - /// Stream x half transfer interrupt flag (x=7..4) - @ReadOnly(bits: 10..<11) - var htif5: HTIF5 - - /// Stream x transfer error interrupt flag (x=7..4) - @ReadOnly(bits: 9..<10) - var teif5: TEIF5 - - /// Stream x direct mode error interrupt flag (x=7..4) - @ReadOnly(bits: 8..<9) - var dmeif5: DMEIF5 - - /// Stream x FIFO error interrupt flag (x=7..4) - @ReadOnly(bits: 6..<7) - var feif5: FEIF5 - - /// Stream x transfer complete interrupt flag (x=7..4) - @ReadOnly(bits: 5..<6) - var tcif4: TCIF4 - - /// Stream x half transfer interrupt flag (x=7..4) - @ReadOnly(bits: 4..<5) - var htif4: HTIF4 - - /// Stream x transfer error interrupt flag (x=7..4) - @ReadOnly(bits: 3..<4) - var teif4: TEIF4 - - /// Stream x direct mode error interrupt flag (x=7..4) - @ReadOnly(bits: 2..<3) - var dmeif4: DMEIF4 - - /// Stream x FIFO error interrupt flag (x=7..4) - @ReadOnly(bits: 0..<1) - var feif4: FEIF4 - } - - /// low interrupt flag clear register - @Register(bitWidth: 32) - struct LIFCR { - /// Stream x clear transfer complete interrupt flag (x = 3..0) - @ReadWrite(bits: 27..<28) - var ctcif3: CTCIF3 - - /// Stream x clear half transfer interrupt flag (x = 3..0) - @ReadWrite(bits: 26..<27) - var chtif3: CHTIF3 - - /// Stream x clear transfer error interrupt flag (x = 3..0) - @ReadWrite(bits: 25..<26) - var cteif3: CTEIF3 - - /// Stream x clear direct mode error interrupt flag (x = 3..0) - @ReadWrite(bits: 24..<25) - var cdmeif3: CDMEIF3 - - /// Stream x clear FIFO error interrupt flag (x = 3..0) - @ReadWrite(bits: 22..<23) - var cfeif3: CFEIF3 - - /// Stream x clear transfer complete interrupt flag (x = 3..0) - @ReadWrite(bits: 21..<22) - var ctcif2: CTCIF2 - - /// Stream x clear half transfer interrupt flag (x = 3..0) - @ReadWrite(bits: 20..<21) - var chtif2: CHTIF2 - - /// Stream x clear transfer error interrupt flag (x = 3..0) - @ReadWrite(bits: 19..<20) - var cteif2: CTEIF2 - - /// Stream x clear direct mode error interrupt flag (x = 3..0) - @ReadWrite(bits: 18..<19) - var cdmeif2: CDMEIF2 - - /// Stream x clear FIFO error interrupt flag (x = 3..0) - @ReadWrite(bits: 16..<17) - var cfeif2: CFEIF2 - - /// Stream x clear transfer complete interrupt flag (x = 3..0) - @ReadWrite(bits: 11..<12) - var ctcif1: CTCIF1 - - /// Stream x clear half transfer interrupt flag (x = 3..0) - @ReadWrite(bits: 10..<11) - var chtif1: CHTIF1 - - /// Stream x clear transfer error interrupt flag (x = 3..0) - @ReadWrite(bits: 9..<10) - var cteif1: CTEIF1 - - /// Stream x clear direct mode error interrupt flag (x = 3..0) - @ReadWrite(bits: 8..<9) - var cdmeif1: CDMEIF1 - - /// Stream x clear FIFO error interrupt flag (x = 3..0) - @ReadWrite(bits: 6..<7) - var cfeif1: CFEIF1 - - /// Stream x clear transfer complete interrupt flag (x = 3..0) - @ReadWrite(bits: 5..<6) - var ctcif0: CTCIF0 - - /// Stream x clear half transfer interrupt flag (x = 3..0) - @ReadWrite(bits: 4..<5) - var chtif0: CHTIF0 - - /// Stream x clear transfer error interrupt flag (x = 3..0) - @ReadWrite(bits: 3..<4) - var cteif0: CTEIF0 - - /// Stream x clear direct mode error interrupt flag (x = 3..0) - @ReadWrite(bits: 2..<3) - var cdmeif0: CDMEIF0 - - /// Stream x clear FIFO error interrupt flag (x = 3..0) - @ReadWrite(bits: 0..<1) - var cfeif0: CFEIF0 - } - - /// high interrupt flag clear register - @Register(bitWidth: 32) - struct HIFCR { - /// Stream x clear transfer complete interrupt flag (x = 7..4) - @ReadWrite(bits: 27..<28) - var ctcif7: CTCIF7 - - /// Stream x clear half transfer interrupt flag (x = 7..4) - @ReadWrite(bits: 26..<27) - var chtif7: CHTIF7 - - /// Stream x clear transfer error interrupt flag (x = 7..4) - @ReadWrite(bits: 25..<26) - var cteif7: CTEIF7 - - /// Stream x clear direct mode error interrupt flag (x = 7..4) - @ReadWrite(bits: 24..<25) - var cdmeif7: CDMEIF7 - - /// Stream x clear FIFO error interrupt flag (x = 7..4) - @ReadWrite(bits: 22..<23) - var cfeif7: CFEIF7 - - /// Stream x clear transfer complete interrupt flag (x = 7..4) - @ReadWrite(bits: 21..<22) - var ctcif6: CTCIF6 - - /// Stream x clear half transfer interrupt flag (x = 7..4) - @ReadWrite(bits: 20..<21) - var chtif6: CHTIF6 - - /// Stream x clear transfer error interrupt flag (x = 7..4) - @ReadWrite(bits: 19..<20) - var cteif6: CTEIF6 - - /// Stream x clear direct mode error interrupt flag (x = 7..4) - @ReadWrite(bits: 18..<19) - var cdmeif6: CDMEIF6 - - /// Stream x clear FIFO error interrupt flag (x = 7..4) - @ReadWrite(bits: 16..<17) - var cfeif6: CFEIF6 - - /// Stream x clear transfer complete interrupt flag (x = 7..4) - @ReadWrite(bits: 11..<12) - var ctcif5: CTCIF5 - - /// Stream x clear half transfer interrupt flag (x = 7..4) - @ReadWrite(bits: 10..<11) - var chtif5: CHTIF5 - - /// Stream x clear transfer error interrupt flag (x = 7..4) - @ReadWrite(bits: 9..<10) - var cteif5: CTEIF5 - - /// Stream x clear direct mode error interrupt flag (x = 7..4) - @ReadWrite(bits: 8..<9) - var cdmeif5: CDMEIF5 - - /// Stream x clear FIFO error interrupt flag (x = 7..4) - @ReadWrite(bits: 6..<7) - var cfeif5: CFEIF5 - - /// Stream x clear transfer complete interrupt flag (x = 7..4) - @ReadWrite(bits: 5..<6) - var ctcif4: CTCIF4 - - /// Stream x clear half transfer interrupt flag (x = 7..4) - @ReadWrite(bits: 4..<5) - var chtif4: CHTIF4 - - /// Stream x clear transfer error interrupt flag (x = 7..4) - @ReadWrite(bits: 3..<4) - var cteif4: CTEIF4 - - /// Stream x clear direct mode error interrupt flag (x = 7..4) - @ReadWrite(bits: 2..<3) - var cdmeif4: CDMEIF4 - - /// Stream x clear FIFO error interrupt flag (x = 7..4) - @ReadWrite(bits: 0..<1) - var cfeif4: CFEIF4 - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S0CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S0NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S0PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S0M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S0M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S0FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S1CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S1NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S1PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S1M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S1M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S1FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S2CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S2NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S2PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S2M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S2M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S2FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S3CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S3NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S3PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S3M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S3M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S3FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S4CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S4NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S4PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S4M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S4M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S4FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S5CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S5NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S5PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S5M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S5M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S5FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S6CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S6NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S6PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S6M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S6M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S6FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } - - /// stream x configuration register - @Register(bitWidth: 32) - struct S7CR { - /// Channel selection - @ReadWrite(bits: 25..<28) - var chsel: CHSEL - - /// Memory burst transfer configuration - @ReadWrite(bits: 23..<25) - var mburst: MBURST - - /// Peripheral burst transfer configuration - @ReadWrite(bits: 21..<23) - var pburst: PBURST - - /// ACK - @ReadWrite(bits: 20..<21) - var ack: ACK - - /// Current target (only in double buffer mode) - @ReadWrite(bits: 19..<20) - var ct: CT - - /// Double buffer mode - @ReadWrite(bits: 18..<19) - var dbm: DBM - - /// Priority level - @ReadWrite(bits: 16..<18) - var pl: PL - - /// Peripheral increment offset size - @ReadWrite(bits: 15..<16) - var pincos: PINCOS - - /// Memory data size - @ReadWrite(bits: 13..<15) - var msize: MSIZE - - /// Peripheral data size - @ReadWrite(bits: 11..<13) - var psize: PSIZE - - /// Memory increment mode - @ReadWrite(bits: 10..<11) - var minc: MINC - - /// Peripheral increment mode - @ReadWrite(bits: 9..<10) - var pinc: PINC - - /// Circular mode - @ReadWrite(bits: 8..<9) - var circ: CIRC - - /// Data transfer direction - @ReadWrite(bits: 6..<8) - var dir: DIR - - /// Peripheral flow controller - @ReadWrite(bits: 5..<6) - var pfctrl: PFCTRL - - /// Transfer complete interrupt enable - @ReadWrite(bits: 4..<5) - var tcie: TCIE - - /// Half transfer interrupt enable - @ReadWrite(bits: 3..<4) - var htie: HTIE - - /// Transfer error interrupt enable - @ReadWrite(bits: 2..<3) - var teie: TEIE - - /// Direct mode error interrupt enable - @ReadWrite(bits: 1..<2) - var dmeie: DMEIE - - /// Stream enable / flag stream ready when read low - @ReadWrite(bits: 0..<1) - var en: EN - } - - /// stream x number of data register - @Register(bitWidth: 32) - struct S7NDTR { - /// Number of data items to transfer - @ReadWrite(bits: 0..<16) - var ndt: NDT - } - - /// stream x peripheral address register - @Register(bitWidth: 32) - struct S7PAR { - /// Peripheral address - @ReadWrite(bits: 0..<32) - var pa: PA - } - - /// stream x memory 0 address register - @Register(bitWidth: 32) - struct S7M0AR { - /// Memory 0 address - @ReadWrite(bits: 0..<32) - var m0a: M0A - } - - /// stream x memory 1 address register - @Register(bitWidth: 32) - struct S7M1AR { - /// Memory 1 address (used in case of Double buffer mode) - @ReadWrite(bits: 0..<32) - var m1a: M1A - } - - /// stream x FIFO control register - @Register(bitWidth: 32) - struct S7FCR { - /// FIFO error interrupt enable - @ReadWrite(bits: 7..<8) - var feie: FEIE - - /// FIFO status - @ReadOnly(bits: 3..<6) - var fs: FS - - /// Direct mode disable - @ReadWrite(bits: 2..<3) - var dmdis: DMDIS - - /// FIFO threshold selection - @ReadWrite(bits: 0..<2) - var fth: FTH - } -} diff --git a/stm32-neopixel/Sources/Application/Registers/DMA2.swift b/stm32-neopixel/Sources/Application/Registers/DMA2.swift new file mode 100644 index 00000000..e6b7a6bb --- /dev/null +++ b/stm32-neopixel/Sources/Application/Registers/DMA2.swift @@ -0,0 +1,893 @@ +// Generated by svd2swift. + +import MMIO + +/// DMA controller +@RegisterBlock +struct DMA2 { + /// low interrupt status register + @RegisterBlock(offset: 0x0) + var lisr: Register + + /// high interrupt status register + @RegisterBlock(offset: 0x4) + var hisr: Register + + /// low interrupt flag clear register + @RegisterBlock(offset: 0x8) + var lifcr: Register + + /// high interrupt flag clear register + @RegisterBlock(offset: 0xc) + var hifcr: Register + + /// Stream cluster: S?CR, S?NDTR, S?M0AR, S?M1AR and S?FCR registers + @RegisterBlock(offset: 0x10, stride: 0x18, count: 8) + var st: RegisterArray +} + +extension DMA2 { + /// low interrupt status register + @Register(bitWidth: 32) + struct LISR { + /// Stream x transfer complete interrupt flag (x = 3..0) + @ReadOnly(bits: 27..<28) + var tcif3: TCIF3 + + /// Stream x half transfer interrupt flag (x=3..0) + @ReadOnly(bits: 26..<27) + var htif3: HTIF3 + + /// Stream x transfer error interrupt flag (x=3..0) + @ReadOnly(bits: 25..<26) + var teif3: TEIF3 + + /// Stream x direct mode error interrupt flag (x=3..0) + @ReadOnly(bits: 24..<25) + var dmeif3: DMEIF3 + + /// Stream x FIFO error interrupt flag (x=3..0) + @ReadOnly(bits: 22..<23) + var feif3: FEIF3 + + /// Stream x transfer complete interrupt flag (x = 3..0) + @ReadOnly(bits: 21..<22) + var tcif2: TCIF2 + + /// Stream x half transfer interrupt flag (x=3..0) + @ReadOnly(bits: 20..<21) + var htif2: HTIF2 + + /// Stream x transfer error interrupt flag (x=3..0) + @ReadOnly(bits: 19..<20) + var teif2: TEIF2 + + /// Stream x direct mode error interrupt flag (x=3..0) + @ReadOnly(bits: 18..<19) + var dmeif2: DMEIF2 + + /// Stream x FIFO error interrupt flag (x=3..0) + @ReadOnly(bits: 16..<17) + var feif2: FEIF2 + + /// Stream x transfer complete interrupt flag (x = 3..0) + @ReadOnly(bits: 11..<12) + var tcif1: TCIF1 + + /// Stream x half transfer interrupt flag (x=3..0) + @ReadOnly(bits: 10..<11) + var htif1: HTIF1 + + /// Stream x transfer error interrupt flag (x=3..0) + @ReadOnly(bits: 9..<10) + var teif1: TEIF1 + + /// Stream x direct mode error interrupt flag (x=3..0) + @ReadOnly(bits: 8..<9) + var dmeif1: DMEIF1 + + /// Stream x FIFO error interrupt flag (x=3..0) + @ReadOnly(bits: 6..<7) + var feif1: FEIF1 + + /// Stream x transfer complete interrupt flag (x = 3..0) + @ReadOnly(bits: 5..<6) + var tcif0: TCIF0 + + /// Stream x half transfer interrupt flag (x=3..0) + @ReadOnly(bits: 4..<5) + var htif0: HTIF0 + + /// Stream x transfer error interrupt flag (x=3..0) + @ReadOnly(bits: 3..<4) + var teif0: TEIF0 + + /// Stream x direct mode error interrupt flag (x=3..0) + @ReadOnly(bits: 2..<3) + var dmeif0: DMEIF0 + + /// Stream x FIFO error interrupt flag (x=3..0) + @ReadOnly(bits: 0..<1) + var feif0: FEIF0 + } + + /// high interrupt status register + @Register(bitWidth: 32) + struct HISR { + /// Stream x transfer complete interrupt flag (x=7..4) + @ReadOnly(bits: 27..<28) + var tcif7: TCIF7 + + /// Stream x half transfer interrupt flag (x=7..4) + @ReadOnly(bits: 26..<27) + var htif7: HTIF7 + + /// Stream x transfer error interrupt flag (x=7..4) + @ReadOnly(bits: 25..<26) + var teif7: TEIF7 + + /// Stream x direct mode error interrupt flag (x=7..4) + @ReadOnly(bits: 24..<25) + var dmeif7: DMEIF7 + + /// Stream x FIFO error interrupt flag (x=7..4) + @ReadOnly(bits: 22..<23) + var feif7: FEIF7 + + /// Stream x transfer complete interrupt flag (x=7..4) + @ReadOnly(bits: 21..<22) + var tcif6: TCIF6 + + /// Stream x half transfer interrupt flag (x=7..4) + @ReadOnly(bits: 20..<21) + var htif6: HTIF6 + + /// Stream x transfer error interrupt flag (x=7..4) + @ReadOnly(bits: 19..<20) + var teif6: TEIF6 + + /// Stream x direct mode error interrupt flag (x=7..4) + @ReadOnly(bits: 18..<19) + var dmeif6: DMEIF6 + + /// Stream x FIFO error interrupt flag (x=7..4) + @ReadOnly(bits: 16..<17) + var feif6: FEIF6 + + /// Stream x transfer complete interrupt flag (x=7..4) + @ReadOnly(bits: 11..<12) + var tcif5: TCIF5 + + /// Stream x half transfer interrupt flag (x=7..4) + @ReadOnly(bits: 10..<11) + var htif5: HTIF5 + + /// Stream x transfer error interrupt flag (x=7..4) + @ReadOnly(bits: 9..<10) + var teif5: TEIF5 + + /// Stream x direct mode error interrupt flag (x=7..4) + @ReadOnly(bits: 8..<9) + var dmeif5: DMEIF5 + + /// Stream x FIFO error interrupt flag (x=7..4) + @ReadOnly(bits: 6..<7) + var feif5: FEIF5 + + /// Stream x transfer complete interrupt flag (x=7..4) + @ReadOnly(bits: 5..<6) + var tcif4: TCIF4 + + /// Stream x half transfer interrupt flag (x=7..4) + @ReadOnly(bits: 4..<5) + var htif4: HTIF4 + + /// Stream x transfer error interrupt flag (x=7..4) + @ReadOnly(bits: 3..<4) + var teif4: TEIF4 + + /// Stream x direct mode error interrupt flag (x=7..4) + @ReadOnly(bits: 2..<3) + var dmeif4: DMEIF4 + + /// Stream x FIFO error interrupt flag (x=7..4) + @ReadOnly(bits: 0..<1) + var feif4: FEIF4 + } + + /// low interrupt flag clear register + @Register(bitWidth: 32) + struct LIFCR { + /// Stream x clear transfer complete interrupt flag (x = 3..0) + @WriteOnly(bits: 27..<28) + var ctcif3: CTCIF3 + + /// Stream x clear half transfer interrupt flag (x = 3..0) + @WriteOnly(bits: 26..<27) + var chtif3: CHTIF3 + + /// Stream x clear transfer error interrupt flag (x = 3..0) + @WriteOnly(bits: 25..<26) + var cteif3: CTEIF3 + + /// Stream x clear direct mode error interrupt flag (x = 3..0) + @WriteOnly(bits: 24..<25) + var cdmeif3: CDMEIF3 + + /// Stream x clear FIFO error interrupt flag (x = 3..0) + @WriteOnly(bits: 22..<23) + var cfeif3: CFEIF3 + + /// Stream x clear transfer complete interrupt flag (x = 3..0) + @WriteOnly(bits: 21..<22) + var ctcif2: CTCIF2 + + /// Stream x clear half transfer interrupt flag (x = 3..0) + @WriteOnly(bits: 20..<21) + var chtif2: CHTIF2 + + /// Stream x clear transfer error interrupt flag (x = 3..0) + @WriteOnly(bits: 19..<20) + var cteif2: CTEIF2 + + /// Stream x clear direct mode error interrupt flag (x = 3..0) + @WriteOnly(bits: 18..<19) + var cdmeif2: CDMEIF2 + + /// Stream x clear FIFO error interrupt flag (x = 3..0) + @WriteOnly(bits: 16..<17) + var cfeif2: CFEIF2 + + /// Stream x clear transfer complete interrupt flag (x = 3..0) + @WriteOnly(bits: 11..<12) + var ctcif1: CTCIF1 + + /// Stream x clear half transfer interrupt flag (x = 3..0) + @WriteOnly(bits: 10..<11) + var chtif1: CHTIF1 + + /// Stream x clear transfer error interrupt flag (x = 3..0) + @WriteOnly(bits: 9..<10) + var cteif1: CTEIF1 + + /// Stream x clear direct mode error interrupt flag (x = 3..0) + @WriteOnly(bits: 8..<9) + var cdmeif1: CDMEIF1 + + /// Stream x clear FIFO error interrupt flag (x = 3..0) + @WriteOnly(bits: 6..<7) + var cfeif1: CFEIF1 + + /// Stream x clear transfer complete interrupt flag (x = 3..0) + @WriteOnly(bits: 5..<6) + var ctcif0: CTCIF0 + + /// Stream x clear half transfer interrupt flag (x = 3..0) + @WriteOnly(bits: 4..<5) + var chtif0: CHTIF0 + + /// Stream x clear transfer error interrupt flag (x = 3..0) + @WriteOnly(bits: 3..<4) + var cteif0: CTEIF0 + + /// Stream x clear direct mode error interrupt flag (x = 3..0) + @WriteOnly(bits: 2..<3) + var cdmeif0: CDMEIF0 + + /// Stream x clear FIFO error interrupt flag (x = 3..0) + @WriteOnly(bits: 0..<1) + var cfeif0: CFEIF0 + } + + /// high interrupt flag clear register + @Register(bitWidth: 32) + struct HIFCR { + /// Stream x clear transfer complete interrupt flag (x = 7..4) + @WriteOnly(bits: 27..<28) + var ctcif7: CTCIF7 + + /// Stream x clear half transfer interrupt flag (x = 7..4) + @WriteOnly(bits: 26..<27) + var chtif7: CHTIF7 + + /// Stream x clear transfer error interrupt flag (x = 7..4) + @WriteOnly(bits: 25..<26) + var cteif7: CTEIF7 + + /// Stream x clear direct mode error interrupt flag (x = 7..4) + @WriteOnly(bits: 24..<25) + var cdmeif7: CDMEIF7 + + /// Stream x clear FIFO error interrupt flag (x = 7..4) + @WriteOnly(bits: 22..<23) + var cfeif7: CFEIF7 + + /// Stream x clear transfer complete interrupt flag (x = 7..4) + @WriteOnly(bits: 21..<22) + var ctcif6: CTCIF6 + + /// Stream x clear half transfer interrupt flag (x = 7..4) + @WriteOnly(bits: 20..<21) + var chtif6: CHTIF6 + + /// Stream x clear transfer error interrupt flag (x = 7..4) + @WriteOnly(bits: 19..<20) + var cteif6: CTEIF6 + + /// Stream x clear direct mode error interrupt flag (x = 7..4) + @WriteOnly(bits: 18..<19) + var cdmeif6: CDMEIF6 + + /// Stream x clear FIFO error interrupt flag (x = 7..4) + @WriteOnly(bits: 16..<17) + var cfeif6: CFEIF6 + + /// Stream x clear transfer complete interrupt flag (x = 7..4) + @WriteOnly(bits: 11..<12) + var ctcif5: CTCIF5 + + /// Stream x clear half transfer interrupt flag (x = 7..4) + @WriteOnly(bits: 10..<11) + var chtif5: CHTIF5 + + /// Stream x clear transfer error interrupt flag (x = 7..4) + @WriteOnly(bits: 9..<10) + var cteif5: CTEIF5 + + /// Stream x clear direct mode error interrupt flag (x = 7..4) + @WriteOnly(bits: 8..<9) + var cdmeif5: CDMEIF5 + + /// Stream x clear FIFO error interrupt flag (x = 7..4) + @WriteOnly(bits: 6..<7) + var cfeif5: CFEIF5 + + /// Stream x clear transfer complete interrupt flag (x = 7..4) + @WriteOnly(bits: 5..<6) + var ctcif4: CTCIF4 + + /// Stream x clear half transfer interrupt flag (x = 7..4) + @WriteOnly(bits: 4..<5) + var chtif4: CHTIF4 + + /// Stream x clear transfer error interrupt flag (x = 7..4) + @WriteOnly(bits: 3..<4) + var cteif4: CTEIF4 + + /// Stream x clear direct mode error interrupt flag (x = 7..4) + @WriteOnly(bits: 2..<3) + var cdmeif4: CDMEIF4 + + /// Stream x clear FIFO error interrupt flag (x = 7..4) + @WriteOnly(bits: 0..<1) + var cfeif4: CFEIF4 + } + + /// Stream cluster: S?CR, S?NDTR, S?M0AR, S?M1AR and S?FCR registers + @RegisterBlock + struct ST { + /// stream x configuration register + @RegisterBlock(offset: 0x0) + var cr: Register + + /// stream x number of data register + @RegisterBlock(offset: 0x4) + var ndtr: Register + + /// stream x peripheral address register + @RegisterBlock(offset: 0x8) + var par: Register + + /// stream x memory 0 address register + @RegisterBlock(offset: 0xc) + var m0ar: Register + + /// stream x memory 1 address register + @RegisterBlock(offset: 0x10) + var m1ar: Register + + /// stream x FIFO control register + @RegisterBlock(offset: 0x14) + var fcr: Register + } +} + +extension DMA2.ST { + /// stream x configuration register + @Register(bitWidth: 32) + struct CR { + /// Channel selection + @ReadWrite(bits: 25..<28) + var chsel: CHSEL + + /// Memory burst transfer configuration + @ReadWrite(bits: 23..<25) + var mburst: MBURST + + /// Peripheral burst transfer configuration + @ReadWrite(bits: 21..<23, as: PBURSTValues.self) + var pburst: PBURST + + /// Current target (only in double buffer mode) + @ReadWrite(bits: 19..<20, as: CTValues.self) + var ct: CT + + /// Double buffer mode + @ReadWrite(bits: 18..<19, as: DBMValues.self) + var dbm: DBM + + /// Priority level + @ReadWrite(bits: 16..<18, as: PLValues.self) + var pl: PL + + /// Peripheral increment offset size + @ReadWrite(bits: 15..<16, as: PINCOSValues.self) + var pincos: PINCOS + + /// Memory data size + @ReadWrite(bits: 13..<15) + var msize: MSIZE + + /// Peripheral data size + @ReadWrite(bits: 11..<13, as: PSIZEValues.self) + var psize: PSIZE + + /// Memory increment mode + @ReadWrite(bits: 10..<11) + var minc: MINC + + /// Peripheral increment mode + @ReadWrite(bits: 9..<10, as: PINCValues.self) + var pinc: PINC + + /// Circular mode + @ReadWrite(bits: 8..<9, as: CIRCValues.self) + var circ: CIRC + + /// Data transfer direction + @ReadWrite(bits: 6..<8, as: DIRValues.self) + var dir: DIR + + /// Peripheral flow controller + @ReadWrite(bits: 5..<6, as: PFCTRLValues.self) + var pfctrl: PFCTRL + + /// Transfer complete interrupt enable + @ReadWrite(bits: 4..<5, as: TCIEValues.self) + var tcie: TCIE + + /// Half transfer interrupt enable + @ReadWrite(bits: 3..<4, as: HTIEValues.self) + var htie: HTIE + + /// Transfer error interrupt enable + @ReadWrite(bits: 2..<3, as: TEIEValues.self) + var teie: TEIE + + /// Direct mode error interrupt enable + @ReadWrite(bits: 1..<2, as: DMEIEValues.self) + var dmeie: DMEIE + + /// Stream enable / flag stream ready when read low + @ReadWrite(bits: 0..<1, as: ENValues.self) + var en: EN + } + + /// stream x number of data register + @Register(bitWidth: 32) + struct NDTR { + /// Number of data items to transfer + @ReadWrite(bits: 0..<16) + var ndt: NDT + } + + /// stream x peripheral address register + @Register(bitWidth: 32) + struct PAR { + /// Peripheral address + @ReadWrite(bits: 0..<32) + var pa: PA + } + + /// stream x memory 0 address register + @Register(bitWidth: 32) + struct M0AR { + /// Memory 0 address + @ReadWrite(bits: 0..<32) + var m0a: M0A + } + + /// stream x memory 1 address register + @Register(bitWidth: 32) + struct M1AR { + /// Memory 1 address (used in case of Double buffer mode) + @ReadWrite(bits: 0..<32) + var m1a: M1A + } + + /// stream x FIFO control register + @Register(bitWidth: 32) + struct FCR { + /// FIFO error interrupt enable + @ReadWrite(bits: 7..<8, as: FEIEValues.self) + var feie: FEIE + + /// FIFO status + @ReadOnly(bits: 3..<6) + var fs: FS + + /// Direct mode disable + @ReadWrite(bits: 2..<3, as: DMDISValues.self) + var dmdis: DMDIS + + /// FIFO threshold selection + @ReadWrite(bits: 0..<2, as: FTHValues.self) + var fth: FTH + } +} + +extension DMA2.ST.CR { + struct PBURSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Single transfer + static let Single = Self(rawValue: 0x0) + + /// Incremental burst of 4 beats + static let INCR4 = Self(rawValue: 0x1) + + /// Incremental burst of 8 beats + static let INCR8 = Self(rawValue: 0x2) + + /// Incremental burst of 16 beats + static let INCR16 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct CTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The current target memory is Memory 0 + static let Memory0 = Self(rawValue: 0x0) + + /// The current target memory is Memory 1 + static let Memory1 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct DBMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// No buffer switching at the end of transfer + static let Disabled = Self(rawValue: 0x0) + + /// Memory target switched at the end of the DMA transfer + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct PLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low + static let Low = Self(rawValue: 0x0) + + /// Medium + static let Medium = Self(rawValue: 0x1) + + /// High + static let High = Self(rawValue: 0x2) + + /// Very high + static let VeryHigh = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct PINCOSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The offset size for the peripheral address calculation is linked to the PSIZE + static let PSIZE = Self(rawValue: 0x0) + + /// The offset size for the peripheral address calculation is fixed to 4 (32-bit alignment) + static let Fixed4 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct PSIZEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Byte (8-bit) + static let Bits8 = Self(rawValue: 0x0) + + /// Half-word (16-bit) + static let Bits16 = Self(rawValue: 0x1) + + /// Word (32-bit) + static let Bits32 = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct PINCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Address pointer is fixed + static let Fixed = Self(rawValue: 0x0) + + /// Address pointer is incremented after each data transfer + static let Incremented = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct CIRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Circular mode disabled + static let Disabled = Self(rawValue: 0x0) + + /// Circular mode enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct DIRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Peripheral-to-memory + static let PeripheralToMemory = Self(rawValue: 0x0) + + /// Memory-to-peripheral + static let MemoryToPeripheral = Self(rawValue: 0x1) + + /// Memory-to-memory + static let MemoryToMemory = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct PFCTRLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The DMA is the flow controller + static let DMA = Self(rawValue: 0x0) + + /// The peripheral is the flow controller + static let Peripheral = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct TCIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TC interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// TC interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct HTIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HT interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// HT interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct TEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TE interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// TE interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct DMEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DME interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// DME interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.CR { + struct ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Stream disabled + static let Disabled = Self(rawValue: 0x0) + + /// Stream enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.FCR { + struct FEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// FE interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// FE interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.FCR { + struct DMDISValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Direct mode is enabled + static let Enabled = Self(rawValue: 0x0) + + /// Direct mode is disabled + static let Disabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension DMA2.ST.FCR { + struct FTHValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// 1/4 full FIFO + static let Quarter = Self(rawValue: 0x0) + + /// 1/2 full FIFO + static let Half = Self(rawValue: 0x1) + + /// 3/4 full FIFO + static let ThreeQuarters = Self(rawValue: 0x2) + + /// Full FIFO + static let Full = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-neopixel/Sources/Application/Registers/Device.swift b/stm32-neopixel/Sources/Application/Registers/Device.swift index e1d72549..3d315391 100644 --- a/stm32-neopixel/Sources/Application/Registers/Device.swift +++ b/stm32-neopixel/Sources/Application/Registers/Device.swift @@ -3,22 +3,28 @@ import MMIO /// DMA controller -let dma1 = DMA1(unsafeAddress: 0x4002_6000) +let dma1 = DMA1(unsafeAddress: 0x40026000) + +/// DMA controller +let dma2 = DMA2(unsafeAddress: 0x40026400) /// General-purpose I/Os -let gpioa = GPIOA(unsafeAddress: 0x4002_0000) +let gpioa = GPIOA(unsafeAddress: 0x40020000) /// General-purpose I/Os -let gpiob = GPIOB(unsafeAddress: 0x4002_0400) +let gpiob = GPIOB(unsafeAddress: 0x40020400) /// General-purpose I/Os -let gpioi = GPIOI(unsafeAddress: 0x4002_2000) +let gpioi = GPIOI(unsafeAddress: 0x40022000) /// Reset and clock control -let rcc = RCC(unsafeAddress: 0x4002_3800) +let rcc = RCC(unsafeAddress: 0x40023800) + +/// Serial peripheral interface +let spi1 = SPI1(unsafeAddress: 0x40013000) /// Serial peripheral interface -let spi2 = SPI2(unsafeAddress: 0x4000_3800) +let spi2 = SPI2(unsafeAddress: 0x40003800) /// Universal synchronous asynchronous receiver transmitter -let usart1 = USART1(unsafeAddress: 0x4001_1000) +let usart1 = USART1(unsafeAddress: 0x40011000) diff --git a/stm32-neopixel/Sources/Application/Registers/GPIOA.swift b/stm32-neopixel/Sources/Application/Registers/GPIOA.swift index 1bc077bf..3bc4d2ff 100644 --- a/stm32-neopixel/Sources/Application/Registers/GPIOA.swift +++ b/stm32-neopixel/Sources/Application/Registers/GPIOA.swift @@ -115,7 +115,7 @@ extension GPIOA { var moder1: MODER1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: MODER0Values.self) var moder0: MODER0 } @@ -183,7 +183,7 @@ extension GPIOA { var ot1: OT1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: OT0Values.self) var ot0: OT0 } @@ -251,7 +251,7 @@ extension GPIOA { var ospeedr1: OSPEEDR1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: OSPEEDR0Values.self) var ospeedr0: OSPEEDR0 } @@ -319,7 +319,7 @@ extension GPIOA { var pupdr1: PUPDR1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: PUPDR0Values.self) var pupdr0: PUPDR0 } @@ -455,7 +455,7 @@ extension GPIOA { var odr1: ODR1 /// Port output data (y = 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: ODR0Values.self) var odr0: ODR0 } @@ -595,7 +595,7 @@ extension GPIOA { @Register(bitWidth: 32) struct LCKR { /// Port x lock bit y (y= 0..15) - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: LCKKValues.self) var lckk: LCKK /// Port x lock bit y (y= 0..15) @@ -659,7 +659,7 @@ extension GPIOA { var lck1: LCK1 /// Port x lock bit y (y= 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LCK0Values.self) var lck0: LCK0 } @@ -695,7 +695,7 @@ extension GPIOA { var afrl1: AFRL1 /// Alternate function selection for port x bit y (y = 0..7) - @ReadWrite(bits: 0..<4) + @ReadWrite(bits: 0..<4, as: AFRL0Values.self) var afrl0: AFRL0 } @@ -731,7 +731,7 @@ extension GPIOA { var afrh9: AFRH9 /// Alternate function selection for port x bit y (y = 8..15) - @ReadWrite(bits: 0..<4) + @ReadWrite(bits: 0..<4, as: AFRH8Values.self) var afrh8: AFRH8 } @@ -803,3 +803,273 @@ extension GPIOA { var br15: BR15 } } + +extension GPIOA.MODER { + struct MODER0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Input mode (reset state) + static let Input = Self(rawValue: 0x0) + + /// General purpose output mode + static let Output = Self(rawValue: 0x1) + + /// Alternate function mode + static let Alternate = Self(rawValue: 0x2) + + /// Analog mode + static let Analog = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OTYPER { + struct OT0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Output push-pull (reset state) + static let PushPull = Self(rawValue: 0x0) + + /// Output open-drain + static let OpenDrain = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OSPEEDR { + struct OSPEEDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low speed + static let LowSpeed = Self(rawValue: 0x0) + + /// Medium speed + static let MediumSpeed = Self(rawValue: 0x1) + + /// High speed + static let HighSpeed = Self(rawValue: 0x2) + + /// Very high speed + static let VeryHighSpeed = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.PUPDR { + struct PUPDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No pull-up, pull-down + static let Floating = Self(rawValue: 0x0) + + /// Pull-up + static let PullUp = Self(rawValue: 0x1) + + /// Pull-down + static let PullDown = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.ODR { + struct ODR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Set output to logic low + static let Low = Self(rawValue: 0x0) + + /// Set output to logic high + static let High = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCKKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration lock key not active + static let NotActive = Self(rawValue: 0x0) + + /// Port configuration lock key active + static let Active = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCK0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration not locked + static let Unlocked = Self(rawValue: 0x0) + + /// Port configuration locked + static let Locked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRL { + struct AFRL0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRH { + struct AFRH8Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-neopixel/Sources/Application/Registers/GPIOB.swift b/stm32-neopixel/Sources/Application/Registers/GPIOB.swift index 9988779e..c820355f 100644 --- a/stm32-neopixel/Sources/Application/Registers/GPIOB.swift +++ b/stm32-neopixel/Sources/Application/Registers/GPIOB.swift @@ -2,4 +2,6 @@ import MMIO +/// General-purpose I/Os typealias GPIOB = GPIOA + diff --git a/stm32-neopixel/Sources/Application/Registers/GPIOI.swift b/stm32-neopixel/Sources/Application/Registers/GPIOI.swift index dbdaf85b..f7e28cc8 100644 --- a/stm32-neopixel/Sources/Application/Registers/GPIOI.swift +++ b/stm32-neopixel/Sources/Application/Registers/GPIOI.swift @@ -2,4 +2,6 @@ import MMIO +/// General-purpose I/Os typealias GPIOI = GPIOA + diff --git a/stm32-neopixel/Sources/Application/Registers/RCC.swift b/stm32-neopixel/Sources/Application/Registers/RCC.swift index a06ea27b..4f5842ef 100644 --- a/stm32-neopixel/Sources/Application/Registers/RCC.swift +++ b/stm32-neopixel/Sources/Application/Registers/RCC.swift @@ -103,11 +103,11 @@ struct RCC { /// dedicated clocks configuration register @RegisterBlock(offset: 0x8c) - var dkcfgr1: Register + var dckcfgr1: Register /// dedicated clocks configuration register @RegisterBlock(offset: 0x90) - var dkcfgr2: Register + var dckcfgr2: Register } extension RCC { @@ -131,11 +131,11 @@ extension RCC { var pllon: PLLON /// Clock security system enable - @ReadWrite(bits: 19..<20) + @ReadWrite(bits: 19..<20, as: CSSONValues.self) var csson: CSSON /// HSE clock bypass - @ReadWrite(bits: 18..<19) + @ReadWrite(bits: 18..<19, as: HSEBYPValues.self) var hsebyp: HSEBYP /// HSE clock ready flag @@ -159,107 +159,47 @@ extension RCC { var hsirdy: HSIRDY /// Internal high-speed clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: HSIONValues.self) var hsion: HSION + + /// PLLSAI clock ready flag + @ReadOnly(bits: 29..<30) + var pllsairdy: PLLSAIRDY + + /// PLLSAI enable + @ReadWrite(bits: 28..<29) + var pllsaion: PLLSAION } /// PLL configuration register @Register(bitWidth: 32) struct PLLCFGR { - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 27..<28) - var pllq3: PLLQ3 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 26..<27) - var pllq2: PLLQ2 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 25..<26) - var pllq1: PLLQ1 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 24..<25) - var pllq0: PLLQ0 - /// Main PLL(PLL) and audio PLL (PLLI2S) entry clock source - @ReadWrite(bits: 22..<23) + @ReadWrite(bits: 22..<23, as: PLLSRCValues.self) var pllsrc: PLLSRC - /// Main PLL (PLL) division factor for main system clock - @ReadWrite(bits: 17..<18) - var pllp1: PLLP1 - - /// Main PLL (PLL) division factor for main system clock - @ReadWrite(bits: 16..<17) - var pllp0: PLLP0 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 14..<15) - var plln8: PLLN8 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 13..<14) - var plln7: PLLN7 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 12..<13) - var plln6: PLLN6 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 11..<12) - var plln5: PLLN5 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 10..<11) - var plln4: PLLN4 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 9..<10) - var plln3: PLLN3 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 8..<9) - var plln2: PLLN2 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 7..<8) - var plln1: PLLN1 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 6..<7) - var plln0: PLLN0 - - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 5..<6) - var pllm5: PLLM5 - - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 4..<5) - var pllm4: PLLM4 - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 3..<4) - var pllm3: PLLM3 + @ReadWrite(bits: 0..<6) + var pllm: PLLM - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 2..<3) - var pllm2: PLLM2 + /// Main PLL (PLL) multiplication factor for VCO + @ReadWrite(bits: 6..<15) + var plln: PLLN - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 1..<2) - var pllm1: PLLM1 + /// Main PLL (PLL) division factor for main system clock + @ReadWrite(bits: 16..<18, as: PLLPValues.self) + var pllp: PLLP - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 0..<1) - var pllm0: PLLM0 + /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks + @ReadWrite(bits: 24..<28) + var pllq: PLLQ } /// clock configuration register @Register(bitWidth: 32) struct CFGR { /// Microcontroller clock output 2 - @ReadWrite(bits: 30..<32) + @ReadWrite(bits: 30..<32, as: MCO2Values.self) var mco2: MCO2 /// MCO2 prescaler @@ -267,15 +207,15 @@ extension RCC { var mco2pre: MCO2PRE /// MCO1 prescaler - @ReadWrite(bits: 24..<27) + @ReadWrite(bits: 24..<27, as: MCO1PREValues.self) var mco1pre: MCO1PRE /// I2S clock selection - @ReadWrite(bits: 23..<24) + @ReadWrite(bits: 23..<24, as: I2SSRCValues.self) var i2ssrc: I2SSRC /// Microcontroller clock output 1 - @ReadWrite(bits: 21..<23) + @ReadWrite(bits: 21..<23, as: MCO1Values.self) var mco1: MCO1 /// HSE division factor for RTC clock @@ -287,28 +227,20 @@ extension RCC { var ppre2: PPRE2 /// APB Low speed prescaler (APB1) - @ReadWrite(bits: 10..<13) + @ReadWrite(bits: 10..<13, as: PPRE1Values.self) var ppre1: PPRE1 /// AHB prescaler - @ReadWrite(bits: 4..<8) + @ReadWrite(bits: 4..<8, as: HPREValues.self) var hpre: HPRE - /// System clock switch status - @ReadOnly(bits: 3..<4) - var sws1: SWS1 - - /// System clock switch status - @ReadOnly(bits: 2..<3) - var sws0: SWS0 - /// System clock switch - @ReadWrite(bits: 1..<2) - var sw1: SW1 + @Reserved(bits: 0..<2, as: SWValues.self) + var sw: SW - /// System clock switch - @ReadWrite(bits: 0..<1) - var sw0: SW0 + /// System clock switch status + @Reserved(bits: 2..<4) + var sws: SWS } /// clock interrupt register @@ -371,7 +303,7 @@ extension RCC { var lserdyie: LSERDYIE /// LSI ready interrupt enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: LSIRDYIEValues.self) var lsirdyie: LSIRDYIE /// Clock security system interrupt flag @@ -475,7 +407,7 @@ extension RCC { var gpiobrst: GPIOBRST /// IO port A reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOARSTValues.self) var gpioarst: GPIOARST } @@ -499,7 +431,7 @@ extension RCC { var cryprst: CRYPRST /// Camera interface reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMIRSTValues.self) var dcmirst: DCMIRST } @@ -507,7 +439,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3RSTR { /// Flexible memory controller module reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCRSTValues.self) var fmcrst: FMCRST /// Quad SPI memory controller reset @@ -519,7 +451,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1RSTR { /// TIM2 reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2RSTValues.self) var tim2rst: TIM2RST /// TIM3 reset @@ -568,11 +500,11 @@ extension RCC { /// USART 2 reset @ReadWrite(bits: 17..<18) - var uart2rst: UART2RST + var usart2rst: USART2RST /// USART 3 reset @ReadWrite(bits: 18..<19) - var uart3rst: UART3RST + var usart3rst: USART3RST /// USART 4 reset @ReadWrite(bits: 19..<20) @@ -639,7 +571,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2RSTR { /// TIM1 reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1RSTValues.self) var tim1rst: TIM1RST /// TIM8 reset @@ -748,7 +680,7 @@ extension RCC { /// CCM data RAM clock enable @ReadWrite(bits: 20..<21) - var ccmdataramen: CCMDATARAMEN + var dtcmramen: DTCMRAMEN /// Backup SRAM interface clock enable @ReadWrite(bits: 18..<19) @@ -799,7 +731,7 @@ extension RCC { var gpioben: GPIOBEN /// IO port A clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOAENValues.self) var gpioaen: GPIOAEN } @@ -823,7 +755,7 @@ extension RCC { var crypen: CRYPEN /// Camera interface enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMIENValues.self) var dcmien: DCMIEN } @@ -831,7 +763,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3ENR { /// Flexible memory controller module clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCENValues.self) var fmcen: FMCEN /// Quad SPI memory controller clock enable @@ -843,7 +775,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1ENR { /// TIM2 clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2ENValues.self) var tim2en: TIM2EN /// TIM3 clock enable @@ -936,11 +868,11 @@ extension RCC { /// UART7 clock enable @ReadWrite(bits: 30..<31) - var uart7enr: UART7ENR + var uart7en: UART7EN /// UART8 clock enable @ReadWrite(bits: 31..<32) - var uart8enr: UART8ENR + var uart8en: UART8EN /// SPDIF-RX clock enable @ReadWrite(bits: 16..<17) @@ -952,7 +884,7 @@ extension RCC { /// Low power timer 1 clock enable @ReadWrite(bits: 9..<10) - var lptmi1en: LPTMI1EN + var lptim1en: LPTIM1EN /// I2C4 clock enable @ReadWrite(bits: 24..<25) @@ -963,7 +895,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2ENR { /// TIM1 clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1ENValues.self) var tim1en: TIM1EN /// TIM8 clock enable @@ -996,7 +928,7 @@ extension RCC { /// SPI4 clock enable @ReadWrite(bits: 13..<14) - var spi4enr: SPI4ENR + var spi4en: SPI4EN /// System configuration controller clock enable @ReadWrite(bits: 14..<15) @@ -1016,11 +948,11 @@ extension RCC { /// SPI5 clock enable @ReadWrite(bits: 20..<21) - var spi5enr: SPI5ENR + var spi5en: SPI5EN /// SPI6 clock enable @ReadWrite(bits: 21..<22) - var spi6enr: SPI6ENR + var spi6en: SPI6EN /// SAI1 clock enable @ReadWrite(bits: 22..<23) @@ -1043,7 +975,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB1LPENR { /// IO port A clock enable during sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOALPENValues.self) var gpioalpen: GPIOALPEN /// IO port B clock enable during Sleep mode @@ -1145,6 +1077,14 @@ extension RCC { /// USB OTG HS ULPI clock enable during Sleep mode @ReadWrite(bits: 30..<31) var otghsulpilpen: OTGHSULPILPEN + + /// AXI to AHB bridge clock enable during Sleep mode + @ReadWrite(bits: 13..<14) + var axilpen: AXILPEN + + /// DTCM RAM interface clock enable during Sleep mode + @ReadWrite(bits: 20..<21) + var dtcmlpen: DTCMLPEN } /// AHB2 peripheral clock enable in low power mode register @@ -1167,7 +1107,7 @@ extension RCC { var cryplpen: CRYPLPEN /// Camera interface enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMILPENValues.self) var dcmilpen: DCMILPEN } @@ -1175,7 +1115,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3LPENR { /// Flexible memory controller module clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCLPENValues.self) var fmclpen: FMCLPEN /// Quand SPI memory controller clock enable during Sleep mode @@ -1187,7 +1127,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1LPENR { /// TIM2 clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2LPENValues.self) var tim2lpen: TIM2LPEN /// TIM3 clock enable during Sleep mode @@ -1307,7 +1247,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2LPENR { /// TIM1 clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1LPENValues.self) var tim1lpen: TIM1LPEN /// TIM8 clock enable during Sleep mode @@ -1387,23 +1327,15 @@ extension RCC { @Register(bitWidth: 32) struct BDCR { /// Backup domain software reset - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: BDRSTValues.self) var bdrst: BDRST /// RTC clock enable - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: RTCENValues.self) var rtcen: RTCEN - /// RTC clock source selection - @ReadWrite(bits: 9..<10) - var rtcsel1: RTCSEL1 - - /// RTC clock source selection - @ReadWrite(bits: 8..<9) - var rtcsel0: RTCSEL0 - /// External low-speed oscillator bypass - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: LSEBYPValues.self) var lsebyp: LSEBYP /// External low-speed oscillator ready @@ -1411,8 +1343,16 @@ extension RCC { var lserdy: LSERDY /// External low-speed oscillator enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LSEONValues.self) var lseon: LSEON + + /// LSE oscillator drive capability + @ReadWrite(bits: 3..<5, as: LSEDRVValues.self) + var lsedrv: LSEDRV + + /// RTC clock source selection + @Reserved(bits: 8..<10, as: RTCSELValues.self) + var rtcsel: RTCSEL } /// clock control & status register @@ -1455,7 +1395,7 @@ extension RCC { var lsirdy: LSIRDY /// Internal low-speed oscillator enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LSIONValues.self) var lsion: LSION } @@ -1463,11 +1403,11 @@ extension RCC { @Register(bitWidth: 32) struct SSCGR { /// Spread spectrum modulation enable - @ReadWrite(bits: 31..<32) + @ReadWrite(bits: 31..<32, as: SSCGENValues.self) var sscgen: SSCGEN /// Spread Select - @ReadWrite(bits: 30..<31) + @ReadWrite(bits: 30..<31, as: SPREADSELValues.self) var spreadsel: SPREADSEL /// Incrementation step @@ -1493,6 +1433,10 @@ extension RCC { /// PLLI2S multiplication factor for VCO @ReadWrite(bits: 6..<15) var plli2sn: PLLI2SN + + /// PLLI2S division factor for SPDIFRX clock + @ReadWrite(bits: 16..<18, as: PLLI2SPValues.self) + var plli2sp: PLLI2SP } /// PLL configuration register @@ -1503,7 +1447,7 @@ extension RCC { var pllsain: PLLSAIN /// PLLSAI division factor for 48MHz clock - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: PLLSAIPValues.self) var pllsaip: PLLSAIP /// PLLSAI division factor for SAI clock @@ -1517,41 +1461,41 @@ extension RCC { /// dedicated clocks configuration register @Register(bitWidth: 32) - struct DKCFGR1 { + struct DCKCFGR1 { /// PLLI2S division factor for SAI1 clock - @ReadWrite(bits: 0..<5) - var plli2sdiv: PLLI2SDIV + @ReadWrite(bits: 0..<5, as: PLLI2SDIVQValues.self) + var plli2sdivq: PLLI2SDIVQ /// PLLSAI division factor for SAI1 clock - @ReadWrite(bits: 8..<13) + @ReadWrite(bits: 8..<13, as: PLLSAIDIVQValues.self) var pllsaidivq: PLLSAIDIVQ /// division factor for LCD_CLK - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: PLLSAIDIVRValues.self) var pllsaidivr: PLLSAIDIVR /// SAI1 clock source selection - @ReadWrite(bits: 20..<22) + @ReadWrite(bits: 20..<22, as: SAI1SELValues.self) var sai1sel: SAI1SEL /// SAI2 clock source selection - @ReadWrite(bits: 22..<24) + @ReadWrite(bits: 22..<24, as: SAI2SELValues.self) var sai2sel: SAI2SEL /// Timers clocks prescalers selection - @ReadWrite(bits: 24..<25) + @ReadWrite(bits: 24..<25, as: TIMPREValues.self) var timpre: TIMPRE } /// dedicated clocks configuration register @Register(bitWidth: 32) - struct DKCFGR2 { + struct DCKCFGR2 { /// USART 1 clock source selection - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: USART1SELValues.self) var usart1sel: USART1SEL /// USART 2 clock source selection - @ReadWrite(bits: 2..<4) + @ReadWrite(bits: 2..<4, as: USART2SELValues.self) var usart2sel: USART2SEL /// USART 3 clock source selection @@ -1579,7 +1523,7 @@ extension RCC { var uart8sel: UART8SEL /// I2C1 clock source selection - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: I2C1SELValues.self) var i2c1sel: I2C1SEL /// I2C2 clock source selection @@ -1595,19 +1539,1295 @@ extension RCC { var i2c4sel: I2C4SEL /// Low power timer 1 clock source selection - @ReadWrite(bits: 24..<26) + @ReadWrite(bits: 24..<26, as: LPTIM1SELValues.self) var lptim1sel: LPTIM1SEL /// HDMI-CEC clock source selection - @ReadWrite(bits: 26..<27) + @ReadWrite(bits: 26..<27, as: CECSELValues.self) var cecsel: CECSEL /// 48MHz clock source selection - @ReadWrite(bits: 27..<28) + @ReadWrite(bits: 27..<28, as: CK48MSELValues.self) var ck48msel: CK48MSEL /// SDMMC clock source selection - @ReadWrite(bits: 28..<29) - var sdmmcsel: SDMMCSEL + @ReadWrite(bits: 28..<29, as: SDMMC1SELValues.self) + var sdmmc1sel: SDMMC1SEL + } +} + +extension RCC.CR { + struct CSSONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock security system disabled (clock detector OFF) + static let Off = Self(rawValue: 0x0) + + /// Clock security system enable (clock detector ON if the HSE is ready, OFF if not) + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// HSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock Off + static let Off = Self(rawValue: 0x0) + + /// Clock On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSI clock selected as PLL and PLLI2S clock entry + static let HSI = Self(rawValue: 0x0) + + /// HSE oscillator clock selected as PLL and PLLI2S clock entry + static let HSE = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLP=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLP=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLP=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLLP=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO2Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// System clock (SYSCLK) selected + static let SYSCLK = Self(rawValue: 0x0) + + /// PLLI2S clock selected + static let PLLI2S = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1PREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// No division + static let Div1 = Self(rawValue: 0x0) + + /// Division by 2 + static let Div2 = Self(rawValue: 0x4) + + /// Division by 3 + static let Div3 = Self(rawValue: 0x5) + + /// Division by 4 + static let Div4 = Self(rawValue: 0x6) + + /// Division by 5 + static let Div5 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct I2SSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// PLLI2S clock used as I2S clock source + static let PLLI2S = Self(rawValue: 0x0) + + /// External clock mapped on the I2S_CKIN pin used as I2S clock source + static let CKIN = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI clock selected + static let HSI = Self(rawValue: 0x0) + + /// LSE oscillator selected + static let LSE = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct PPRE1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// HCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// HCLK divided by 2 + static let Div2 = Self(rawValue: 0x4) + + /// HCLK divided by 4 + static let Div4 = Self(rawValue: 0x5) + + /// HCLK divided by 8 + static let Div8 = Self(rawValue: 0x6) + + /// HCLK divided by 16 + static let Div16 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct HPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// SYSCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// SYSCLK divided by 2 + static let Div2 = Self(rawValue: 0x8) + + /// SYSCLK divided by 4 + static let Div4 = Self(rawValue: 0x9) + + /// SYSCLK divided by 8 + static let Div8 = Self(rawValue: 0xa) + + /// SYSCLK divided by 16 + static let Div16 = Self(rawValue: 0xb) + + /// SYSCLK divided by 64 + static let Div64 = Self(rawValue: 0xc) + + /// SYSCLK divided by 128 + static let Div128 = Self(rawValue: 0xd) + + /// SYSCLK divided by 256 + static let Div256 = Self(rawValue: 0xe) + + /// SYSCLK divided by 512 + static let Div512 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct SWValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI selected as system clock + static let HSI = Self(rawValue: 0x0) + + /// HSE selected as system clock + static let HSE = Self(rawValue: 0x1) + + /// PLL selected as system clock + static let PLL = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CIR { + struct LSIRDYIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1RSTR { + struct GPIOARSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2RSTR { + struct DCMIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3RSTR { + struct FMCRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1RSTR { + struct TIM2RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2RSTR { + struct TIM1RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1ENR { + struct GPIOAENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2ENR { + struct DCMIENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3ENR { + struct FMCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1ENR { + struct TIM2ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2ENR { + struct TIM1ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1LPENR { + struct GPIOALPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2LPENR { + struct DCMILPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3LPENR { + struct FMCLPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1LPENR { + struct TIM2LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2LPENR { + struct TIM1LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct BDRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset not activated + static let Disabled = Self(rawValue: 0x0) + + /// Reset the entire RTC domain + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RTC clock disabled + static let Disabled = Self(rawValue: 0x0) + + /// RTC clock enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// LSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSE oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEDRVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low drive capacity + static let Low = Self(rawValue: 0x0) + + /// Medium-high drive capacity + static let MediumHigh = Self(rawValue: 0x1) + + /// Medium-low drive capacity + static let MediumLow = Self(rawValue: 0x2) + + /// High drive capacity + static let High = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No clock + static let NoClock = Self(rawValue: 0x0) + + /// LSE oscillator clock used as RTC clock + static let LSE = Self(rawValue: 0x1) + + /// LSI oscillator clock used as RTC clock + static let LSI = Self(rawValue: 0x2) + + /// HSE oscillator clock divided by a prescaler used as RTC clock + static let HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CSR { + struct LSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSI oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSI oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SSCGENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Spread spectrum modulation disabled + static let Disabled = Self(rawValue: 0x0) + + /// Spread spectrum modulation enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SPREADSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Center spread + static let Center = Self(rawValue: 0x0) + + /// Down spread + static let Down = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLI2SCFGR { + struct PLLI2SPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLSAICFGR { + struct PLLSAIPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLI2SDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLI2SDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLI2SDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLI2SDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLI2SDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLI2SDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLI2SDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLI2SDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLI2SDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLI2SDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLI2SDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLI2SDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLI2SDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLI2SDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLI2SDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLI2SDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLI2SDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLI2SDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLI2SDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLI2SDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLI2SDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLI2SDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLI2SDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLI2SDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLI2SDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLI2SDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLI2SDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLI2SDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLI2SDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLI2SDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLI2SDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLI2SDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLI2SDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLSAIDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLSAIDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLSAIDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLSAIDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLSAIDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLSAIDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLSAIDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLSAIDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLSAIDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLSAIDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLSAIDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLSAIDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLSAIDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLSAIDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLSAIDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLSAIDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLSAIDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLSAIDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLSAIDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLSAIDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLSAIDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLSAIDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLSAIDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLSAIDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLSAIDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLSAIDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLSAIDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLSAIDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLSAIDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLSAIDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLSAIDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLSAIDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLSAIDIVR = /2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLSAIDIVR = /4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLSAIDIVR = /8 + static let Div8 = Self(rawValue: 0x2) + + /// PLLSAIDIVR = /16 + static let Div16 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI1 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI1 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI1 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI1 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI2 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI2 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI2 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI2 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct TIMPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// If the APB prescaler is configured 1, TIMxCLK = PCLKx. Otherwise, TIMxCLK = 2xPCLKx + static let Mul1Or2 = Self(rawValue: 0x0) + + /// If the APB prescaler is configured 1, 2 or 4, TIMxCLK = HCLK. Otherwise, TIMxCLK = 4xPCLKx + static let Mul1Or4 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB2 clock (PCLK2) is selected as USART clock + static let APB2 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) is selected as USART clock + static let APB1 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct I2C1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB clock selected as I2C clock + static let APB = Self(rawValue: 0x0) + + /// System clock selected as I2C clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock selected as I2C clock + static let HSI = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct LPTIM1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) selected as LPTILM1 clock + static let APB1 = Self(rawValue: 0x0) + + /// LSI clock is selected as LPTILM1 clock + static let LSI = Self(rawValue: 0x1) + + /// HSI clock is selected as LPTILM1 clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as LPTILM1 clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CECSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE clock is selected as HDMI-CEC clock + static let LSE = Self(rawValue: 0x0) + + /// HSI divided by 488 clock is selected as HDMI-CEC clock + static let HSI_Div488 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CK48MSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48MHz clock from PLL is selected + static let PLL = Self(rawValue: 0x0) + + /// 48MHz clock from PLLSAI is selected + static let PLLSAI = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct SDMMC1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48 MHz clock is selected as SD clock + static let CK48M = Self(rawValue: 0x0) + + /// System clock is selected as SD clock + static let SYSCLK = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } } } diff --git a/stm32-neopixel/Sources/Application/Registers/SPI1.swift b/stm32-neopixel/Sources/Application/Registers/SPI1.swift new file mode 100644 index 00000000..d182ff40 --- /dev/null +++ b/stm32-neopixel/Sources/Application/Registers/SPI1.swift @@ -0,0 +1,1043 @@ +// Generated by svd2swift. + +import MMIO + +/// Serial peripheral interface +@RegisterBlock +struct SPI1 { + /// control register 1 + @RegisterBlock(offset: 0x0) + var cr1: Register + + /// control register 2 + @RegisterBlock(offset: 0x4) + var cr2: Register + + /// status register + @RegisterBlock(offset: 0x8) + var sr: Register + + /// data register + @RegisterBlock(offset: 0xc) + var dr: Register + + /// CRC polynomial register + @RegisterBlock(offset: 0x10) + var crcpr: Register + + /// RX CRC register + @RegisterBlock(offset: 0x14) + var rxcrcr: Register + + /// TX CRC register + @RegisterBlock(offset: 0x18) + var txcrcr: Register + + /// I2S configuration register + @RegisterBlock(offset: 0x1c) + var i2scfgr: Register + + /// I2S prescaler register + @RegisterBlock(offset: 0x20) + var i2spr: Register +} + +extension SPI1 { + /// control register 1 + @Register(bitWidth: 32) + struct CR1 { + /// Bidirectional data mode enable + @ReadWrite(bits: 15..<16, as: BIDIMODEValues.self) + var bidimode: BIDIMODE + + /// Output enable in bidirectional mode + @ReadWrite(bits: 14..<15, as: BIDIOEValues.self) + var bidioe: BIDIOE + + /// Hardware CRC calculation enable + @ReadWrite(bits: 13..<14, as: CRCENValues.self) + var crcen: CRCEN + + /// CRC transfer next + @ReadWrite(bits: 12..<13, as: CRCNEXTValues.self) + var crcnext: CRCNEXT + + /// CRC length + @ReadWrite(bits: 11..<12, as: CRCLValues.self) + var crcl: CRCL + + /// Receive only + @ReadWrite(bits: 10..<11, as: RXONLYValues.self) + var rxonly: RXONLY + + /// Software slave management + @ReadWrite(bits: 9..<10, as: SSMValues.self) + var ssm: SSM + + /// Internal slave select + @ReadWrite(bits: 8..<9, as: SSIValues.self) + var ssi: SSI + + /// Frame format + @ReadWrite(bits: 7..<8, as: LSBFIRSTValues.self) + var lsbfirst: LSBFIRST + + /// SPI enable + @ReadWrite(bits: 6..<7, as: SPEValues.self) + var spe: SPE + + /// Baud rate control + @ReadWrite(bits: 3..<6, as: BRValues.self) + var br: BR + + /// Master selection + @ReadWrite(bits: 2..<3, as: MSTRValues.self) + var mstr: MSTR + + /// Clock polarity + @ReadWrite(bits: 1..<2, as: CPOLValues.self) + var cpol: CPOL + + /// Clock phase + @ReadWrite(bits: 0..<1, as: CPHAValues.self) + var cpha: CPHA + } + + /// control register 2 + @Register(bitWidth: 32) + struct CR2 { + /// Rx buffer DMA enable + @ReadWrite(bits: 0..<1, as: RXDMAENValues.self) + var rxdmaen: RXDMAEN + + /// Tx buffer DMA enable + @ReadWrite(bits: 1..<2, as: TXDMAENValues.self) + var txdmaen: TXDMAEN + + /// SS output enable + @ReadWrite(bits: 2..<3, as: SSOEValues.self) + var ssoe: SSOE + + /// NSS pulse management + @ReadWrite(bits: 3..<4, as: NSSPValues.self) + var nssp: NSSP + + /// Frame format + @ReadWrite(bits: 4..<5, as: FRFValues.self) + var frf: FRF + + /// Error interrupt enable + @ReadWrite(bits: 5..<6, as: ERRIEValues.self) + var errie: ERRIE + + /// RX buffer not empty interrupt enable + @ReadWrite(bits: 6..<7, as: RXNEIEValues.self) + var rxneie: RXNEIE + + /// Tx buffer empty interrupt enable + @ReadWrite(bits: 7..<8, as: TXEIEValues.self) + var txeie: TXEIE + + /// Data size + @ReadWrite(bits: 8..<12, as: DSValues.self) + var ds: DS + + /// FIFO reception threshold + @ReadWrite(bits: 12..<13, as: FRXTHValues.self) + var frxth: FRXTH + + /// Last DMA transfer for reception + @ReadWrite(bits: 13..<14, as: LDMA_RXValues.self) + var ldma_rx: LDMA_RX + + /// Last DMA transfer for transmission + @ReadWrite(bits: 14..<15, as: LDMA_TXValues.self) + var ldma_tx: LDMA_TX + } + + /// status register + @Register(bitWidth: 32) + struct SR { + /// Frame format error + @ReadOnly(bits: 8..<9) + var fre: FRE + + /// Busy flag + @ReadOnly(bits: 7..<8) + var bsy: BSY + + /// Overrun flag + @ReadOnly(bits: 6..<7) + var ovr: OVR + + /// Mode fault + @ReadOnly(bits: 5..<6) + var modf: MODF + + /// CRC error flag + @ReadWrite(bits: 4..<5) + var crcerr: CRCERR + + /// Underrun flag + @ReadOnly(bits: 3..<4) + var udr: UDR + + /// Channel side + @ReadOnly(bits: 2..<3) + var chside: CHSIDE + + /// Transmit buffer empty + @ReadOnly(bits: 1..<2) + var txe: TXE + + /// Receive buffer not empty + @ReadOnly(bits: 0..<1) + var rxne: RXNE + + /// FIFO reception level + @ReadOnly(bits: 9..<11) + var frlvl: FRLVL + + /// FIFO Transmission Level + @ReadOnly(bits: 11..<13) + var ftlvl: FTLVL + } + + /// data register + @Register(bitWidth: 32) + struct DR { + /// Data register + @ReadWrite(bits: 0..<16) + var dr_field: DR_FIELD + } + + /// CRC polynomial register + @Register(bitWidth: 32) + struct CRCPR { + /// CRC polynomial register + @ReadWrite(bits: 0..<16) + var crcpoly: CRCPOLY + } + + /// RX CRC register + @Register(bitWidth: 32) + struct RXCRCR { + /// Rx CRC register + @ReadOnly(bits: 0..<16) + var rxcrc: RxCRC + } + + /// TX CRC register + @Register(bitWidth: 32) + struct TXCRCR { + /// Tx CRC register + @ReadOnly(bits: 0..<16) + var txcrc: TxCRC + } + + /// I2S configuration register + @Register(bitWidth: 32) + struct I2SCFGR { + /// I2S mode selection + @ReadWrite(bits: 11..<12, as: I2SMODValues.self) + var i2smod: I2SMOD + + /// I2S Enable + @ReadWrite(bits: 10..<11, as: I2SEValues.self) + var i2se: I2SE + + /// I2S configuration mode + @ReadWrite(bits: 8..<10, as: I2SCFGValues.self) + var i2scfg: I2SCFG + + /// PCM frame synchronization + @ReadWrite(bits: 7..<8, as: PCMSYNCValues.self) + var pcmsync: PCMSYNC + + /// I2S standard selection + @ReadWrite(bits: 4..<6, as: I2SSTDValues.self) + var i2sstd: I2SSTD + + /// Steady state clock polarity + @ReadWrite(bits: 3..<4, as: CKPOLValues.self) + var ckpol: CKPOL + + /// Data length to be transferred + @ReadWrite(bits: 1..<3, as: DATLENValues.self) + var datlen: DATLEN + + /// Channel length (number of bits per audio channel) + @ReadWrite(bits: 0..<1, as: CHLENValues.self) + var chlen: CHLEN + + /// Asynchronous start enable + @ReadWrite(bits: 12..<13) + var astrten: ASTRTEN + } + + /// I2S prescaler register + @Register(bitWidth: 32) + struct I2SPR { + /// Master clock output enable + @ReadWrite(bits: 9..<10, as: MCKOEValues.self) + var mckoe: MCKOE + + /// Odd factor for the prescaler + @ReadWrite(bits: 8..<9, as: ODDValues.self) + var odd: ODD + + /// I2S Linear prescaler + @ReadWrite(bits: 0..<8) + var i2sdiv: I2SDIV + } +} + +extension SPI1.CR1 { + struct BIDIMODEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 2-line unidirectional data mode selected + static let Unidirectional = Self(rawValue: 0x0) + + /// 1-line bidirectional data mode selected + static let Bidirectional = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct BIDIOEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Output disabled (receive-only mode) + static let OutputDisabled = Self(rawValue: 0x0) + + /// Output enabled (transmit-only mode) + static let OutputEnabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct CRCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CRC calculation disabled + static let Disabled = Self(rawValue: 0x0) + + /// CRC calculation enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct CRCNEXTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Next transmit value is from Tx buffer + static let TxBuffer = Self(rawValue: 0x0) + + /// Next transmit value is from Tx CRC register + static let CRC = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct CRCLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 8-bit CRC length + static let EightBit = Self(rawValue: 0x0) + + /// 16-bit CRC length + static let SixteenBit = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct RXONLYValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Full duplex (Transmit and receive) + static let FullDuplex = Self(rawValue: 0x0) + + /// Output disabled (Receive-only mode) + static let OutputDisabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct SSMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Software slave management disabled + static let Disabled = Self(rawValue: 0x0) + + /// Software slave management enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct SSIValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 0 is forced onto the NSS pin and the I/O value of the NSS pin is ignored + static let SlaveSelected = Self(rawValue: 0x0) + + /// 1 is forced onto the NSS pin and the I/O value of the NSS pin is ignored + static let SlaveNotSelected = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct LSBFIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Data is transmitted/received with the MSB first + static let MSBFirst = Self(rawValue: 0x0) + + /// Data is transmitted/received with the LSB first + static let LSBFirst = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct SPEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Peripheral disabled + static let Disabled = Self(rawValue: 0x0) + + /// Peripheral enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct BRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// f_PCLK / 2 + static let Div2 = Self(rawValue: 0x0) + + /// f_PCLK / 4 + static let Div4 = Self(rawValue: 0x1) + + /// f_PCLK / 8 + static let Div8 = Self(rawValue: 0x2) + + /// f_PCLK / 16 + static let Div16 = Self(rawValue: 0x3) + + /// f_PCLK / 32 + static let Div32 = Self(rawValue: 0x4) + + /// f_PCLK / 64 + static let Div64 = Self(rawValue: 0x5) + + /// f_PCLK / 128 + static let Div128 = Self(rawValue: 0x6) + + /// f_PCLK / 256 + static let Div256 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct MSTRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Slave configuration + static let Slave = Self(rawValue: 0x0) + + /// Master configuration + static let Master = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct CPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CK to 0 when idle + static let IdleLow = Self(rawValue: 0x0) + + /// CK to 1 when idle + static let IdleHigh = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR1 { + struct CPHAValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The first clock transition is the first data capture edge + static let FirstEdge = Self(rawValue: 0x0) + + /// The second clock transition is the first data capture edge + static let SecondEdge = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct RXDMAENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Rx buffer DMA disabled + static let Disabled = Self(rawValue: 0x0) + + /// Rx buffer DMA enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct TXDMAENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Tx buffer DMA disabled + static let Disabled = Self(rawValue: 0x0) + + /// Tx buffer DMA enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct SSOEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// SS output is disabled in master mode + static let Disabled = Self(rawValue: 0x0) + + /// SS output is enabled in master mode + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct NSSPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// No NSS pulse + static let NoPulse = Self(rawValue: 0x0) + + /// NSS pulse generated + static let PulseGenerated = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct FRFValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// SPI Motorola mode + static let Motorola = Self(rawValue: 0x0) + + /// SPI TI mode + static let TI = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct ERRIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Error interrupt masked + static let Masked = Self(rawValue: 0x0) + + /// Error interrupt not masked + static let NotMasked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct RXNEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RXE interrupt masked + static let Masked = Self(rawValue: 0x0) + + /// RXE interrupt not masked + static let NotMasked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct TXEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TXE interrupt masked + static let Masked = Self(rawValue: 0x0) + + /// TXE interrupt not masked + static let NotMasked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct DSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// 4-bit + static let FourBit = Self(rawValue: 0x3) + + /// 5-bit + static let FiveBit = Self(rawValue: 0x4) + + /// 6-bit + static let SixBit = Self(rawValue: 0x5) + + /// 7-bit + static let SevenBit = Self(rawValue: 0x6) + + /// 8-bit + static let EightBit = Self(rawValue: 0x7) + + /// 9-bit + static let NineBit = Self(rawValue: 0x8) + + /// 10-bit + static let TenBit = Self(rawValue: 0x9) + + /// 11-bit + static let ElevenBit = Self(rawValue: 0xa) + + /// 12-bit + static let TwelveBit = Self(rawValue: 0xb) + + /// 13-bit + static let ThirteenBit = Self(rawValue: 0xc) + + /// 14-bit + static let FourteenBit = Self(rawValue: 0xd) + + /// 15-bit + static let FifteenBit = Self(rawValue: 0xe) + + /// 16-bit + static let SixteenBit = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct FRXTHValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RXNE event is generated if the FIFO level is greater than or equal to 1/2 (16-bit) + static let Half = Self(rawValue: 0x0) + + /// RXNE event is generated if the FIFO level is greater than or equal to 1/4 (8-bit) + static let Quarter = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct LDMA_RXValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Number of data to transfer for receive is even + static let Even = Self(rawValue: 0x0) + + /// Number of data to transfer for receive is odd + static let Odd = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.CR2 { + struct LDMA_TXValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Number of data to transfer for transmit is even + static let Even = Self(rawValue: 0x0) + + /// Number of data to transfer for transmit is odd + static let Odd = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct I2SMODValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// SPI mode is selected + static let SPIMode = Self(rawValue: 0x0) + + /// I2S mode is selected + static let I2SMode = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct I2SEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// I2S peripheral is disabled + static let Disabled = Self(rawValue: 0x0) + + /// I2S peripheral is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct I2SCFGValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Slave - transmit + static let SlaveTx = Self(rawValue: 0x0) + + /// Slave - receive + static let SlaveRx = Self(rawValue: 0x1) + + /// Master - transmit + static let MasterTx = Self(rawValue: 0x2) + + /// Master - receive + static let MasterRx = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct PCMSYNCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Short frame synchronisation + static let Short = Self(rawValue: 0x0) + + /// Long frame synchronisation + static let Long = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct I2SSTDValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// I2S Philips standard + static let Philips = Self(rawValue: 0x0) + + /// MSB justified standard + static let MSB = Self(rawValue: 0x1) + + /// LSB justified standard + static let LSB = Self(rawValue: 0x2) + + /// PCM standard + static let PCM = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct CKPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// I2S clock inactive state is low level + static let IdleLow = Self(rawValue: 0x0) + + /// I2S clock inactive state is high level + static let IdleHigh = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct DATLENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// 16-bit data length + static let SixteenBit = Self(rawValue: 0x0) + + /// 24-bit data length + static let TwentyFourBit = Self(rawValue: 0x1) + + /// 32-bit data length + static let ThirtyTwoBit = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SCFGR { + struct CHLENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 16-bit wide + static let SixteenBit = Self(rawValue: 0x0) + + /// 32-bit wide + static let ThirtyTwoBit = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SPR { + struct MCKOEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Master clock output is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Master clock output is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension SPI1.I2SPR { + struct ODDValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Real divider value is I2SDIV * 2 + static let Even = Self(rawValue: 0x0) + + /// Real divider value is (I2SDIV * 2) + 1 + static let Odd = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-neopixel/Sources/Application/Registers/SPI2.swift b/stm32-neopixel/Sources/Application/Registers/SPI2.swift index 5bb2e7b0..2e66bcc9 100644 --- a/stm32-neopixel/Sources/Application/Registers/SPI2.swift +++ b/stm32-neopixel/Sources/Application/Registers/SPI2.swift @@ -1,295 +1,7 @@ // Generated by svd2swift. -// swift-format-ignore-file - import MMIO /// Serial peripheral interface -@RegisterBlock -struct SPI2 { - /// control register 1 - @RegisterBlock(offset: 0x0) - var cr1: Register - - /// control register 2 - @RegisterBlock(offset: 0x4) - var cr2: Register - - /// status register - @RegisterBlock(offset: 0x8) - var sr: Register - - /// data register - @RegisterBlock(offset: 0xc) - var dr: Register - - /// CRC polynomial register - @RegisterBlock(offset: 0x10) - var crcpr: Register - - /// RX CRC register - @RegisterBlock(offset: 0x14) - var rxcrcr: Register - - /// TX CRC register - @RegisterBlock(offset: 0x18) - var txcrcr: Register - - /// I2S configuration register - @RegisterBlock(offset: 0x1c) - var i2scfgr: Register - - /// I2S prescaler register - @RegisterBlock(offset: 0x20) - var i2spr: Register -} - -extension SPI2 { - /// control register 1 - @Register(bitWidth: 32) - struct CR1 { - /// Bidirectional data mode enable - @ReadWrite(bits: 15..<16) - var bidimode: BIDIMODE - - /// Output enable in bidirectional mode - @ReadWrite(bits: 14..<15) - var bidioe: BIDIOE - - /// Hardware CRC calculation enable - @ReadWrite(bits: 13..<14) - var crcen: CRCEN - - /// CRC transfer next - @ReadWrite(bits: 12..<13) - var crcnext: CRCNEXT - - /// CRC length - @ReadWrite(bits: 11..<12) - var crcl: CRCL - - /// Receive only - @ReadWrite(bits: 10..<11) - var rxonly: RXONLY - - /// Software slave management - @ReadWrite(bits: 9..<10) - var ssm: SSM - - /// Internal slave select - @ReadWrite(bits: 8..<9) - var ssi: SSI - - /// Frame format - @ReadWrite(bits: 7..<8) - var lsbfirst: LSBFIRST - - /// SPI enable - @ReadWrite(bits: 6..<7) - var spe: SPE - - /// Baud rate control - @ReadWrite(bits: 3..<6) - var br: BR - - /// Master selection - @ReadWrite(bits: 2..<3) - var mstr: MSTR - - /// Clock polarity - @ReadWrite(bits: 1..<2) - var cpol: CPOL - - /// Clock phase - @ReadWrite(bits: 0..<1) - var cpha: CPHA - } - - /// control register 2 - @Register(bitWidth: 32) - struct CR2 { - /// Rx buffer DMA enable - @ReadWrite(bits: 0..<1) - var rxdmaen: RXDMAEN - - /// Tx buffer DMA enable - @ReadWrite(bits: 1..<2) - var txdmaen: TXDMAEN - - /// SS output enable - @ReadWrite(bits: 2..<3) - var ssoe: SSOE - - /// NSS pulse management - @ReadWrite(bits: 3..<4) - var nssp: NSSP - - /// Frame format - @ReadWrite(bits: 4..<5) - var frf: FRF - - /// Error interrupt enable - @ReadWrite(bits: 5..<6) - var errie: ERRIE - - /// RX buffer not empty interrupt enable - @ReadWrite(bits: 6..<7) - var rxneie: RXNEIE - - /// Tx buffer empty interrupt enable - @ReadWrite(bits: 7..<8) - var txeie: TXEIE - - /// Data size - @ReadWrite(bits: 8..<12) - var ds: DS - - /// FIFO reception threshold - @ReadWrite(bits: 12..<13) - var frxth: FRXTH - - /// Last DMA transfer for reception - @ReadWrite(bits: 13..<14) - var ldma_rx: LDMA_RX - - /// Last DMA transfer for transmission - @ReadWrite(bits: 14..<15) - var ldma_tx: LDMA_TX - } - - /// status register - @Register(bitWidth: 32) - struct SR { - /// Busy flag - @ReadOnly(bits: 7..<8) - var bsy: BSY - - /// Overrun flag - @ReadOnly(bits: 6..<7) - var ovr: OVR - - /// Mode fault - @ReadOnly(bits: 5..<6) - var modf: MODF - - /// CRC error flag - @ReadWrite(bits: 4..<5) - var crcerr: CRCERR - - /// Underrun flag - @ReadOnly(bits: 3..<4) - var udr: UDR - - /// Channel side - @ReadOnly(bits: 2..<3) - var chside: CHSIDE - - /// Transmit buffer empty - @ReadOnly(bits: 1..<2) - var txe: TXE - - /// Receive buffer not empty - @ReadOnly(bits: 0..<1) - var rxne: RXNE - - /// Frame format error - @ReadOnly(bits: 8..<9) - var fre: FRE - - /// FIFO reception level - @ReadOnly(bits: 9..<11) - var frlvl: FRLVL - - /// FIFO Transmission Level - @ReadOnly(bits: 11..<13) - var ftlvl: FTLVL - } - - /// data register - @Register(bitWidth: 32) - struct DR { - /// Data register - @ReadWrite(bits: 0..<16) - var dr_field: DR_FIELD - } - - /// CRC polynomial register - @Register(bitWidth: 32) - struct CRCPR { - /// CRC polynomial register - @ReadWrite(bits: 0..<16) - var crcpoly: CRCPOLY - } - - /// RX CRC register - @Register(bitWidth: 32) - struct RXCRCR { - /// Rx CRC register - @ReadOnly(bits: 0..<16) - var rxcrc: RxCRC - } - - /// TX CRC register - @Register(bitWidth: 32) - struct TXCRCR { - /// Tx CRC register - @ReadOnly(bits: 0..<16) - var txcrc: TxCRC - } - - /// I2S configuration register - @Register(bitWidth: 32) - struct I2SCFGR { - /// I2S mode selection - @ReadWrite(bits: 11..<12) - var i2smod: I2SMOD - - /// I2S Enable - @ReadWrite(bits: 10..<11) - var i2se: I2SE - - /// I2S configuration mode - @ReadWrite(bits: 8..<10) - var i2scfg: I2SCFG - - /// PCM frame synchronization - @ReadWrite(bits: 7..<8) - var pcmsync: PCMSYNC - - /// I2S standard selection - @ReadWrite(bits: 4..<6) - var i2sstd: I2SSTD - - /// Steady state clock polarity - @ReadWrite(bits: 3..<4) - var ckpol: CKPOL - - /// Data length to be transferred - @ReadWrite(bits: 1..<3) - var datlen: DATLEN - - /// Channel length (number of bits per audio channel) - @ReadWrite(bits: 0..<1) - var chlen: CHLEN - - /// Asynchronous start enable - @ReadWrite(bits: 12..<13) - var astrten: ASTRTEN - } - - /// I2S prescaler register - @Register(bitWidth: 32) - struct I2SPR { - /// Master clock output enable - @ReadWrite(bits: 9..<10) - var mckoe: MCKOE - - /// Odd factor for the prescaler - @ReadWrite(bits: 8..<9) - var odd: ODD +typealias SPI2 = SPI1 - /// I2S Linear prescaler - @ReadWrite(bits: 0..<8) - var i2sdiv: I2SDIV - } -} diff --git a/stm32-neopixel/Sources/Application/Registers/USART1.swift b/stm32-neopixel/Sources/Application/Registers/USART1.swift index 19cc4ee3..6230310f 100644 --- a/stm32-neopixel/Sources/Application/Registers/USART1.swift +++ b/stm32-neopixel/Sources/Application/Registers/USART1.swift @@ -1,7 +1,5 @@ // Generated by svd2swift. -// swift-format-ignore-file - import MMIO /// Universal synchronous asynchronous receiver transmitter @@ -57,215 +55,175 @@ extension USART1 { @Register(bitWidth: 32) struct CR1 { /// Word length - @ReadWrite(bits: 28..<29) + @ReadWrite(bits: 28..<29, as: M1Values.self) var m1: M1 /// End of Block interrupt enable - @ReadWrite(bits: 27..<28) + @ReadWrite(bits: 27..<28, as: EOBIEValues.self) var eobie: EOBIE /// Receiver timeout interrupt enable - @ReadWrite(bits: 26..<27) + @ReadWrite(bits: 26..<27, as: RTOIEValues.self) var rtoie: RTOIE - /// Driver Enable assertion time - @ReadWrite(bits: 25..<26) - var deat4: DEAT4 - - /// DEAT3 - @ReadWrite(bits: 24..<25) - var deat3: DEAT3 - - /// DEAT2 - @ReadWrite(bits: 23..<24) - var deat2: DEAT2 - - /// DEAT1 - @ReadWrite(bits: 22..<23) - var deat1: DEAT1 - - /// DEAT0 - @ReadWrite(bits: 21..<22) - var deat0: DEAT0 - - /// Driver Enable de-assertion time - @ReadWrite(bits: 20..<21) - var dedt4: DEDT4 - - /// DEDT3 - @ReadWrite(bits: 19..<20) - var dedt3: DEDT3 - - /// DEDT2 - @ReadWrite(bits: 18..<19) - var dedt2: DEDT2 - - /// DEDT1 - @ReadWrite(bits: 17..<18) - var dedt1: DEDT1 - - /// DEDT0 - @ReadWrite(bits: 16..<17) - var dedt0: DEDT0 - /// Oversampling mode - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: OVER8Values.self) var over8: OVER8 /// Character match interrupt enable - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: CMIEValues.self) var cmie: CMIE /// Mute mode enable - @ReadWrite(bits: 13..<14) + @ReadWrite(bits: 13..<14, as: MMEValues.self) var mme: MME /// Word length - @ReadWrite(bits: 12..<13) + @ReadWrite(bits: 12..<13, as: M0Values.self) var m0: M0 /// Receiver wakeup method - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: WAKEValues.self) var wake: WAKE /// Parity control enable - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: PCEValues.self) var pce: PCE /// Parity selection - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: PSValues.self) var ps: PS /// PE interrupt enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: PEIEValues.self) var peie: PEIE /// interrupt enable - @ReadWrite(bits: 7..<8) + @ReadWrite(bits: 7..<8, as: TXEIEValues.self) var txeie: TXEIE /// Transmission complete interrupt enable - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: TCIEValues.self) var tcie: TCIE /// RXNE interrupt enable - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: RXNEIEValues.self) var rxneie: RXNEIE /// IDLE interrupt enable - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: IDLEIEValues.self) var idleie: IDLEIE /// Transmitter enable - @ReadWrite(bits: 3..<4) + @ReadWrite(bits: 3..<4, as: TEValues.self) var te: TE /// Receiver enable - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: REValues.self) var re: RE /// USART enable in Stop mode - @ReadWrite(bits: 1..<2) + @ReadWrite(bits: 1..<2, as: UESMValues.self) var uesm: UESM /// USART enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: UEValues.self) var ue: UE + + /// Driver Enable assertion time + @ReadWrite(bits: 21..<26) + var deat: DEAT + + /// Driver Enable de-assertion time + @ReadWrite(bits: 16..<21) + var dedt: DEDT } /// Control register 2 @Register(bitWidth: 32) struct CR2 { - /// Address of the USART node - @ReadWrite(bits: 28..<32) - var add4_7: ADD4_7 - - /// Address of the USART node - @ReadWrite(bits: 24..<28) - var add0_3: ADD0_3 - /// Receiver timeout enable - @ReadWrite(bits: 23..<24) + @ReadWrite(bits: 23..<24, as: RTOENValues.self) var rtoen: RTOEN - /// Auto baud rate mode - @ReadWrite(bits: 22..<23) - var abrmod1: ABRMOD1 - - /// ABRMOD0 - @ReadWrite(bits: 21..<22) - var abrmod0: ABRMOD0 - /// Auto baud rate enable - @ReadWrite(bits: 20..<21) + @ReadWrite(bits: 20..<21, as: ABRENValues.self) var abren: ABREN /// Most significant bit first - @ReadWrite(bits: 19..<20) + @ReadWrite(bits: 19..<20, as: MSBFIRSTValues.self) var msbfirst: MSBFIRST /// Binary data inversion - @ReadWrite(bits: 18..<19) - var tainv: TAINV + @ReadWrite(bits: 18..<19, as: DATAINVValues.self) + var datainv: DATAINV /// TX pin active level inversion - @ReadWrite(bits: 17..<18) + @ReadWrite(bits: 17..<18, as: TXINVValues.self) var txinv: TXINV /// RX pin active level inversion - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: RXINVValues.self) var rxinv: RXINV /// Swap TX/RX pins - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: SWAPValues.self) var swap: SWAP /// LIN mode enable - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: LINENValues.self) var linen: LINEN /// STOP bits - @ReadWrite(bits: 12..<14) + @ReadWrite(bits: 12..<14, as: STOPValues.self) var stop: STOP /// Clock enable - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: CLKENValues.self) var clken: CLKEN /// Clock polarity - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: CPOLValues.self) var cpol: CPOL /// Clock phase - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: CPHAValues.self) var cpha: CPHA /// Last bit clock pulse - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: LBCLValues.self) var lbcl: LBCL /// LIN break detection interrupt enable - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: LBDIEValues.self) var lbdie: LBDIE /// LIN break detection length - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: LBDLValues.self) var lbdl: LBDL /// 7-bit Address Detection/4-bit Address Detection - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: ADDM7Values.self) var addm7: ADDM7 + + /// Auto baud rate mode + @ReadWrite(bits: 21..<23, as: ABRMODValues.self) + var abrmod: ABRMOD + + /// Address of the USART node + @ReadWrite(bits: 24..<32) + var add: ADD } /// Control register 3 @Register(bitWidth: 32) struct CR3 { /// Wakeup from Stop mode interrupt enable - @ReadWrite(bits: 22..<23) + @ReadWrite(bits: 22..<23, as: WUFIEValues.self) var wufie: WUFIE /// Wakeup from Stop mode interrupt flag selection - @ReadWrite(bits: 20..<22) + @ReadWrite(bits: 20..<22, as: WUSValues.self) var wus: WUS /// Smartcard auto-retry count @@ -273,67 +231,67 @@ extension USART1 { var scarcnt: SCARCNT /// Driver enable polarity selection - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: DEPValues.self) var dep: DEP /// Driver enable mode - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: DEMValues.self) var dem: DEM /// DMA Disable on Reception Error - @ReadWrite(bits: 13..<14) + @ReadWrite(bits: 13..<14, as: DDREValues.self) var ddre: DDRE /// Overrun Disable - @ReadWrite(bits: 12..<13) + @ReadWrite(bits: 12..<13, as: OVRDISValues.self) var ovrdis: OVRDIS /// One sample bit method enable - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: ONEBITValues.self) var onebit: ONEBIT /// CTS interrupt enable - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: CTSIEValues.self) var ctsie: CTSIE /// CTS enable - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: CTSEValues.self) var ctse: CTSE /// RTS enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: RTSEValues.self) var rtse: RTSE /// DMA enable transmitter - @ReadWrite(bits: 7..<8) + @ReadWrite(bits: 7..<8, as: DMATValues.self) var dmat: DMAT /// DMA enable receiver - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: DMARValues.self) var dmar: DMAR /// Smartcard mode enable - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: SCENValues.self) var scen: SCEN /// Smartcard NACK enable - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: NACKValues.self) var nack: NACK /// Half-duplex selection - @ReadWrite(bits: 3..<4) + @ReadWrite(bits: 3..<4, as: HDSELValues.self) var hdsel: HDSEL /// Ir low-power - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: IRLPValues.self) var irlp: IRLP /// Ir mode enable - @ReadWrite(bits: 1..<2) + @ReadWrite(bits: 1..<2, as: IRENValues.self) var iren: IREN /// Error interrupt enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: EIEValues.self) var eie: EIE } @@ -341,12 +299,8 @@ extension USART1 { @Register(bitWidth: 32) struct BRR { /// DIV_Mantissa - @ReadWrite(bits: 4..<16) - var div_mantissa: DIV_Mantissa - - /// DIV_Fraction - @ReadWrite(bits: 0..<4) - var div_fraction: DIV_Fraction + @ReadWrite(bits: 0..<16) + var brr_field: BRR_FIELD } /// Guard time and prescaler register @@ -557,3 +511,1044 @@ extension USART1 { var tdr_field: TDR_FIELD } } + +extension USART1.CR1 { + struct M1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Use M0 to set the data bits + static let M0 = Self(rawValue: 0x0) + + /// 1 start bit, 7 data bits, n stop bits + static let Bit7 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct EOBIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// A USART interrupt is generated when the EOBF flag is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct RTOIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An USART interrupt is generated when the RTOF bit is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct OVER8Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Oversampling by 16 + static let Oversampling16 = Self(rawValue: 0x0) + + /// Oversampling by 8 + static let Oversampling8 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct CMIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated when the CMF bit is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct MMEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver in active mode permanently + static let Disabled = Self(rawValue: 0x0) + + /// Receiver can switch between mute mode and active mode + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct M0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 1 start bit, 8 data bits, n stop bits + static let Bit8 = Self(rawValue: 0x0) + + /// 1 start bit, 9 data bits, n stop bits + static let Bit9 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct WAKEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Idle line + static let Idle = Self(rawValue: 0x0) + + /// Address mask + static let Address = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PCEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Parity control disabled + static let Disabled = Self(rawValue: 0x0) + + /// Parity control enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Even parity + static let Even = Self(rawValue: 0x0) + + /// Odd parity + static let Odd = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever PE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TXEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever TXE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TCIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever TC=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct RXNEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever ORE=1 or RXNE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct IDLEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever IDLE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Transmitter is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Transmitter is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct REValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Receiver is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct UESMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// USART not able to wake up the MCU from Stop mode + static let Disabled = Self(rawValue: 0x0) + + /// USART able to wake up the MCU from Stop mode + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct UEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// UART is disabled + static let Disabled = Self(rawValue: 0x0) + + /// UART is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct RTOENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver timeout feature disabled + static let Disabled = Self(rawValue: 0x0) + + /// Receiver timeout feature enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ABRENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Auto baud rate detection is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Auto baud rate detection is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct MSBFIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// data is transmitted/received with data bit 0 first, following the start bit + static let LSB = Self(rawValue: 0x0) + + /// data is transmitted/received with MSB (bit 7/8/9) first, following the start bit + static let MSB = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct DATAINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Logical data from the data register are send/received in positive/direct logic + static let Positive = Self(rawValue: 0x0) + + /// Logical data from the data register are send/received in negative/inverse logic + static let Negative = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct TXINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TX pin signal works using the standard logic levels + static let Standard = Self(rawValue: 0x0) + + /// TX pin signal values are inverted + static let Inverted = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct RXINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RX pin signal works using the standard logic levels + static let Standard = Self(rawValue: 0x0) + + /// RX pin signal values are inverted + static let Inverted = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct SWAPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TX/RX pins are used as defined in standard pinout + static let Standard = Self(rawValue: 0x0) + + /// The TX and RX pins functions are swapped + static let Swapped = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LINENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LIN mode disabled + static let Disabled = Self(rawValue: 0x0) + + /// LIN mode enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct STOPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// 1 stop bit + static let Stop1 = Self(rawValue: 0x0) + + /// 0.5 stop bit + static let Stop0p5 = Self(rawValue: 0x1) + + /// 2 stop bit + static let Stop2 = Self(rawValue: 0x2) + + /// 1.5 stop bit + static let Stop1p5 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CLKENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CK pin disabled + static let Disabled = Self(rawValue: 0x0) + + /// CK pin enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Steady low value on CK pin outside transmission window + static let Low = Self(rawValue: 0x0) + + /// Steady high value on CK pin outside transmission window + static let High = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CPHAValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The first clock transition is the first data capture edge + static let First = Self(rawValue: 0x0) + + /// The second clock transition is the first data capture edge + static let Second = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBCLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The clock pulse of the last data bit is not output to the CK pin + static let NotOutput = Self(rawValue: 0x0) + + /// The clock pulse of the last data bit is output to the CK pin + static let Output = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBDIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated whenever LBDF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBDLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 10-bit break detection + static let Bit10 = Self(rawValue: 0x0) + + /// 11-bit break detection + static let Bit11 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ADDM7Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 4-bit address detection + static let Bit4 = Self(rawValue: 0x0) + + /// 7-bit address detection + static let Bit7 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ABRMODValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Measurement of the start bit is used to detect the baud rate + static let Start = Self(rawValue: 0x0) + + /// Falling edge to falling edge measurement + static let Edge = Self(rawValue: 0x1) + + /// 0x7F frame detection + static let Frame7F = Self(rawValue: 0x2) + + /// 0x55 frame detection + static let Frame55 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct WUFIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An USART interrupt is generated whenever WUF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct WUSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// WUF active on address match + static let Address = Self(rawValue: 0x0) + + /// WuF active on Start bit detection + static let Start = Self(rawValue: 0x2) + + /// WUF active on RXNE + static let RXNE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DEPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DE signal is active high + static let High = Self(rawValue: 0x0) + + /// DE signal is active low + static let Low = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DEMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DE function is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The DE signal is output on the RTS pin + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DDREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA is not disabled in case of reception error + static let NotDisabled = Self(rawValue: 0x0) + + /// DMA is disabled following a reception error + static let Disabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct OVRDISValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Overrun Error Flag, ORE, is set when received data is not read before receiving new data + static let Enabled = Self(rawValue: 0x0) + + /// Overrun functionality is disabled. If new data is received while the RXNE flag is still set the ORE flag is not set and the new received data overwrites the previous content of the RDR register + static let Disabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct ONEBITValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Three sample bit method + static let Sample3 = Self(rawValue: 0x0) + + /// One sample bit method + static let Sample1 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct CTSIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated whenever CTSIF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct CTSEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CTS hardware flow control disabled + static let Disabled = Self(rawValue: 0x0) + + /// CTS mode enabled, data is only transmitted when the CTS input is asserted + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct RTSEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RTS hardware flow control disabled + static let Disabled = Self(rawValue: 0x0) + + /// RTS output enabled, data is only requested when there is space in the receive buffer + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DMATValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA mode is disabled for transmission + static let Disabled = Self(rawValue: 0x0) + + /// DMA mode is enabled for transmission + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DMARValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA mode is disabled for reception + static let Disabled = Self(rawValue: 0x0) + + /// DMA mode is enabled for reception + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct SCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Smartcard Mode disabled + static let Disabled = Self(rawValue: 0x0) + + /// Smartcard Mode enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct NACKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// NACK transmission in case of parity error is disabled + static let Disabled = Self(rawValue: 0x0) + + /// NACK transmission during parity error is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct HDSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Half duplex mode is not selected + static let NotSelected = Self(rawValue: 0x0) + + /// Half duplex mode is selected + static let Selected = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct IRLPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Normal mode + static let Normal = Self(rawValue: 0x0) + + /// Low-power mode + static let LowPower = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct IRENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// IrDA disabled + static let Disabled = Self(rawValue: 0x0) + + /// IrDA enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct EIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated when FE=1 or ORE=1 or NF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-uart-echo/.sourcekit-lsp/config.json b/stm32-uart-echo/.sourcekit-lsp/config.json deleted file mode 100644 index b1647f54..00000000 --- a/stm32-uart-echo/.sourcekit-lsp/config.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "swiftPM": { - "configuration": "release", - "triple": "armv7em-apple-none-macho", - "swiftCompilerFlags": ["-Xfrontend", "-disable-stack-protector"], - "cCompilerFlags": ["-D__APPLE__", "-D__MACH__"] - } -} diff --git a/stm32-uart-echo/Makefile b/stm32-uart-echo/Makefile index 92b2dfe4..51885ce5 100755 --- a/stm32-uart-echo/Makefile +++ b/stm32-uart-echo/Makefile @@ -9,42 +9,30 @@ ## ##===----------------------------------------------------------------------===## -# Determine file paths -REPOROOT := $(shell git rev-parse --show-toplevel) -TOOLSROOT := $(REPOROOT)/Tools -SRCROOT := $(REPOROOT)/stm32-uart-echo -BUILDROOT := $(SRCROOT)/.build/release - -# Setup tools and build flags -ARCH := armv7em -TARGET := $(ARCH)-apple-none-macho -VECTORS_ADDRESS=-0x00200000 - -SWIFT_BUILD := $(shell xcrun -f swift-build) -MACHO2BIN := $(SRCROOT)/../Tools/macho2bin.py +# Paths +REPOROOT := $(shell git rev-parse --show-toplevel) +TOOLSROOT := $(REPOROOT)/Tools +TOOLSET := $(TOOLSROOT)/Toolsets/stm32f74x.json +MACHO2BIN := $(TOOLSROOT)/macho2bin.py +SWIFT_BUILD := swift build + +# Flags +ARCH := armv7em +TARGET := $(ARCH)-apple-none-macho +SWIFT_BUILD_ARGS := \ + --configuration release \ + --triple $(TARGET) \ + --toolset $(TOOLSET) \ + --disable-local-rpath +BUILDROOT := $(shell $(SWIFT_BUILD) $(SWIFT_BUILD_ARGS) --show-bin-path) .PHONY: build build: - @echo "compiling..." + @echo "building..." $(SWIFT_BUILD) \ - --configuration release \ - --verbose \ - --triple $(TARGET) \ - -Xcc -D__APPLE__ -Xcc -D__MACH__ \ - -Xswiftc -Xfrontend -Xswiftc -disable-stack-protector - - @echo "linking..." - clang .build/release/libApplication.a -o .build/release/Application \ - -arch $(ARCH) \ - -dead_strip \ - -static \ - -Wl,-e,_reset \ - -Wl,-map,$(BUILDROOT)/Application.mangled.map \ - -Wl,-no_zero_fill_sections \ - -Wl,-segalign,4 \ - -Wl,-segaddr,__VECTORS,0x20010000 \ - -Wl,-seg1addr,0x20010200 \ - -Wl,-pagezero_size,0 + $(SWIFT_BUILD_ARGS) \ + -Xlinker -map -Xlinker $(BUILDROOT)/Application.mangled.map \ + --verbose @echo "demangling linker map..." cat $(BUILDROOT)/Application.mangled.map \ diff --git a/stm32-uart-echo/Package.resolved b/stm32-uart-echo/Package.resolved index dc3e17d1..25097fb2 100644 --- a/stm32-uart-echo/Package.resolved +++ b/stm32-uart-echo/Package.resolved @@ -1,13 +1,13 @@ { - "originHash" : "a341db4bc8f11a7dc810c323c7d37f2f9a1322e9633ccbec6a8d88de8c055685", + "originHash" : "50d5562e902c0a987f43e9c891a6d559c9d71bc593aa215e096917fdd28b5c6c", "pins" : [ { "identity" : "swift-argument-parser", "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-argument-parser.git", "state" : { - "revision" : "0fbc8848e389af3bb55c182bc19ca9d5dc2f255b", - "version" : "1.4.0" + "revision" : "41982a3656a71c768319979febd796c6fd111d5c", + "version" : "1.5.0" } }, { @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/apple/swift-mmio", "state" : { - "branch" : "swift-embedded-examples", - "revision" : "06d96ed4916739f2edafde87f3951b2d2a04df65" + "branch" : "main", + "revision" : "daf25ecacc0d9b71036c6af32cb7786a01802799" } }, { diff --git a/stm32-uart-echo/Package.swift b/stm32-uart-echo/Package.swift index dd406bed..1b031181 100644 --- a/stm32-uart-echo/Package.swift +++ b/stm32-uart-echo/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 5.10 +// swift-tools-version: 6.2 import PackageDescription @@ -8,22 +8,22 @@ let package = Package( .macOS(.v10_15) ], products: [ - .library(name: "Application", type: .static, targets: ["Application"]) + .executable(name: "Application", targets: ["Application"]) ], dependencies: [ - .package( - url: "https://github.com/apple/swift-mmio", - branch: "swift-embedded-examples") + .package(url: "https://github.com/apple/swift-mmio", branch: "main") ], targets: [ - .target( + // SVD2Swift \ + // --input ../Tools/SVDs/stm32f7x6.patched.svd \ + // --output Sources/Application/Registers \ + // --indentation-width 2 \ + // --peripherals GPIOA GPIOB RCC USART1 + .executableTarget( name: "Application", dependencies: [ .product(name: "MMIO", package: "swift-mmio"), "Support", - ], - swiftSettings: [ - .enableExperimentalFeature("Embedded") ]), .target(name: "Support"), ]) diff --git a/stm32-uart-echo/Sources/Application/Application.swift b/stm32-uart-echo/Sources/Application/Application.swift index 560940f2..362ee811 100644 --- a/stm32-uart-echo/Sources/Application/Application.swift +++ b/stm32-uart-echo/Sources/Application/Application.swift @@ -50,7 +50,8 @@ public struct Application { gpiob.afrl.modify { $0.raw.afrl7 = 0b0111 } // Configure UART1 - // Set the baud rate to 16Mhz + // Set the baud rate to 115200 (by computing the divisor based on the 16Mhz + // default post-reset CPU clock frequency) usart1.brr.modify { $0.raw.storage = 16_000_000 / 115200 } usart1.cr1.modify { rw in diff --git a/stm32-uart-echo/Sources/Application/Registers/Device.swift b/stm32-uart-echo/Sources/Application/Registers/Device.swift index 75fd7daf..8788410d 100644 --- a/stm32-uart-echo/Sources/Application/Registers/Device.swift +++ b/stm32-uart-echo/Sources/Application/Registers/Device.swift @@ -3,13 +3,13 @@ import MMIO /// General-purpose I/Os -let gpioa = GPIOA(unsafeAddress: 0x4002_0000) +let gpioa = GPIOA(unsafeAddress: 0x40020000) /// General-purpose I/Os -let gpiob = GPIOB(unsafeAddress: 0x4002_0400) +let gpiob = GPIOB(unsafeAddress: 0x40020400) /// Reset and clock control -let rcc = RCC(unsafeAddress: 0x4002_3800) +let rcc = RCC(unsafeAddress: 0x40023800) /// Universal synchronous asynchronous receiver transmitter -let usart1 = USART1(unsafeAddress: 0x4001_1000) +let usart1 = USART1(unsafeAddress: 0x40011000) diff --git a/stm32-uart-echo/Sources/Application/Registers/GPIOA.swift b/stm32-uart-echo/Sources/Application/Registers/GPIOA.swift index 1bc077bf..3bc4d2ff 100644 --- a/stm32-uart-echo/Sources/Application/Registers/GPIOA.swift +++ b/stm32-uart-echo/Sources/Application/Registers/GPIOA.swift @@ -115,7 +115,7 @@ extension GPIOA { var moder1: MODER1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: MODER0Values.self) var moder0: MODER0 } @@ -183,7 +183,7 @@ extension GPIOA { var ot1: OT1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: OT0Values.self) var ot0: OT0 } @@ -251,7 +251,7 @@ extension GPIOA { var ospeedr1: OSPEEDR1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: OSPEEDR0Values.self) var ospeedr0: OSPEEDR0 } @@ -319,7 +319,7 @@ extension GPIOA { var pupdr1: PUPDR1 /// Port x configuration bits (y = 0..15) - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: PUPDR0Values.self) var pupdr0: PUPDR0 } @@ -455,7 +455,7 @@ extension GPIOA { var odr1: ODR1 /// Port output data (y = 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: ODR0Values.self) var odr0: ODR0 } @@ -595,7 +595,7 @@ extension GPIOA { @Register(bitWidth: 32) struct LCKR { /// Port x lock bit y (y= 0..15) - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: LCKKValues.self) var lckk: LCKK /// Port x lock bit y (y= 0..15) @@ -659,7 +659,7 @@ extension GPIOA { var lck1: LCK1 /// Port x lock bit y (y= 0..15) - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LCK0Values.self) var lck0: LCK0 } @@ -695,7 +695,7 @@ extension GPIOA { var afrl1: AFRL1 /// Alternate function selection for port x bit y (y = 0..7) - @ReadWrite(bits: 0..<4) + @ReadWrite(bits: 0..<4, as: AFRL0Values.self) var afrl0: AFRL0 } @@ -731,7 +731,7 @@ extension GPIOA { var afrh9: AFRH9 /// Alternate function selection for port x bit y (y = 8..15) - @ReadWrite(bits: 0..<4) + @ReadWrite(bits: 0..<4, as: AFRH8Values.self) var afrh8: AFRH8 } @@ -803,3 +803,273 @@ extension GPIOA { var br15: BR15 } } + +extension GPIOA.MODER { + struct MODER0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Input mode (reset state) + static let Input = Self(rawValue: 0x0) + + /// General purpose output mode + static let Output = Self(rawValue: 0x1) + + /// Alternate function mode + static let Alternate = Self(rawValue: 0x2) + + /// Analog mode + static let Analog = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OTYPER { + struct OT0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Output push-pull (reset state) + static let PushPull = Self(rawValue: 0x0) + + /// Output open-drain + static let OpenDrain = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.OSPEEDR { + struct OSPEEDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low speed + static let LowSpeed = Self(rawValue: 0x0) + + /// Medium speed + static let MediumSpeed = Self(rawValue: 0x1) + + /// High speed + static let HighSpeed = Self(rawValue: 0x2) + + /// Very high speed + static let VeryHighSpeed = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.PUPDR { + struct PUPDR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No pull-up, pull-down + static let Floating = Self(rawValue: 0x0) + + /// Pull-up + static let PullUp = Self(rawValue: 0x1) + + /// Pull-down + static let PullDown = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.ODR { + struct ODR0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Set output to logic low + static let Low = Self(rawValue: 0x0) + + /// Set output to logic high + static let High = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCKKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration lock key not active + static let NotActive = Self(rawValue: 0x0) + + /// Port configuration lock key active + static let Active = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.LCKR { + struct LCK0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Port configuration not locked + static let Unlocked = Self(rawValue: 0x0) + + /// Port configuration locked + static let Locked = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRL { + struct AFRL0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension GPIOA.AFRH { + struct AFRH8Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// AF0 + static let AF0 = Self(rawValue: 0x0) + + /// AF1 + static let AF1 = Self(rawValue: 0x1) + + /// AF2 + static let AF2 = Self(rawValue: 0x2) + + /// AF3 + static let AF3 = Self(rawValue: 0x3) + + /// AF4 + static let AF4 = Self(rawValue: 0x4) + + /// AF5 + static let AF5 = Self(rawValue: 0x5) + + /// AF6 + static let AF6 = Self(rawValue: 0x6) + + /// AF7 + static let AF7 = Self(rawValue: 0x7) + + /// AF8 + static let AF8 = Self(rawValue: 0x8) + + /// AF9 + static let AF9 = Self(rawValue: 0x9) + + /// AF10 + static let AF10 = Self(rawValue: 0xa) + + /// AF11 + static let AF11 = Self(rawValue: 0xb) + + /// AF12 + static let AF12 = Self(rawValue: 0xc) + + /// AF13 + static let AF13 = Self(rawValue: 0xd) + + /// AF14 + static let AF14 = Self(rawValue: 0xe) + + /// AF15 + static let AF15 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} diff --git a/stm32-uart-echo/Sources/Application/Registers/GPIOB.swift b/stm32-uart-echo/Sources/Application/Registers/GPIOB.swift index 9988779e..c820355f 100644 --- a/stm32-uart-echo/Sources/Application/Registers/GPIOB.swift +++ b/stm32-uart-echo/Sources/Application/Registers/GPIOB.swift @@ -2,4 +2,6 @@ import MMIO +/// General-purpose I/Os typealias GPIOB = GPIOA + diff --git a/stm32-uart-echo/Sources/Application/Registers/RCC.swift b/stm32-uart-echo/Sources/Application/Registers/RCC.swift index a06ea27b..4f5842ef 100644 --- a/stm32-uart-echo/Sources/Application/Registers/RCC.swift +++ b/stm32-uart-echo/Sources/Application/Registers/RCC.swift @@ -103,11 +103,11 @@ struct RCC { /// dedicated clocks configuration register @RegisterBlock(offset: 0x8c) - var dkcfgr1: Register + var dckcfgr1: Register /// dedicated clocks configuration register @RegisterBlock(offset: 0x90) - var dkcfgr2: Register + var dckcfgr2: Register } extension RCC { @@ -131,11 +131,11 @@ extension RCC { var pllon: PLLON /// Clock security system enable - @ReadWrite(bits: 19..<20) + @ReadWrite(bits: 19..<20, as: CSSONValues.self) var csson: CSSON /// HSE clock bypass - @ReadWrite(bits: 18..<19) + @ReadWrite(bits: 18..<19, as: HSEBYPValues.self) var hsebyp: HSEBYP /// HSE clock ready flag @@ -159,107 +159,47 @@ extension RCC { var hsirdy: HSIRDY /// Internal high-speed clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: HSIONValues.self) var hsion: HSION + + /// PLLSAI clock ready flag + @ReadOnly(bits: 29..<30) + var pllsairdy: PLLSAIRDY + + /// PLLSAI enable + @ReadWrite(bits: 28..<29) + var pllsaion: PLLSAION } /// PLL configuration register @Register(bitWidth: 32) struct PLLCFGR { - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 27..<28) - var pllq3: PLLQ3 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 26..<27) - var pllq2: PLLQ2 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 25..<26) - var pllq1: PLLQ1 - - /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks - @ReadWrite(bits: 24..<25) - var pllq0: PLLQ0 - /// Main PLL(PLL) and audio PLL (PLLI2S) entry clock source - @ReadWrite(bits: 22..<23) + @ReadWrite(bits: 22..<23, as: PLLSRCValues.self) var pllsrc: PLLSRC - /// Main PLL (PLL) division factor for main system clock - @ReadWrite(bits: 17..<18) - var pllp1: PLLP1 - - /// Main PLL (PLL) division factor for main system clock - @ReadWrite(bits: 16..<17) - var pllp0: PLLP0 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 14..<15) - var plln8: PLLN8 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 13..<14) - var plln7: PLLN7 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 12..<13) - var plln6: PLLN6 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 11..<12) - var plln5: PLLN5 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 10..<11) - var plln4: PLLN4 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 9..<10) - var plln3: PLLN3 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 8..<9) - var plln2: PLLN2 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 7..<8) - var plln1: PLLN1 - - /// Main PLL (PLL) multiplication factor for VCO - @ReadWrite(bits: 6..<7) - var plln0: PLLN0 - - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 5..<6) - var pllm5: PLLM5 - - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 4..<5) - var pllm4: PLLM4 - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 3..<4) - var pllm3: PLLM3 + @ReadWrite(bits: 0..<6) + var pllm: PLLM - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 2..<3) - var pllm2: PLLM2 + /// Main PLL (PLL) multiplication factor for VCO + @ReadWrite(bits: 6..<15) + var plln: PLLN - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 1..<2) - var pllm1: PLLM1 + /// Main PLL (PLL) division factor for main system clock + @ReadWrite(bits: 16..<18, as: PLLPValues.self) + var pllp: PLLP - /// Division factor for the main PLL (PLL) and audio PLL (PLLI2S) input clock - @ReadWrite(bits: 0..<1) - var pllm0: PLLM0 + /// Main PLL (PLL) division factor for USB OTG FS, SDIO and random number generator clocks + @ReadWrite(bits: 24..<28) + var pllq: PLLQ } /// clock configuration register @Register(bitWidth: 32) struct CFGR { /// Microcontroller clock output 2 - @ReadWrite(bits: 30..<32) + @ReadWrite(bits: 30..<32, as: MCO2Values.self) var mco2: MCO2 /// MCO2 prescaler @@ -267,15 +207,15 @@ extension RCC { var mco2pre: MCO2PRE /// MCO1 prescaler - @ReadWrite(bits: 24..<27) + @ReadWrite(bits: 24..<27, as: MCO1PREValues.self) var mco1pre: MCO1PRE /// I2S clock selection - @ReadWrite(bits: 23..<24) + @ReadWrite(bits: 23..<24, as: I2SSRCValues.self) var i2ssrc: I2SSRC /// Microcontroller clock output 1 - @ReadWrite(bits: 21..<23) + @ReadWrite(bits: 21..<23, as: MCO1Values.self) var mco1: MCO1 /// HSE division factor for RTC clock @@ -287,28 +227,20 @@ extension RCC { var ppre2: PPRE2 /// APB Low speed prescaler (APB1) - @ReadWrite(bits: 10..<13) + @ReadWrite(bits: 10..<13, as: PPRE1Values.self) var ppre1: PPRE1 /// AHB prescaler - @ReadWrite(bits: 4..<8) + @ReadWrite(bits: 4..<8, as: HPREValues.self) var hpre: HPRE - /// System clock switch status - @ReadOnly(bits: 3..<4) - var sws1: SWS1 - - /// System clock switch status - @ReadOnly(bits: 2..<3) - var sws0: SWS0 - /// System clock switch - @ReadWrite(bits: 1..<2) - var sw1: SW1 + @Reserved(bits: 0..<2, as: SWValues.self) + var sw: SW - /// System clock switch - @ReadWrite(bits: 0..<1) - var sw0: SW0 + /// System clock switch status + @Reserved(bits: 2..<4) + var sws: SWS } /// clock interrupt register @@ -371,7 +303,7 @@ extension RCC { var lserdyie: LSERDYIE /// LSI ready interrupt enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: LSIRDYIEValues.self) var lsirdyie: LSIRDYIE /// Clock security system interrupt flag @@ -475,7 +407,7 @@ extension RCC { var gpiobrst: GPIOBRST /// IO port A reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOARSTValues.self) var gpioarst: GPIOARST } @@ -499,7 +431,7 @@ extension RCC { var cryprst: CRYPRST /// Camera interface reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMIRSTValues.self) var dcmirst: DCMIRST } @@ -507,7 +439,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3RSTR { /// Flexible memory controller module reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCRSTValues.self) var fmcrst: FMCRST /// Quad SPI memory controller reset @@ -519,7 +451,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1RSTR { /// TIM2 reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2RSTValues.self) var tim2rst: TIM2RST /// TIM3 reset @@ -568,11 +500,11 @@ extension RCC { /// USART 2 reset @ReadWrite(bits: 17..<18) - var uart2rst: UART2RST + var usart2rst: USART2RST /// USART 3 reset @ReadWrite(bits: 18..<19) - var uart3rst: UART3RST + var usart3rst: USART3RST /// USART 4 reset @ReadWrite(bits: 19..<20) @@ -639,7 +571,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2RSTR { /// TIM1 reset - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1RSTValues.self) var tim1rst: TIM1RST /// TIM8 reset @@ -748,7 +680,7 @@ extension RCC { /// CCM data RAM clock enable @ReadWrite(bits: 20..<21) - var ccmdataramen: CCMDATARAMEN + var dtcmramen: DTCMRAMEN /// Backup SRAM interface clock enable @ReadWrite(bits: 18..<19) @@ -799,7 +731,7 @@ extension RCC { var gpioben: GPIOBEN /// IO port A clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOAENValues.self) var gpioaen: GPIOAEN } @@ -823,7 +755,7 @@ extension RCC { var crypen: CRYPEN /// Camera interface enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMIENValues.self) var dcmien: DCMIEN } @@ -831,7 +763,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3ENR { /// Flexible memory controller module clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCENValues.self) var fmcen: FMCEN /// Quad SPI memory controller clock enable @@ -843,7 +775,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1ENR { /// TIM2 clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2ENValues.self) var tim2en: TIM2EN /// TIM3 clock enable @@ -936,11 +868,11 @@ extension RCC { /// UART7 clock enable @ReadWrite(bits: 30..<31) - var uart7enr: UART7ENR + var uart7en: UART7EN /// UART8 clock enable @ReadWrite(bits: 31..<32) - var uart8enr: UART8ENR + var uart8en: UART8EN /// SPDIF-RX clock enable @ReadWrite(bits: 16..<17) @@ -952,7 +884,7 @@ extension RCC { /// Low power timer 1 clock enable @ReadWrite(bits: 9..<10) - var lptmi1en: LPTMI1EN + var lptim1en: LPTIM1EN /// I2C4 clock enable @ReadWrite(bits: 24..<25) @@ -963,7 +895,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2ENR { /// TIM1 clock enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1ENValues.self) var tim1en: TIM1EN /// TIM8 clock enable @@ -996,7 +928,7 @@ extension RCC { /// SPI4 clock enable @ReadWrite(bits: 13..<14) - var spi4enr: SPI4ENR + var spi4en: SPI4EN /// System configuration controller clock enable @ReadWrite(bits: 14..<15) @@ -1016,11 +948,11 @@ extension RCC { /// SPI5 clock enable @ReadWrite(bits: 20..<21) - var spi5enr: SPI5ENR + var spi5en: SPI5EN /// SPI6 clock enable @ReadWrite(bits: 21..<22) - var spi6enr: SPI6ENR + var spi6en: SPI6EN /// SAI1 clock enable @ReadWrite(bits: 22..<23) @@ -1043,7 +975,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB1LPENR { /// IO port A clock enable during sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: GPIOALPENValues.self) var gpioalpen: GPIOALPEN /// IO port B clock enable during Sleep mode @@ -1145,6 +1077,14 @@ extension RCC { /// USB OTG HS ULPI clock enable during Sleep mode @ReadWrite(bits: 30..<31) var otghsulpilpen: OTGHSULPILPEN + + /// AXI to AHB bridge clock enable during Sleep mode + @ReadWrite(bits: 13..<14) + var axilpen: AXILPEN + + /// DTCM RAM interface clock enable during Sleep mode + @ReadWrite(bits: 20..<21) + var dtcmlpen: DTCMLPEN } /// AHB2 peripheral clock enable in low power mode register @@ -1167,7 +1107,7 @@ extension RCC { var cryplpen: CRYPLPEN /// Camera interface enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: DCMILPENValues.self) var dcmilpen: DCMILPEN } @@ -1175,7 +1115,7 @@ extension RCC { @Register(bitWidth: 32) struct AHB3LPENR { /// Flexible memory controller module clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: FMCLPENValues.self) var fmclpen: FMCLPEN /// Quand SPI memory controller clock enable during Sleep mode @@ -1187,7 +1127,7 @@ extension RCC { @Register(bitWidth: 32) struct APB1LPENR { /// TIM2 clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM2LPENValues.self) var tim2lpen: TIM2LPEN /// TIM3 clock enable during Sleep mode @@ -1307,7 +1247,7 @@ extension RCC { @Register(bitWidth: 32) struct APB2LPENR { /// TIM1 clock enable during Sleep mode - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: TIM1LPENValues.self) var tim1lpen: TIM1LPEN /// TIM8 clock enable during Sleep mode @@ -1387,23 +1327,15 @@ extension RCC { @Register(bitWidth: 32) struct BDCR { /// Backup domain software reset - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: BDRSTValues.self) var bdrst: BDRST /// RTC clock enable - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: RTCENValues.self) var rtcen: RTCEN - /// RTC clock source selection - @ReadWrite(bits: 9..<10) - var rtcsel1: RTCSEL1 - - /// RTC clock source selection - @ReadWrite(bits: 8..<9) - var rtcsel0: RTCSEL0 - /// External low-speed oscillator bypass - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: LSEBYPValues.self) var lsebyp: LSEBYP /// External low-speed oscillator ready @@ -1411,8 +1343,16 @@ extension RCC { var lserdy: LSERDY /// External low-speed oscillator enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LSEONValues.self) var lseon: LSEON + + /// LSE oscillator drive capability + @ReadWrite(bits: 3..<5, as: LSEDRVValues.self) + var lsedrv: LSEDRV + + /// RTC clock source selection + @Reserved(bits: 8..<10, as: RTCSELValues.self) + var rtcsel: RTCSEL } /// clock control & status register @@ -1455,7 +1395,7 @@ extension RCC { var lsirdy: LSIRDY /// Internal low-speed oscillator enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: LSIONValues.self) var lsion: LSION } @@ -1463,11 +1403,11 @@ extension RCC { @Register(bitWidth: 32) struct SSCGR { /// Spread spectrum modulation enable - @ReadWrite(bits: 31..<32) + @ReadWrite(bits: 31..<32, as: SSCGENValues.self) var sscgen: SSCGEN /// Spread Select - @ReadWrite(bits: 30..<31) + @ReadWrite(bits: 30..<31, as: SPREADSELValues.self) var spreadsel: SPREADSEL /// Incrementation step @@ -1493,6 +1433,10 @@ extension RCC { /// PLLI2S multiplication factor for VCO @ReadWrite(bits: 6..<15) var plli2sn: PLLI2SN + + /// PLLI2S division factor for SPDIFRX clock + @ReadWrite(bits: 16..<18, as: PLLI2SPValues.self) + var plli2sp: PLLI2SP } /// PLL configuration register @@ -1503,7 +1447,7 @@ extension RCC { var pllsain: PLLSAIN /// PLLSAI division factor for 48MHz clock - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: PLLSAIPValues.self) var pllsaip: PLLSAIP /// PLLSAI division factor for SAI clock @@ -1517,41 +1461,41 @@ extension RCC { /// dedicated clocks configuration register @Register(bitWidth: 32) - struct DKCFGR1 { + struct DCKCFGR1 { /// PLLI2S division factor for SAI1 clock - @ReadWrite(bits: 0..<5) - var plli2sdiv: PLLI2SDIV + @ReadWrite(bits: 0..<5, as: PLLI2SDIVQValues.self) + var plli2sdivq: PLLI2SDIVQ /// PLLSAI division factor for SAI1 clock - @ReadWrite(bits: 8..<13) + @ReadWrite(bits: 8..<13, as: PLLSAIDIVQValues.self) var pllsaidivq: PLLSAIDIVQ /// division factor for LCD_CLK - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: PLLSAIDIVRValues.self) var pllsaidivr: PLLSAIDIVR /// SAI1 clock source selection - @ReadWrite(bits: 20..<22) + @ReadWrite(bits: 20..<22, as: SAI1SELValues.self) var sai1sel: SAI1SEL /// SAI2 clock source selection - @ReadWrite(bits: 22..<24) + @ReadWrite(bits: 22..<24, as: SAI2SELValues.self) var sai2sel: SAI2SEL /// Timers clocks prescalers selection - @ReadWrite(bits: 24..<25) + @ReadWrite(bits: 24..<25, as: TIMPREValues.self) var timpre: TIMPRE } /// dedicated clocks configuration register @Register(bitWidth: 32) - struct DKCFGR2 { + struct DCKCFGR2 { /// USART 1 clock source selection - @ReadWrite(bits: 0..<2) + @ReadWrite(bits: 0..<2, as: USART1SELValues.self) var usart1sel: USART1SEL /// USART 2 clock source selection - @ReadWrite(bits: 2..<4) + @ReadWrite(bits: 2..<4, as: USART2SELValues.self) var usart2sel: USART2SEL /// USART 3 clock source selection @@ -1579,7 +1523,7 @@ extension RCC { var uart8sel: UART8SEL /// I2C1 clock source selection - @ReadWrite(bits: 16..<18) + @ReadWrite(bits: 16..<18, as: I2C1SELValues.self) var i2c1sel: I2C1SEL /// I2C2 clock source selection @@ -1595,19 +1539,1295 @@ extension RCC { var i2c4sel: I2C4SEL /// Low power timer 1 clock source selection - @ReadWrite(bits: 24..<26) + @ReadWrite(bits: 24..<26, as: LPTIM1SELValues.self) var lptim1sel: LPTIM1SEL /// HDMI-CEC clock source selection - @ReadWrite(bits: 26..<27) + @ReadWrite(bits: 26..<27, as: CECSELValues.self) var cecsel: CECSEL /// 48MHz clock source selection - @ReadWrite(bits: 27..<28) + @ReadWrite(bits: 27..<28, as: CK48MSELValues.self) var ck48msel: CK48MSEL /// SDMMC clock source selection - @ReadWrite(bits: 28..<29) - var sdmmcsel: SDMMCSEL + @ReadWrite(bits: 28..<29, as: SDMMC1SELValues.self) + var sdmmc1sel: SDMMC1SEL + } +} + +extension RCC.CR { + struct CSSONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock security system disabled (clock detector OFF) + static let Off = Self(rawValue: 0x0) + + /// Clock security system enable (clock detector ON if the HSE is ready, OFF if not) + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// HSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CR { + struct HSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Clock Off + static let Off = Self(rawValue: 0x0) + + /// Clock On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// HSI clock selected as PLL and PLLI2S clock entry + static let HSI = Self(rawValue: 0x0) + + /// HSE oscillator clock selected as PLL and PLLI2S clock entry + static let HSE = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLCFGR { + struct PLLPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLP=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLP=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLP=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLLP=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO2Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// System clock (SYSCLK) selected + static let SYSCLK = Self(rawValue: 0x0) + + /// PLLI2S clock selected + static let PLLI2S = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1PREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// No division + static let Div1 = Self(rawValue: 0x0) + + /// Division by 2 + static let Div2 = Self(rawValue: 0x4) + + /// Division by 3 + static let Div3 = Self(rawValue: 0x5) + + /// Division by 4 + static let Div4 = Self(rawValue: 0x6) + + /// Division by 5 + static let Div5 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct I2SSRCValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// PLLI2S clock used as I2S clock source + static let PLLI2S = Self(rawValue: 0x0) + + /// External clock mapped on the I2S_CKIN pin used as I2S clock source + static let CKIN = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct MCO1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI clock selected + static let HSI = Self(rawValue: 0x0) + + /// LSE oscillator selected + static let LSE = Self(rawValue: 0x1) + + /// HSE oscillator clock selected + static let HSE = Self(rawValue: 0x2) + + /// PLL clock selected + static let PLL = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct PPRE1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 3 + + /// HCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// HCLK divided by 2 + static let Div2 = Self(rawValue: 0x4) + + /// HCLK divided by 4 + static let Div4 = Self(rawValue: 0x5) + + /// HCLK divided by 8 + static let Div8 = Self(rawValue: 0x6) + + /// HCLK divided by 16 + static let Div16 = Self(rawValue: 0x7) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct HPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 4 + + /// SYSCLK not divided + static let Div1 = Self(rawValue: 0x0) + + /// SYSCLK divided by 2 + static let Div2 = Self(rawValue: 0x8) + + /// SYSCLK divided by 4 + static let Div4 = Self(rawValue: 0x9) + + /// SYSCLK divided by 8 + static let Div8 = Self(rawValue: 0xa) + + /// SYSCLK divided by 16 + static let Div16 = Self(rawValue: 0xb) + + /// SYSCLK divided by 64 + static let Div64 = Self(rawValue: 0xc) + + /// SYSCLK divided by 128 + static let Div128 = Self(rawValue: 0xd) + + /// SYSCLK divided by 256 + static let Div256 = Self(rawValue: 0xe) + + /// SYSCLK divided by 512 + static let Div512 = Self(rawValue: 0xf) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CFGR { + struct SWValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// HSI selected as system clock + static let HSI = Self(rawValue: 0x0) + + /// HSE selected as system clock + static let HSE = Self(rawValue: 0x1) + + /// PLL selected as system clock + static let PLL = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CIR { + struct LSIRDYIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1RSTR { + struct GPIOARSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2RSTR { + struct DCMIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3RSTR { + struct FMCRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1RSTR { + struct TIM2RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2RSTR { + struct TIM1RSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset the selected module + static let Reset = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1ENR { + struct GPIOAENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2ENR { + struct DCMIENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3ENR { + struct FMCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1ENR { + struct TIM2ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2ENR { + struct TIM1ENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The selected clock is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The selected clock is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB1LPENR { + struct GPIOALPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB2LPENR { + struct DCMILPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.AHB3LPENR { + struct FMCLPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB1LPENR { + struct TIM2LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.APB2LPENR { + struct TIM1LPENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Selected module is disabled during Sleep mode + static let DisabledInSleep = Self(rawValue: 0x0) + + /// Selected module is enabled during Sleep mode + static let EnabledInSleep = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct BDRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Reset not activated + static let Disabled = Self(rawValue: 0x0) + + /// Reset the entire RTC domain + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RTC clock disabled + static let Disabled = Self(rawValue: 0x0) + + /// RTC clock enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEBYPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE crystal oscillator not bypassed + static let NotBypassed = Self(rawValue: 0x0) + + /// LSE crystal oscillator bypassed with external clock + static let Bypassed = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSE oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct LSEDRVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Low drive capacity + static let Low = Self(rawValue: 0x0) + + /// Medium-high drive capacity + static let MediumHigh = Self(rawValue: 0x1) + + /// Medium-low drive capacity + static let MediumLow = Self(rawValue: 0x2) + + /// High drive capacity + static let High = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.BDCR { + struct RTCSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// No clock + static let NoClock = Self(rawValue: 0x0) + + /// LSE oscillator clock used as RTC clock + static let LSE = Self(rawValue: 0x1) + + /// LSI oscillator clock used as RTC clock + static let LSI = Self(rawValue: 0x2) + + /// HSE oscillator clock divided by a prescaler used as RTC clock + static let HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.CSR { + struct LSIONValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSI oscillator Off + static let Off = Self(rawValue: 0x0) + + /// LSI oscillator On + static let On = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SSCGENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Spread spectrum modulation disabled + static let Disabled = Self(rawValue: 0x0) + + /// Spread spectrum modulation enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.SSCGR { + struct SPREADSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Center spread + static let Center = Self(rawValue: 0x0) + + /// Down spread + static let Down = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLI2SCFGR { + struct PLLI2SPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.PLLSAICFGR { + struct PLLSAIPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLL*P=2 + static let Div2 = Self(rawValue: 0x0) + + /// PLL*P=4 + static let Div4 = Self(rawValue: 0x1) + + /// PLL*P=6 + static let Div6 = Self(rawValue: 0x2) + + /// PLL*P=8 + static let Div8 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLI2SDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLI2SDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLI2SDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLI2SDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLI2SDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLI2SDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLI2SDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLI2SDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLI2SDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLI2SDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLI2SDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLI2SDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLI2SDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLI2SDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLI2SDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLI2SDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLI2SDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLI2SDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLI2SDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLI2SDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLI2SDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLI2SDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLI2SDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLI2SDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLI2SDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLI2SDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLI2SDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLI2SDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLI2SDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLI2SDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLI2SDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLI2SDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLI2SDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVQValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 5 + + /// PLLSAIDIVQ = /1 + static let Div1 = Self(rawValue: 0x0) + + /// PLLSAIDIVQ = /2 + static let Div2 = Self(rawValue: 0x1) + + /// PLLSAIDIVQ = /3 + static let Div3 = Self(rawValue: 0x2) + + /// PLLSAIDIVQ = /4 + static let Div4 = Self(rawValue: 0x3) + + /// PLLSAIDIVQ = /5 + static let Div5 = Self(rawValue: 0x4) + + /// PLLSAIDIVQ = /6 + static let Div6 = Self(rawValue: 0x5) + + /// PLLSAIDIVQ = /7 + static let Div7 = Self(rawValue: 0x6) + + /// PLLSAIDIVQ = /8 + static let Div8 = Self(rawValue: 0x7) + + /// PLLSAIDIVQ = /9 + static let Div9 = Self(rawValue: 0x8) + + /// PLLSAIDIVQ = /10 + static let Div10 = Self(rawValue: 0x9) + + /// PLLSAIDIVQ = /11 + static let Div11 = Self(rawValue: 0xa) + + /// PLLSAIDIVQ = /12 + static let Div12 = Self(rawValue: 0xb) + + /// PLLSAIDIVQ = /13 + static let Div13 = Self(rawValue: 0xc) + + /// PLLSAIDIVQ = /14 + static let Div14 = Self(rawValue: 0xd) + + /// PLLSAIDIVQ = /15 + static let Div15 = Self(rawValue: 0xe) + + /// PLLSAIDIVQ = /16 + static let Div16 = Self(rawValue: 0xf) + + /// PLLSAIDIVQ = /17 + static let Div17 = Self(rawValue: 0x10) + + /// PLLSAIDIVQ = /18 + static let Div18 = Self(rawValue: 0x11) + + /// PLLSAIDIVQ = /19 + static let Div19 = Self(rawValue: 0x12) + + /// PLLSAIDIVQ = /20 + static let Div20 = Self(rawValue: 0x13) + + /// PLLSAIDIVQ = /21 + static let Div21 = Self(rawValue: 0x14) + + /// PLLSAIDIVQ = /22 + static let Div22 = Self(rawValue: 0x15) + + /// PLLSAIDIVQ = /23 + static let Div23 = Self(rawValue: 0x16) + + /// PLLSAIDIVQ = /24 + static let Div24 = Self(rawValue: 0x17) + + /// PLLSAIDIVQ = /25 + static let Div25 = Self(rawValue: 0x18) + + /// PLLSAIDIVQ = /26 + static let Div26 = Self(rawValue: 0x19) + + /// PLLSAIDIVQ = /27 + static let Div27 = Self(rawValue: 0x1a) + + /// PLLSAIDIVQ = /28 + static let Div28 = Self(rawValue: 0x1b) + + /// PLLSAIDIVQ = /29 + static let Div29 = Self(rawValue: 0x1c) + + /// PLLSAIDIVQ = /30 + static let Div30 = Self(rawValue: 0x1d) + + /// PLLSAIDIVQ = /31 + static let Div31 = Self(rawValue: 0x1e) + + /// PLLSAIDIVQ = /32 + static let Div32 = Self(rawValue: 0x1f) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct PLLSAIDIVRValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// PLLSAIDIVR = /2 + static let Div2 = Self(rawValue: 0x0) + + /// PLLSAIDIVR = /4 + static let Div4 = Self(rawValue: 0x1) + + /// PLLSAIDIVR = /8 + static let Div8 = Self(rawValue: 0x2) + + /// PLLSAIDIVR = /16 + static let Div16 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI1 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI1 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI1 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI1 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct SAI2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// SAI2 clock frequency = f(PLLSAI_Q) / PLLSAIDIVQ + static let PLLSAI = Self(rawValue: 0x0) + + /// SAI2 clock frequency = f(PLLI2S_Q) / PLLI2SDIVQ + static let PLLI2S = Self(rawValue: 0x1) + + /// SAI2 clock frequency = Alternate function input frequency + static let AFIF = Self(rawValue: 0x2) + + /// SAI2 clock frequency = HSI or HSE + static let HSI_HSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR1 { + struct TIMPREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// If the APB prescaler is configured 1, TIMxCLK = PCLKx. Otherwise, TIMxCLK = 2xPCLKx + static let Mul1Or2 = Self(rawValue: 0x0) + + /// If the APB prescaler is configured 1, 2 or 4, TIMxCLK = HCLK. Otherwise, TIMxCLK = 4xPCLKx + static let Mul1Or4 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB2 clock (PCLK2) is selected as USART clock + static let APB2 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct USART2SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) is selected as USART clock + static let APB1 = Self(rawValue: 0x0) + + /// System clock is selected as USART clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock is selected as USART clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as USART clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct I2C1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB clock selected as I2C clock + static let APB = Self(rawValue: 0x0) + + /// System clock selected as I2C clock + static let SYSCLK = Self(rawValue: 0x1) + + /// HSI clock selected as I2C clock + static let HSI = Self(rawValue: 0x2) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct LPTIM1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// APB1 clock (PCLK1) selected as LPTILM1 clock + static let APB1 = Self(rawValue: 0x0) + + /// LSI clock is selected as LPTILM1 clock + static let LSI = Self(rawValue: 0x1) + + /// HSI clock is selected as LPTILM1 clock + static let HSI = Self(rawValue: 0x2) + + /// LSE clock is selected as LPTILM1 clock + static let LSE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CECSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LSE clock is selected as HDMI-CEC clock + static let LSE = Self(rawValue: 0x0) + + /// HSI divided by 488 clock is selected as HDMI-CEC clock + static let HSI_Div488 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct CK48MSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48MHz clock from PLL is selected + static let PLL = Self(rawValue: 0x0) + + /// 48MHz clock from PLLSAI is selected + static let PLLSAI = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension RCC.DCKCFGR2 { + struct SDMMC1SELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 48 MHz clock is selected as SD clock + static let CK48M = Self(rawValue: 0x0) + + /// System clock is selected as SD clock + static let SYSCLK = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } } } diff --git a/stm32-uart-echo/Sources/Application/Registers/USART1.swift b/stm32-uart-echo/Sources/Application/Registers/USART1.swift index 19cc4ee3..6230310f 100644 --- a/stm32-uart-echo/Sources/Application/Registers/USART1.swift +++ b/stm32-uart-echo/Sources/Application/Registers/USART1.swift @@ -1,7 +1,5 @@ // Generated by svd2swift. -// swift-format-ignore-file - import MMIO /// Universal synchronous asynchronous receiver transmitter @@ -57,215 +55,175 @@ extension USART1 { @Register(bitWidth: 32) struct CR1 { /// Word length - @ReadWrite(bits: 28..<29) + @ReadWrite(bits: 28..<29, as: M1Values.self) var m1: M1 /// End of Block interrupt enable - @ReadWrite(bits: 27..<28) + @ReadWrite(bits: 27..<28, as: EOBIEValues.self) var eobie: EOBIE /// Receiver timeout interrupt enable - @ReadWrite(bits: 26..<27) + @ReadWrite(bits: 26..<27, as: RTOIEValues.self) var rtoie: RTOIE - /// Driver Enable assertion time - @ReadWrite(bits: 25..<26) - var deat4: DEAT4 - - /// DEAT3 - @ReadWrite(bits: 24..<25) - var deat3: DEAT3 - - /// DEAT2 - @ReadWrite(bits: 23..<24) - var deat2: DEAT2 - - /// DEAT1 - @ReadWrite(bits: 22..<23) - var deat1: DEAT1 - - /// DEAT0 - @ReadWrite(bits: 21..<22) - var deat0: DEAT0 - - /// Driver Enable de-assertion time - @ReadWrite(bits: 20..<21) - var dedt4: DEDT4 - - /// DEDT3 - @ReadWrite(bits: 19..<20) - var dedt3: DEDT3 - - /// DEDT2 - @ReadWrite(bits: 18..<19) - var dedt2: DEDT2 - - /// DEDT1 - @ReadWrite(bits: 17..<18) - var dedt1: DEDT1 - - /// DEDT0 - @ReadWrite(bits: 16..<17) - var dedt0: DEDT0 - /// Oversampling mode - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: OVER8Values.self) var over8: OVER8 /// Character match interrupt enable - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: CMIEValues.self) var cmie: CMIE /// Mute mode enable - @ReadWrite(bits: 13..<14) + @ReadWrite(bits: 13..<14, as: MMEValues.self) var mme: MME /// Word length - @ReadWrite(bits: 12..<13) + @ReadWrite(bits: 12..<13, as: M0Values.self) var m0: M0 /// Receiver wakeup method - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: WAKEValues.self) var wake: WAKE /// Parity control enable - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: PCEValues.self) var pce: PCE /// Parity selection - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: PSValues.self) var ps: PS /// PE interrupt enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: PEIEValues.self) var peie: PEIE /// interrupt enable - @ReadWrite(bits: 7..<8) + @ReadWrite(bits: 7..<8, as: TXEIEValues.self) var txeie: TXEIE /// Transmission complete interrupt enable - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: TCIEValues.self) var tcie: TCIE /// RXNE interrupt enable - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: RXNEIEValues.self) var rxneie: RXNEIE /// IDLE interrupt enable - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: IDLEIEValues.self) var idleie: IDLEIE /// Transmitter enable - @ReadWrite(bits: 3..<4) + @ReadWrite(bits: 3..<4, as: TEValues.self) var te: TE /// Receiver enable - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: REValues.self) var re: RE /// USART enable in Stop mode - @ReadWrite(bits: 1..<2) + @ReadWrite(bits: 1..<2, as: UESMValues.self) var uesm: UESM /// USART enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: UEValues.self) var ue: UE + + /// Driver Enable assertion time + @ReadWrite(bits: 21..<26) + var deat: DEAT + + /// Driver Enable de-assertion time + @ReadWrite(bits: 16..<21) + var dedt: DEDT } /// Control register 2 @Register(bitWidth: 32) struct CR2 { - /// Address of the USART node - @ReadWrite(bits: 28..<32) - var add4_7: ADD4_7 - - /// Address of the USART node - @ReadWrite(bits: 24..<28) - var add0_3: ADD0_3 - /// Receiver timeout enable - @ReadWrite(bits: 23..<24) + @ReadWrite(bits: 23..<24, as: RTOENValues.self) var rtoen: RTOEN - /// Auto baud rate mode - @ReadWrite(bits: 22..<23) - var abrmod1: ABRMOD1 - - /// ABRMOD0 - @ReadWrite(bits: 21..<22) - var abrmod0: ABRMOD0 - /// Auto baud rate enable - @ReadWrite(bits: 20..<21) + @ReadWrite(bits: 20..<21, as: ABRENValues.self) var abren: ABREN /// Most significant bit first - @ReadWrite(bits: 19..<20) + @ReadWrite(bits: 19..<20, as: MSBFIRSTValues.self) var msbfirst: MSBFIRST /// Binary data inversion - @ReadWrite(bits: 18..<19) - var tainv: TAINV + @ReadWrite(bits: 18..<19, as: DATAINVValues.self) + var datainv: DATAINV /// TX pin active level inversion - @ReadWrite(bits: 17..<18) + @ReadWrite(bits: 17..<18, as: TXINVValues.self) var txinv: TXINV /// RX pin active level inversion - @ReadWrite(bits: 16..<17) + @ReadWrite(bits: 16..<17, as: RXINVValues.self) var rxinv: RXINV /// Swap TX/RX pins - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: SWAPValues.self) var swap: SWAP /// LIN mode enable - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: LINENValues.self) var linen: LINEN /// STOP bits - @ReadWrite(bits: 12..<14) + @ReadWrite(bits: 12..<14, as: STOPValues.self) var stop: STOP /// Clock enable - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: CLKENValues.self) var clken: CLKEN /// Clock polarity - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: CPOLValues.self) var cpol: CPOL /// Clock phase - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: CPHAValues.self) var cpha: CPHA /// Last bit clock pulse - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: LBCLValues.self) var lbcl: LBCL /// LIN break detection interrupt enable - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: LBDIEValues.self) var lbdie: LBDIE /// LIN break detection length - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: LBDLValues.self) var lbdl: LBDL /// 7-bit Address Detection/4-bit Address Detection - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: ADDM7Values.self) var addm7: ADDM7 + + /// Auto baud rate mode + @ReadWrite(bits: 21..<23, as: ABRMODValues.self) + var abrmod: ABRMOD + + /// Address of the USART node + @ReadWrite(bits: 24..<32) + var add: ADD } /// Control register 3 @Register(bitWidth: 32) struct CR3 { /// Wakeup from Stop mode interrupt enable - @ReadWrite(bits: 22..<23) + @ReadWrite(bits: 22..<23, as: WUFIEValues.self) var wufie: WUFIE /// Wakeup from Stop mode interrupt flag selection - @ReadWrite(bits: 20..<22) + @ReadWrite(bits: 20..<22, as: WUSValues.self) var wus: WUS /// Smartcard auto-retry count @@ -273,67 +231,67 @@ extension USART1 { var scarcnt: SCARCNT /// Driver enable polarity selection - @ReadWrite(bits: 15..<16) + @ReadWrite(bits: 15..<16, as: DEPValues.self) var dep: DEP /// Driver enable mode - @ReadWrite(bits: 14..<15) + @ReadWrite(bits: 14..<15, as: DEMValues.self) var dem: DEM /// DMA Disable on Reception Error - @ReadWrite(bits: 13..<14) + @ReadWrite(bits: 13..<14, as: DDREValues.self) var ddre: DDRE /// Overrun Disable - @ReadWrite(bits: 12..<13) + @ReadWrite(bits: 12..<13, as: OVRDISValues.self) var ovrdis: OVRDIS /// One sample bit method enable - @ReadWrite(bits: 11..<12) + @ReadWrite(bits: 11..<12, as: ONEBITValues.self) var onebit: ONEBIT /// CTS interrupt enable - @ReadWrite(bits: 10..<11) + @ReadWrite(bits: 10..<11, as: CTSIEValues.self) var ctsie: CTSIE /// CTS enable - @ReadWrite(bits: 9..<10) + @ReadWrite(bits: 9..<10, as: CTSEValues.self) var ctse: CTSE /// RTS enable - @ReadWrite(bits: 8..<9) + @ReadWrite(bits: 8..<9, as: RTSEValues.self) var rtse: RTSE /// DMA enable transmitter - @ReadWrite(bits: 7..<8) + @ReadWrite(bits: 7..<8, as: DMATValues.self) var dmat: DMAT /// DMA enable receiver - @ReadWrite(bits: 6..<7) + @ReadWrite(bits: 6..<7, as: DMARValues.self) var dmar: DMAR /// Smartcard mode enable - @ReadWrite(bits: 5..<6) + @ReadWrite(bits: 5..<6, as: SCENValues.self) var scen: SCEN /// Smartcard NACK enable - @ReadWrite(bits: 4..<5) + @ReadWrite(bits: 4..<5, as: NACKValues.self) var nack: NACK /// Half-duplex selection - @ReadWrite(bits: 3..<4) + @ReadWrite(bits: 3..<4, as: HDSELValues.self) var hdsel: HDSEL /// Ir low-power - @ReadWrite(bits: 2..<3) + @ReadWrite(bits: 2..<3, as: IRLPValues.self) var irlp: IRLP /// Ir mode enable - @ReadWrite(bits: 1..<2) + @ReadWrite(bits: 1..<2, as: IRENValues.self) var iren: IREN /// Error interrupt enable - @ReadWrite(bits: 0..<1) + @ReadWrite(bits: 0..<1, as: EIEValues.self) var eie: EIE } @@ -341,12 +299,8 @@ extension USART1 { @Register(bitWidth: 32) struct BRR { /// DIV_Mantissa - @ReadWrite(bits: 4..<16) - var div_mantissa: DIV_Mantissa - - /// DIV_Fraction - @ReadWrite(bits: 0..<4) - var div_fraction: DIV_Fraction + @ReadWrite(bits: 0..<16) + var brr_field: BRR_FIELD } /// Guard time and prescaler register @@ -557,3 +511,1044 @@ extension USART1 { var tdr_field: TDR_FIELD } } + +extension USART1.CR1 { + struct M1Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Use M0 to set the data bits + static let M0 = Self(rawValue: 0x0) + + /// 1 start bit, 7 data bits, n stop bits + static let Bit7 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct EOBIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// A USART interrupt is generated when the EOBF flag is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct RTOIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An USART interrupt is generated when the RTOF bit is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct OVER8Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Oversampling by 16 + static let Oversampling16 = Self(rawValue: 0x0) + + /// Oversampling by 8 + static let Oversampling8 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct CMIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated when the CMF bit is set in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct MMEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver in active mode permanently + static let Disabled = Self(rawValue: 0x0) + + /// Receiver can switch between mute mode and active mode + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct M0Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 1 start bit, 8 data bits, n stop bits + static let Bit8 = Self(rawValue: 0x0) + + /// 1 start bit, 9 data bits, n stop bits + static let Bit9 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct WAKEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Idle line + static let Idle = Self(rawValue: 0x0) + + /// Address mask + static let Address = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PCEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Parity control disabled + static let Disabled = Self(rawValue: 0x0) + + /// Parity control enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Even parity + static let Even = Self(rawValue: 0x0) + + /// Odd parity + static let Odd = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct PEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever PE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TXEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever TXE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TCIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever TC=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct RXNEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever ORE=1 or RXNE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct IDLEIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Interrupt is generated whenever IDLE=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct TEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Transmitter is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Transmitter is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct REValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Receiver is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct UESMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// USART not able to wake up the MCU from Stop mode + static let Disabled = Self(rawValue: 0x0) + + /// USART able to wake up the MCU from Stop mode + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR1 { + struct UEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// UART is disabled + static let Disabled = Self(rawValue: 0x0) + + /// UART is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct RTOENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Receiver timeout feature disabled + static let Disabled = Self(rawValue: 0x0) + + /// Receiver timeout feature enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ABRENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Auto baud rate detection is disabled + static let Disabled = Self(rawValue: 0x0) + + /// Auto baud rate detection is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct MSBFIRSTValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// data is transmitted/received with data bit 0 first, following the start bit + static let LSB = Self(rawValue: 0x0) + + /// data is transmitted/received with MSB (bit 7/8/9) first, following the start bit + static let MSB = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct DATAINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Logical data from the data register are send/received in positive/direct logic + static let Positive = Self(rawValue: 0x0) + + /// Logical data from the data register are send/received in negative/inverse logic + static let Negative = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct TXINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TX pin signal works using the standard logic levels + static let Standard = Self(rawValue: 0x0) + + /// TX pin signal values are inverted + static let Inverted = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct RXINVValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RX pin signal works using the standard logic levels + static let Standard = Self(rawValue: 0x0) + + /// RX pin signal values are inverted + static let Inverted = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct SWAPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// TX/RX pins are used as defined in standard pinout + static let Standard = Self(rawValue: 0x0) + + /// The TX and RX pins functions are swapped + static let Swapped = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LINENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// LIN mode disabled + static let Disabled = Self(rawValue: 0x0) + + /// LIN mode enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct STOPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// 1 stop bit + static let Stop1 = Self(rawValue: 0x0) + + /// 0.5 stop bit + static let Stop0p5 = Self(rawValue: 0x1) + + /// 2 stop bit + static let Stop2 = Self(rawValue: 0x2) + + /// 1.5 stop bit + static let Stop1p5 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CLKENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CK pin disabled + static let Disabled = Self(rawValue: 0x0) + + /// CK pin enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CPOLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Steady low value on CK pin outside transmission window + static let Low = Self(rawValue: 0x0) + + /// Steady high value on CK pin outside transmission window + static let High = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct CPHAValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The first clock transition is the first data capture edge + static let First = Self(rawValue: 0x0) + + /// The second clock transition is the first data capture edge + static let Second = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBCLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// The clock pulse of the last data bit is not output to the CK pin + static let NotOutput = Self(rawValue: 0x0) + + /// The clock pulse of the last data bit is output to the CK pin + static let Output = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBDIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated whenever LBDF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct LBDLValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 10-bit break detection + static let Bit10 = Self(rawValue: 0x0) + + /// 11-bit break detection + static let Bit11 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ADDM7Values: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// 4-bit address detection + static let Bit4 = Self(rawValue: 0x0) + + /// 7-bit address detection + static let Bit7 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR2 { + struct ABRMODValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// Measurement of the start bit is used to detect the baud rate + static let Start = Self(rawValue: 0x0) + + /// Falling edge to falling edge measurement + static let Edge = Self(rawValue: 0x1) + + /// 0x7F frame detection + static let Frame7F = Self(rawValue: 0x2) + + /// 0x55 frame detection + static let Frame55 = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct WUFIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An USART interrupt is generated whenever WUF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct WUSValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 2 + + /// WUF active on address match + static let Address = Self(rawValue: 0x0) + + /// WuF active on Start bit detection + static let Start = Self(rawValue: 0x2) + + /// WUF active on RXNE + static let RXNE = Self(rawValue: 0x3) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DEPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DE signal is active high + static let High = Self(rawValue: 0x0) + + /// DE signal is active low + static let Low = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DEMValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DE function is disabled + static let Disabled = Self(rawValue: 0x0) + + /// The DE signal is output on the RTS pin + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DDREValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA is not disabled in case of reception error + static let NotDisabled = Self(rawValue: 0x0) + + /// DMA is disabled following a reception error + static let Disabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct OVRDISValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Overrun Error Flag, ORE, is set when received data is not read before receiving new data + static let Enabled = Self(rawValue: 0x0) + + /// Overrun functionality is disabled. If new data is received while the RXNE flag is still set the ORE flag is not set and the new received data overwrites the previous content of the RDR register + static let Disabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct ONEBITValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Three sample bit method + static let Sample3 = Self(rawValue: 0x0) + + /// One sample bit method + static let Sample1 = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct CTSIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated whenever CTSIF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct CTSEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// CTS hardware flow control disabled + static let Disabled = Self(rawValue: 0x0) + + /// CTS mode enabled, data is only transmitted when the CTS input is asserted + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct RTSEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// RTS hardware flow control disabled + static let Disabled = Self(rawValue: 0x0) + + /// RTS output enabled, data is only requested when there is space in the receive buffer + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DMATValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA mode is disabled for transmission + static let Disabled = Self(rawValue: 0x0) + + /// DMA mode is enabled for transmission + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct DMARValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// DMA mode is disabled for reception + static let Disabled = Self(rawValue: 0x0) + + /// DMA mode is enabled for reception + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct SCENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Smartcard Mode disabled + static let Disabled = Self(rawValue: 0x0) + + /// Smartcard Mode enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct NACKValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// NACK transmission in case of parity error is disabled + static let Disabled = Self(rawValue: 0x0) + + /// NACK transmission during parity error is enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct HDSELValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Half duplex mode is not selected + static let NotSelected = Self(rawValue: 0x0) + + /// Half duplex mode is selected + static let Selected = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct IRLPValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Normal mode + static let Normal = Self(rawValue: 0x0) + + /// Low-power mode + static let LowPower = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct IRENValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// IrDA disabled + static let Disabled = Self(rawValue: 0x0) + + /// IrDA enabled + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +} + +extension USART1.CR3 { + struct EIEValues: BitFieldProjectable, RawRepresentable { + static let bitWidth = 1 + + /// Interrupt is inhibited + static let Disabled = Self(rawValue: 0x0) + + /// An interrupt is generated when FE=1 or ORE=1 or NF=1 in the ISR register + static let Enabled = Self(rawValue: 0x1) + + var rawValue: UInt8 + + @inlinable @inline(__always) + init(rawValue: Self.RawValue) { + self.rawValue = rawValue + } + } +}