diff --git a/.github/workflows/auto-version.yml b/.github/workflows/auto-version.yml index 609deb314..3131b0ee5 100644 --- a/.github/workflows/auto-version.yml +++ b/.github/workflows/auto-version.yml @@ -20,8 +20,10 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: - submodules: true - ref: ${{env.CURRENT_BRANCH}} + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + ref: ${{ github.head_ref || github.ref_name }} + fetch-depth: 0 + persist-credentials: false - name: Update version id: update uses: vers-one/dotnet-project-version-updater@v1.7 @@ -29,8 +31,11 @@ jobs: file: ./src/ACadSharp/ACadSharp.csproj version: ${{env.VERSION_FORMAT}} - name: Push changes - run: ./push-changes.sh + run: bash push-changes.sh shell: bash env: - VERSION: ${{steps.update.outputs.newVersion}} - BRANCH: ${{env.CURRENT_BRANCH}} + BRANCH: ${{github.head_ref || github.ref_name}} + VERSION: ${{steps.update.outputs.newVersion}} + HEAD_REPO: ${{github.event.pull_request.head.repo.full_name}} + PUSH_TOKEN: ${{secrets.PUSH_TOKEN}} + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/push-changes.sh b/push-changes.sh index ea17880dc..8b258e3e3 100644 --- a/push-changes.sh +++ b/push-changes.sh @@ -1,16 +1,51 @@ -echo Prepare commit -#Get commit details -author=`git log -1 --format="%an"` -email=`git log -1 --format="%ae"` +#!/usr/bin/env bash +set -e + +echo "Prepare commit" + +if [ -z "$BRANCH" ] || [ -z "$VERSION" ]; then + echo "BRANCH or VERSION not set" + exit 1 +fi + +# Target repo: the fork for contributor PRs, otherwise this repo +TARGET_REPO="${HEAD_REPO:-$GITHUB_REPOSITORY}" + +# Fork pushes require the PAT; GITHUB_TOKEN can never push to forks +if [ "$TARGET_REPO" != "$GITHUB_REPOSITORY" ]; then + if [ -z "$PUSH_TOKEN" ]; then + echo "PUSH_TOKEN is empty: secrets are not available (use pull_request_target and pass secrets.PUSH_TOKEN)" + exit 1 + fi + TOKEN="$PUSH_TOKEN" +else + TOKEN="${PUSH_TOKEN:-$GITHUB_TOKEN}" +fi + +if [ -z "$TOKEN" ]; then + echo "No token available" + exit 1 +fi + +# Remove the GITHUB_TOKEN auth header persisted by actions/checkout +git config --local --unset-all http.https://github.com/.extraheader || true + +# Get commit details +author=$(git log -1 --format="%an") +email=$(git log -1 --format="%ae") git config --local user.email "$email" -git config --local user.name "$author" +git config --local user.name "$author" + git add . if git diff-index --quiet HEAD; then echo "Nothing changed" exit 0 fi -echo "Pushing changes $BRANCH" +echo "Pushing changes to $TARGET_REPO:$BRANCH" git commit -m "Update project version to $VERSION" -git push origin $BRANCH \ No newline at end of file + +git remote remove target 2>/dev/null || true +git remote add target "https://x-access-token:${TOKEN}@github.com/${TARGET_REPO}.git" +git push target "HEAD:$BRANCH" \ No newline at end of file diff --git a/samples/annotative/annotative_dimensions_AC1032.dwg b/samples/annotative/annotative_dimensions_AC1032.dwg new file mode 100644 index 000000000..0518d4873 Binary files /dev/null and b/samples/annotative/annotative_dimensions_AC1032.dwg differ diff --git a/samples/annotative/annotative_dimensions_AC1032.dxf b/samples/annotative/annotative_dimensions_AC1032.dxf new file mode 100644 index 000000000..01a155410 --- /dev/null +++ b/samples/annotative/annotative_dimensions_AC1032.dxf @@ -0,0 +1,28854 @@ + 0 +SECTION + 2 +HEADER + 9 +$ACADVER + 1 +AC1032 + 9 +$ACADMAINTVER + 90 + 378 + 9 +$DWGCODEPAGE + 3 +ANSI_1252 + 9 +$REQUIREDVERSIONS +160 + 0 + 9 +$INSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$EXTMIN + 10 +-26.69999999999999 + 20 +-48.51586157173763 + 30 +0.0 + 9 +$EXTMAX + 10 +540.5 + 20 +100.0000000000001 + 30 +0.0 + 9 +$LIMMIN + 10 +0.0 + 20 +0.0 + 9 +$LIMMAX + 10 +71.12 + 20 +48.56 + 9 +$ORTHOMODE + 70 + 0 + 9 +$REGENMODE + 70 + 1 + 9 +$FILLMODE + 70 + 1 + 9 +$QTEXTMODE + 70 + 0 + 9 +$MIRRTEXT + 70 + 0 + 9 +$LTSCALE + 40 +0.5 + 9 +$ATTMODE + 70 + 1 + 9 +$TEXTSIZE + 40 +0.1 + 9 +$TRACEWID + 40 +0.05 + 9 +$TEXTSTYLE + 7 +TIMES NEW ROMAN + 9 +$CLAYER + 8 +0 + 9 +$CELTYPE + 6 +ByLayer + 9 +$CECOLOR + 62 + 256 + 9 +$CELTSCALE + 40 +1.0 + 9 +$DISPSILH + 70 + 0 + 9 +$DIMSCALE + 40 +0.0 + 9 +$DIMASZ + 40 +0.1 + 9 +$DIMEXO + 40 +0.075 + 9 +$DIMDLI + 40 +0.075 + 9 +$DIMRND + 40 +0.0 + 9 +$DIMDLE + 40 +0.0 + 9 +$DIMEXE + 40 +0.025 + 9 +$DIMTP + 40 +0.0 + 9 +$DIMTM + 40 +0.0 + 9 +$DIMTXT + 40 +0.1 + 9 +$DIMCEN + 40 +0.05 + 9 +$DIMTSZ + 40 +0.0 + 9 +$DIMTOL + 70 + 0 + 9 +$DIMLIM + 70 + 0 + 9 +$DIMTIH + 70 + 0 + 9 +$DIMTOH + 70 + 0 + 9 +$DIMSE1 + 70 + 0 + 9 +$DIMSE2 + 70 + 0 + 9 +$DIMTAD + 70 + 1 + 9 +$DIMZIN + 70 + 3 + 9 +$DIMBLK + 1 + + 9 +$DIMASO + 70 + 1 + 9 +$DIMSHO + 70 + 1 + 9 +$DIMPOST + 1 +\X + 9 +$DIMAPOST + 1 + + 9 +$DIMALT + 70 + 0 + 9 +$DIMALTD + 70 + 2 + 9 +$DIMALTF + 40 +0.083333 + 9 +$DIMLFAC + 40 +1.0 + 9 +$DIMTOFL + 70 + 0 + 9 +$DIMTVP + 40 +0.0 + 9 +$DIMTIX + 70 + 0 + 9 +$DIMSOXD + 70 + 0 + 9 +$DIMSAH + 70 + 0 + 9 +$DIMBLK1 + 1 + + 9 +$DIMBLK2 + 1 + + 9 +$DIMSTYLE + 2 +ANNO + 9 +$DIMCLRD + 70 + 256 + 9 +$DIMCLRE + 70 + 256 + 9 +$DIMCLRT + 70 + 256 + 9 +$DIMTFAC + 40 +1.0 + 9 +$DIMGAP + 40 +0.025 + 9 +$DIMJUST + 70 + 0 + 9 +$DIMSD1 + 70 + 0 + 9 +$DIMSD2 + 70 + 0 + 9 +$DIMTOLJ + 70 + 1 + 9 +$DIMTZIN + 70 + 0 + 9 +$DIMALTZ + 70 + 0 + 9 +$DIMALTTZ + 70 + 0 + 9 +$DIMUPT + 70 + 0 + 9 +$DIMDEC + 70 + 2 + 9 +$DIMTDEC + 70 + 2 + 9 +$DIMALTU + 70 + 2 + 9 +$DIMALTTD + 70 + 2 + 9 +$DIMTXSTY + 7 +TIMES NEW ROMAN + 9 +$DIMAUNIT + 70 + 0 + 9 +$DIMADEC + 70 + 0 + 9 +$DIMALTRND + 40 +0.0 + 9 +$DIMAZIN + 70 + 0 + 9 +$DIMDSEP + 70 + 46 + 9 +$DIMATFIT + 70 + 3 + 9 +$DIMFRAC + 70 + 0 + 9 +$DIMLDRBLK + 1 + + 9 +$DIMLUNIT + 70 + 2 + 9 +$DIMLWD + 70 + -1 + 9 +$DIMLWE + 70 + -1 + 9 +$DIMTMOVE + 70 + 0 + 9 +$DIMFXL + 40 +1.0 + 9 +$DIMFXLON + 70 + 0 + 9 +$DIMJOGANG + 40 +0.7853981633974483 + 9 +$DIMTFILL + 70 + 0 + 9 +$DIMTFILLCLR + 70 + 256 + 9 +$DIMARCSYM + 70 + 0 + 9 +$DIMLTYPE + 6 +ByLayer + 9 +$DIMLTEX1 + 6 +ByLayer + 9 +$DIMLTEX2 + 6 +ByLayer + 9 +$DIMTXTDIRECTION + 70 + 0 + 9 +$LUNITS + 70 + 2 + 9 +$LUPREC + 70 + 4 + 9 +$SKETCHINC + 40 +0.1 + 9 +$FILLETRAD + 40 +0.0 + 9 +$AUNITS + 70 + 0 + 9 +$AUPREC + 70 + 4 + 9 +$MENU + 1 +. + 9 +$ELEVATION + 40 +0.0 + 9 +$PELEVATION + 40 +0.0 + 9 +$THICKNESS + 40 +0.0 + 9 +$LIMCHECK + 70 + 0 + 9 +$CHAMFERA + 40 +0.0 + 9 +$CHAMFERB + 40 +0.0 + 9 +$CHAMFERC + 40 +0.0 + 9 +$CHAMFERD + 40 +0.0 + 9 +$SKPOLY + 70 + 0 + 9 +$TDCREATE + 40 +2461322.279004630 + 9 +$TDUCREATE + 40 +2461322.487337963 + 9 +$TDUPDATE + 40 +2461322.288842592 + 9 +$TDUUPDATE + 40 +2461322.497175926 + 9 +$TDINDWG + 40 +0.0090625000 + 9 +$TDUSRTIMER + 40 +0.0090625000 + 9 +$USRTIMER + 70 + 1 + 9 +$ANGBASE + 50 +0.0 + 9 +$ANGDIR + 70 + 0 + 9 +$PDMODE + 70 + 0 + 9 +$PDSIZE + 40 +0.0 + 9 +$PLINEWID + 40 +0.0 + 9 +$SPLFRAME + 70 + 0 + 9 +$SPLINETYPE + 70 + 6 + 9 +$SPLINESEGS + 70 + 8 + 9 +$HANDSEED + 5 +1B6 + 9 +$SURFTAB1 + 70 + 6 + 9 +$SURFTAB2 + 70 + 6 + 9 +$SURFTYPE + 70 + 6 + 9 +$SURFU + 70 + 6 + 9 +$SURFV + 70 + 6 + 9 +$UCSBASE + 2 + + 9 +$UCSNAME + 2 + + 9 +$UCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$UCSORTHOREF + 2 + + 9 +$UCSORTHOVIEW + 70 + 0 + 9 +$UCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$UCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSBASE + 2 + + 9 +$PUCSNAME + 2 + + 9 +$PUCSORG + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSXDIR + 10 +1.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSYDIR + 10 +0.0 + 20 +1.0 + 30 +0.0 + 9 +$PUCSORTHOREF + 2 + + 9 +$PUCSORTHOVIEW + 70 + 0 + 9 +$PUCSORGTOP + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBOTTOM + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGLEFT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGRIGHT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGFRONT + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PUCSORGBACK + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$USERI1 + 70 + 0 + 9 +$USERI2 + 70 + 0 + 9 +$USERI3 + 70 + 0 + 9 +$USERI4 + 70 + 0 + 9 +$USERI5 + 70 + 0 + 9 +$USERR1 + 40 +0.0 + 9 +$USERR2 + 40 +0.0 + 9 +$USERR3 + 40 +0.0 + 9 +$USERR4 + 40 +0.0 + 9 +$USERR5 + 40 +0.0 + 9 +$WORLDVIEW + 70 + 1 + 9 +$SHADEDGE + 70 + 3 + 9 +$SHADEDIF + 70 + 70 + 9 +$TILEMODE + 70 + 1 + 9 +$MAXACTVP + 70 + 64 + 9 +$PINSBASE + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMCHECK + 70 + 0 + 9 +$PEXTMIN + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PEXTMAX + 10 +0.0 + 20 +0.0 + 30 +0.0 + 9 +$PLIMMIN + 10 +0.0 + 20 +0.0 + 9 +$PLIMMAX + 10 +12.0 + 20 +9.0 + 9 +$UNITMODE + 70 + 0 + 9 +$VISRETAIN + 70 + 1 + 9 +$PLINEGEN + 70 + 0 + 9 +$PSLTSCALE + 70 + 1 + 9 +$TREEDEPTH + 70 + 3020 + 9 +$CMLSTYLE + 2 +Standard + 9 +$CMLJUST + 70 + 0 + 9 +$CMLSCALE + 40 +1.0 + 9 +$PROXYGRAPHICS + 70 + 1 + 9 +$MEASUREMENT + 70 + 0 + 9 +$CELWEIGHT +370 + -1 + 9 +$ENDCAPS +280 + 0 + 9 +$JOINSTYLE +280 + 0 + 9 +$LWDISPLAY +290 + 0 + 9 +$INSUNITS + 70 + 1 + 9 +$HYPERLINKBASE + 1 + + 9 +$STYLESHEET + 1 + + 9 +$XEDIT +290 + 1 + 9 +$CEPSNTYPE +380 + 0 + 9 +$PSTYLEMODE +290 + 0 + 9 +$FINGERPRINTGUID + 2 +{B011A2A0-58B3-D842-B8BB-94E5ECAF7B17} + 9 +$VERSIONGUID + 2 +{9F3117B8-C94C-AE4D-9AEC-D145B0D9E4C3} + 9 +$EXTNAMES +290 + 1 + 9 +$PSVPSCALE + 40 +0.0 + 9 +$OLESTARTUP +290 + 0 + 9 +$SORTENTS +280 + 127 + 9 +$INDEXCTL +280 + 0 + 9 +$HIDETEXT +280 + 1 + 9 +$XCLIPFRAME +280 + 0 + 9 +$HALOGAP +280 + 0 + 9 +$OBSCOLOR + 70 + 257 + 9 +$OBSLTYPE +280 + 0 + 9 +$INTERSECTIONDISPLAY +280 + 0 + 9 +$INTERSECTIONCOLOR + 70 + 257 + 9 +$DIMASSOC +280 + 1 + 9 +$PROJECTNAME + 1 + + 9 +$CAMERADISPLAY +290 + 0 + 9 +$LENSLENGTH + 40 +50.0 + 9 +$CAMERAHEIGHT + 40 +0.0 + 9 +$STEPSPERSEC + 40 +2.0 + 9 +$STEPSIZE + 40 +6.0 + 9 +$3DDWFPREC + 40 +2.0 + 9 +$PSOLWIDTH + 40 +0.25 + 9 +$PSOLHEIGHT + 40 +4.0 + 9 +$LOFTANG1 + 40 +1.570796326794896 + 9 +$LOFTANG2 + 40 +1.570796326794896 + 9 +$LOFTMAG1 + 40 +0.0 + 9 +$LOFTMAG2 + 40 +0.0 + 9 +$LOFTPARAM + 70 + 7 + 9 +$LOFTNORMALS +280 + 1 + 9 +$LATITUDE + 40 +37.795 + 9 +$LONGITUDE + 40 +-122.394 + 9 +$NORTHDIRECTION + 40 +0.0 + 9 +$TIMEZONE + 70 + -8000 + 9 +$LIGHTGLYPHDISPLAY +280 + 1 + 9 +$TILEMODELIGHTSYNCH +280 + 1 + 9 +$CMATERIAL +347 +3C + 9 +$SOLIDHIST +280 + 1 + 9 +$SHOWHIST +280 + 1 + 9 +$DWFFRAME +280 + 2 + 9 +$DGNFRAME +280 + 0 + 9 +$REALWORLDSCALE +290 + 1 + 9 +$INTERFERECOLOR + 62 + 1 + 9 +$INTERFEREOBJVS +345 +54 + 9 +$INTERFEREVPVS +346 +55 + 9 +$CSHADOW +280 + 0 + 9 +$SHADOWPLANELOCATION + 40 +0.0 + 0 +ENDSEC + 0 +SECTION + 2 +CLASSES + 0 +CLASS + 1 +ACDBDICTIONARYWDFLT + 2 +AcDbDictionaryWithDefault + 3 +ObjectDBX Classes + 90 + 0 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +TABLESTYLE + 2 +AcDbTableStyle + 3 +ObjectDBX Classes + 90 + 4095 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMMAPMANAGER + 2 +AcMapDMMapManager + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMSTYLELIBRARY + 2 +AcMapDMStyleLibrary + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMMAP + 2 +AcMapDMMap + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMBASEELEMENT + 2 +AcMapDMBaseElement + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMDEFAULTSTYLE + 2 +AcMapDMDefaultStyle + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMSTYLEREFERENCE + 2 +AcMapDMStyleReference + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMSTYLECATEGORY + 2 +AcMapDMStyleCategory + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DICTIONARYVAR + 2 +AcDbDictionaryVar + 3 +ObjectDBX Classes + 90 + 0 + 91 + 14 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_VARS_DWG_SETUP + 2 +AecDbVarsDwgSetup + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CONFIG + 2 +AecDbDispRepConfig + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SET + 2 +AecDbDispRepSet + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_2D_SECTION + 2 +AecDbDispRep2dSection + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_BUB_TO_GRID + 2 +AecDbDispRepAnchorBubToGrid + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_BUB_TO_GRID_MODEL + 2 +AecDbDispRepAnchorBubToGridMdl + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_ENT_TO_NODE + 2 +AecDbDispRepAnchorEntToNode + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_TAG_TO_ENT + 2 +AecDbDispRepAnchorTagToEnt + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_AREA + 2 +AecDbDispRepArea + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_AREA_DECOMPOSED + 2 +AecDbDispRepAreaDecomposed + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_AREAGROUP + 2 +AecDbDispRepAreaGroup + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_ELEVLINE_MODEL + 2 +AecDbDispRepBdgElevLineModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTIONLINE_PLAN + 2 +AecDbDispRepBdgElevLinePlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTIONLINE_MODEL + 2 +AecDbDispRepBdgSectionLineModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTIONLINE_PLAN + 2 +AecDbDispRepBdgSectionLinePlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTION_SUBDIV + 2 +AecDbDispRepBdgSectionSubDiv + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CAMERA + 2 +AecDbDispRepCamera + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CEILING_GRID + 2 +AecDbDispRepCeilingGrid + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 893 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CEILING_GRID_MODEL + 2 +AecDbDispRepCeilingGridModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CEILING_GRID_RCP + 2 +AecDbDispRepCeilingGridRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CLIP_VOLUME_MODEL + 2 +AecDbDispRepClipVolModel + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CLIP_VOLUME_PLAN + 2 +AecDbDispRepClipVolPlan + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CLIP_VOLUME_RESULT_SUBDIV + 2 +AecDbDispRepClipVolResSubDiv + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CLIP_VOLUME_RESULT + 2 +AecDbDispRepClipVolResult + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COLUMN_GRID + 2 +AecDbDispRepColumnGrid + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COLUMN_GRID_MODEL + 2 +AecDbDispRepColumnGridModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CURTAIN_WALL_LAYOUT_MODEL + 2 +AecDbDispRepCurtainWallLayoutModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CURTAIN_WALL_LAYOUT_PLAN + 2 +AecDbDispRepCurtainWallLayoutPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CURTAIN_WALL_UNIT_MODEL + 2 +AecDbDispRepCurtainWallUnitModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_CURTAIN_WALL_UNIT_PLAN + 2 +AecDbDispRepCurtainWallUnitPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DB_DISP_REP_DIM_GROUP_PLAN + 2 +AecDbDispRepDimGroupPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_MODEL + 2 +AecDbDispRepDoorModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_NOMINAL + 2 +AecDbDispRepDoorNominal + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_PLAN + 2 +AecDbDispRepDoorPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_EDITINPLACEPROFILE + 2 +AecDbDispRepEditInPlaceProfile + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ENT_REF + 2 +AecDbDispRepEntRef + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_LAYOUT_CURVE + 2 +AecDbDispRepLayoutCurve + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_LAYOUT_GRID2D + 2 +AecDbDispRepLayoutGrid2d + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_LAYOUT_GRID3D + 2 +AecDbDispRepLayoutGrid3d + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASKBLOCK_REF + 2 +AecDbDispRepMaskBlockRef + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASKBLOCK_REF_RCP + 2 +AecDbDispRepMaskBlockRefRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_ELEM_MODEL + 2 +AecDbDispRepMassElemModel + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_ELEM_SCHEM + 2 +AecDbDispRepMassElemSchem + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_GROUP_MODEL + 2 +AecDbDispRepMassGroupModel + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_GROUP_PLAN + 2 +AecDbDispRepMassGroupPlan + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MATERIAL + 2 +AecDbDispRepMaterial + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MVBLOCK_REF + 2 +AecDbDispRepMvBlockRef + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MVBLOCK_REF_MODEL + 2 +AecDbDispRepMvBlockRefModel + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_OPENING + 2 +AecDbDispRepOpening + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_OPENING_MODEL + 2 +AecDbDispRepOpeningModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_POLYGON_MODEL + 2 +AecDbDispRepPolygonModel + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_RAILING_MODEL + 2 +AecDbDispRepRailingModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_RAILING_PLAN + 2 +AecDbDispRepRailingPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ROOF_MODEL + 2 +AecDbDispRepRoofModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ROOF_PLAN + 2 +AecDbDispRepRoofPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ROOFSLAB_MODEL + 2 +AecDbDispRepRoofSlabModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ROOFSLAB_PLAN + 2 +AecDbDispRepRoofSlabPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SCHEDULE_TABLE + 2 +AecDbDispRepScheduleTable + 3 +AecSchedule80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SLAB_MODEL + 2 +AecDbDispRepSlabModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SLAB_PLAN + 2 +AecDbDispRepSlabPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SLICE + 2 +AecDbDispRepSlice + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_BOUNDARY_MODEL + 2 +AecDbDispRepSpaceBoundaryModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_BOUNDARY_PLAN + 2 +AecDbDispRepSpaceBoundaryPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_BOUNDARY_SCHEM + 2 +AecDbDispRepSpaceBoundarySketch + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_MODEL + 2 +AecDbDispRepSpaceModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_PLAN + 2 +AecDbDispRepSpacePlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_MODEL + 2 +AecDbDispRepStairModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_PLAN + 2 +AecDbDispRepStairPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WALL_GRAPH + 2 +AecDbDispRepWallGraph + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WALL_MODEL + 2 +AecDbDispRepWallModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WALL_PLAN + 2 +AecDbDispRepWallPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WALL_SCHEM + 2 +AecDbDispRepWallSchem + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_ASSEMBLY_MODEL + 2 +AecDbDispRepWindowAssemblyModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_ASSEMBLY_PLAN + 2 +AecDbDispRepWindowAssemblyPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPWINDOWASSEMBLYPLAN100 + 2 +AecDbDispRepWindowAssemblyPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_MODEL + 2 +AecDbDispRepWindowModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_NOMINAL + 2 +AecDbDispRepWindowNominal + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_PLAN + 2 +AecDbDispRepWindowPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_LOGICAL + 2 +AecsDbDispRepMemberLogical + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_MODEL_DESIGN + 2 +AecsDbDispRepMemberModelDesign + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_PLAN_DESIGN + 2 +AecsDbDispRepMemberPlanDesign + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ENT + 2 +AecDbDispPropsEnt + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_AREA_DECOMPOSED + 2 +AecDbDispPropsAreaDecomposed + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW + 2 +AecDbDispPropsWindow + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_LAYOUT_GRID3D + 2 +AecDbDispPropsLayoutGrid3d + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW_NOMINAL + 2 +AecDbDispPropsWindowNominal + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR + 2 +AecDbDispPropsDoor + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_MASS_ELEM_MODEL + 2 +AecDbDispPropsMassElem + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_MASKBLOCK + 2 +AecDbDispPropsMaskBlock + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_RAILING_PLAN + 2 +AecDbDispPropsRailingPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SCHEDULE_TABLE + 2 +AecDbDispPropsScheduleTable + 3 +AecSchedule80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ROOF + 2 +AecDbDispPropsRoof + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_OPENING + 2 +AecDbDispPropsOpening + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DIM + 2 +AecDbDispPropsDimGroup + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SLICE + 2 +AecDbDispPropsSlice + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_AREA + 2 +AecDbDispPropsArea + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_MASS_GROUP + 2 +AecDbDispPropsMassGroup + 3 +AecBaseEx80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_EDITINPLACEPROFILE_MODEL + 2 +AecDbDispPropsEditInPlaceProfile + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_LAYOUT_GRID2D + 2 +AecDbDispPropsLayoutGrid2d + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_CLIP_VOLUME + 2 +AecDbDispPropsClipVol + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_PROPS_MEMBER_LOGICAL + 2 +AecsDbDispPropsMemberLogical + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_PROPS_MEMBER + 2 +AecsDbDispPropsMember + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_PROPS_MEMBER_PLAN + 2 +AecsDbDispPropsMemberPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_AREAGROUP + 2 +AecDbDispPropsAreaGroup + 3 +AecAreaCalculationBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SLAB + 2 +AecDbDispPropsSlab + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_CLIP_VOLUME_RESULT + 2 +AecDbDispPropsClipVolResSubDiv + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_RAILING_MODEL + 2 +AecDbDispPropsRailingModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_GRID_ASSEMBLY_MODEL + 2 +AecDbDispPropsGridAssemblyModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_GRID_ASSEMBLY_PLAN + 2 +AecDbDispPropsGridAssemblyPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ROOFSLAB + 2 +AecDbDispPropsRoofSlab + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SLAB_PLAN + 2 +AecDbDispPropsSlabPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ENT_REF + 2 +AecDbDispPropsEntRef + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ROOFSLAB_PLAN + 2 +AecDbDispPropsRoofSlabPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SPACE_BOUNDARY + 2 +AecDbDispPropsSpaceBoundary + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_CAMERA + 2 +AecDbDispPropsCamera + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SPACE_MODEL + 2 +AecDbDispPropsSpaceModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SPACE_PLAN + 2 +AecDbDispPropsSpacePlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_STAIR_MODEL + 2 +AecDbDispPropsStairModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_LAYOUT_CURVE + 2 +AecDbDispPropsLayoutCurve + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_POLYGON_MODEL + 2 +AecDbDispPropsPolygonModel + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_STAIR_PLAN + 2 +AecDbDispPropsStairPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WALL_GRAPH + 2 +AecDbDispPropsWallGraph + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR_NOMINAL + 2 +AecDbDispPropsDoorNominal + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WALL_MODEL + 2 +AecDbDispPropsWallModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WALL_PLAN + 2 +AecDbDispPropsWallPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_2D_SECTION + 2 +AecDbDispProps2dSection + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WALL_SCHEM + 2 +AecDbDispPropsWallSchem + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_MATERIAL + 2 +AecDbDispPropsMaterial + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_LAYERKEY_STYLE + 2 +AecDbLayerKeyStyle + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_VARS_ARCHBASE + 2 +AecDbVarsArchBase + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_VARS_MUNICH + 2 +AecDbVarsMunich + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_NOTIFICATION_TRACKER + 2 +AecDbNotificationTracker + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECC_POINTVIEW + 2 +AeccDbViewPoint + 3 +AecCivilBase|Product Desc: Autodesk Land Desktop 2006|Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 1025 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_GRADEVIEW + 2 +AeccViewGrade + 3 +AecCivilBase|Product Desc: Autodesk Land Desktop 2006|Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 1025 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_CVSECTIONVIEW + 2 +AecCvViewSection + 3 +AecCivilBase|Product Desc: Autodesk Land Desktop 2006|Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 1024 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR + 2 +AecDbDispRepAnchor + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_POLYGON_TRUECOLOUR + 2 +AecDbDispRepPolygonTrueColour + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_POLYGON_TRUECOLOUR + 2 +AecDbDispPropsPolygonTrueColour + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_BUB_TO_GRID_RCP + 2 +AecDbDispRepAnchorBubToGridRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COLUMN_GRID_RCP + 2 +AecDbDispRepColumnGridRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_ELEVATION_DESIGN + 2 +AecsDbDispRepMemberElevationDesign + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_PROPS_MEMBER_PROJECTED + 2 +AecsDbDispPropsMemberProjected + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_ELEVATION_DETAIL + 2 +AecsDbDispRepMemberElevationDetail + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_MODEL_DETAIL + 2 +AecsDbDispRepMemberModelDetail + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_PLAN_DETAIL + 2 +AecsDbDispRepMemberPlanDetail + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_REP_MEMBER_PLAN_SKETCH + 2 +AecsDbDispRepMemberPlanSketch + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECS_DISP_PROPS_MEMBER_PLAN_SKETCH + 2 +AecsDbDispPropsMemberPlanSketch + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_ELEVLINE_RCP + 2 +AecDbDispRepBdgElevLineRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTIONLINE_RCP + 2 +AecDbDispRepBdgSectionLineRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_BDG_SECTION_MODEL + 2 +AecDbDispRepBdgSectionModel + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_ELEV + 2 +AecDbDispRepDoorElev + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_RCP + 2 +AecDbDispRepDoorRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_THRESHOLD_PLAN + 2 +AecDbDispRepDoorThresholdPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR_THRESHOLD_PLAN + 2 +AecDbDispPropsDoorThresholdPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_ELEM_RCP + 2 +AecDbDispRepMassElemRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MASS_GROUP_RCP + 2 +AecDbDispRepMassGroupRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_MVBLOCK_REF_RCP + 2 +AecDbDispRepMvBlockRefRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ROOF_RCP + 2 +AecDbDispRepRoofRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_BOUNDARY_DIAGRAM + 2 +AecDbDispRepSpaceBoundaryDgrm + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_RCP + 2 +AecDbDispRepSpaceRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_VOLUME + 2 +AecDbDispRepSpaceVolume + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_PLAN_OVERLAPPING + 2 +AecDbDispRepStairPlanOverlapping + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_STAIR_PLAN_OVERLAPPING + 2 +AecDbDispPropsStairPlanOverlapping + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_RCP + 2 +AecDbDispRepStairRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WALL_RCP + 2 +AecDbDispRepWallRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOWASSEMBLY_SILL_PLAN + 2 +AecDbDispRepWindowAssemblySillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW_ASSEMBLY_SILL_PLAN + 2 +AecDbDispPropsWindowAssemblySillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_ELEV + 2 +AecDbDispRepWindowElev + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_RCP + 2 +AecDbDispRepWindowRcp + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_SILL_PLAN + 2 +AecDbDispRepWindowSillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW_SILL_PLAN + 2 +AecDbDispPropsWindowSillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPAREA100 + 2 +AecDbDispRepArea100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPAREAGROUP100 + 2 +AecDbDispRepAreaGroup100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPBDGELEVLINEPLAN100 + 2 +AecDbDispRepBdgElevLinePlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPBDGSECTIONLINEPLAN100 + 2 +AecDbDispRepBdgSectionLinePlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCEILINGGRIDPLAN100 + 2 +AecDbDispRepCeilingGridPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCOLUMNGRIDPLAN100 + 2 +AecDbDispRepColumnGridPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCURTAINWALLLAYOUTPLAN100 + 2 +AecDbDispRepCurtainWallLayoutPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCURTAINWALLUNITPLAN100 + 2 +AecDbDispRepCurtainWallUnitPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPMVBLOCKREFPLAN100 + 2 +AecDbDispRepMvBlockRefPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPROOFPLAN100 + 2 +AecDbDispRepRoofPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPROOFSLABPLAN100 + 2 +AecDbDispRepRoofSlabPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSLABPLAN100 + 2 +AecDbDispRepSlabPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSPACEBOUNDARYPLAN100 + 2 +AecDbDispRepSpaceBoundaryPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSPACEPLAN100 + 2 +AecDbDispRepSpacePlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPWALLPLAN100 + 2 +AecDbDispRepWallPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPAREA50 + 2 +AecDbDispRepArea50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPAREAGROUP50 + 2 +AecDbDispRepAreaGroup50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPBDGELEVLINEPLAN50 + 2 +AecDbDispRepBdgElevLinePlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPBDGSECTIONLINEPLAN50 + 2 +AecDbDispRepBdgSectionLinePlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCEILINGGRIDPLAN50 + 2 +AecDbDispRepCeilingGridPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCOLUMNGRIDPLAN50 + 2 +AecDbDispRepColumnGridPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCURTAINWALLLAYOUTPLAN50 + 2 +AecDbDispRepCurtainWallLayoutPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPCURTAINWALLUNITPLAN50 + 2 +AecDbDispRepCurtainWallUnitPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPMVBLOCKREFPLAN50 + 2 +AecDbDispRepMvBlockRefPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPROOFPLAN50 + 2 +AecDbDispRepRoofPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPROOFSLABPLAN50 + 2 +AecDbDispRepRoofSlabPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSLABPLAN50 + 2 +AecDbDispRepSlabPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSPACEBOUNDARYPLAN50 + 2 +AecDbDispRepSpaceBoundaryPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPSPACEPLAN50 + 2 +AecDbDispRepSpacePlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPWALLPLAN50 + 2 +AecDbDispRepWallPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPWINDOWASSEMBLYPLAN50 + 2 +AecDbDispRepWindowAssemblyPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DB_DISP_REP_DIM_GROUP_PLAN100 + 2 +AecDbDispRepDimGroupPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DB_DISP_REP_DIM_GROUP_PLAN50 + 2 +AecDbDispRepDimGroupPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_PLAN_50 + 2 +AecDbDispRepDoorPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR_PLAN_50 + 2 +AecDbDispPropsDoorPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_PLAN_HEKTO + 2 +AecDbDispRepDoorPlanHekto + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR_PLAN_100 + 2 +AecDbDispPropsDoorPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DOOR_THRESHOLD_SYMBOL_PLAN + 2 +AecDbDispRepDoorThresholdSymbolPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DOOR_THRESHOLD_SYMBOL_PLAN + 2 +AecDbDispPropsDoorThresholdSymbolPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPMASSELEMPLAN100 + 2 +AecDbDispRepMassElemPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPROPSMASSELEMPLANCOMMON + 2 +AecDbDispPropsMassElemPlanCommon + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPMASSELEMPLAN50 + 2 +AecDbDispRepMassElemPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPMASSGROUPPLAN100 + 2 +AecDbDispRepMassGroupPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPROPSMASSGROUPPLANCOMMON + 2 +AecDbDispPropsMassGroupPlanCommon + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPMASSGROUPPLAN50 + 2 +AecDbDispRepMassGroupPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPOPENINGPLAN100 + 2 +AecDbDispRepOpeningPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPROPSOPENINGPLANCOMMONHATCHED + 2 +AecDbDispPropsOpeningPlanCommonHatched + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPOPENINGPLAN50 + 2 +AecDbDispRepOpeningPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPOPENINGPLANREFLECTED + 2 +AecDbDispRepOpeningPlanReflected + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPROPSOPENINGPLANCOMMON + 2 +AecDbDispPropsOpeningPlanCommon + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPREPAECDBDISPREPOPENINGSILLPLAN + 2 +AecDbDispRepOpeningSillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISPROPSOPENINGSILLPLAN + 2 +AecDbDispPropsOpeningSillPlan + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_RAILING_PLAN_100 + 2 +AecDbDispRepRailingPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_ROPS_RAILING_PLAN_100 + 2 +AecDbDispPropsRailingPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_RAILING_PLAN_50 + 2 +AecDbDispRepRailingPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_ROPS_RAILING_PLAN_50 + 2 +AecDbDispPropsRailingPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_PLAN_100 + 2 +AecDbDispRepStairPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_ROPS_STAIR_PLAN_100 + 2 +AecDbDispPropsStairPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_STAIR_PLAN_50 + 2 +AecDbDispRepStairPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_ROPS_STAIR_PLAN_50 + 2 +AecDbDispPropsStairPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_PLAN_100 + 2 +AecDbDispRepWindowPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW_PLAN_100 + 2 +AecDbDispPropsWindowPlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_WINDOW_PLAN_50 + 2 +AecDbDispRepWindowPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_WINDOW_PLAN_50 + 2 +AecDbDispPropsWindowPlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECC_CONTOURVIEW + 2 +AeccDbViewContour + 3 +AecCivilBase|Product Desc: Autodesk Land Desktop 2006|Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 1024 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +BINRECORD + 2 +AcAecBinRecord + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +SORTENTSTABLE + 2 +AcDbSortentsTable + 3 +ObjectDBX Classes + 90 + 0 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +FIELD + 2 +AcDbField + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +FIELDLIST + 2 +AcDbFieldList + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MATERIAL + 2 +AcDbMaterial + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 3 +280 + 0 +281 + 0 + 0 +CLASS + 1 +VISUALSTYLE + 2 +AcDbVisualStyle + 3 +ObjectDBX Classes + 90 + 4095 + 91 + 25 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMSURROGATESTYLESETS + 2 +AcMapDMSurrogateStyleSets + 3 +AcMapDisplayManagement + 90 + 1153 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DATATABLE + 2 +AcDbDataTable + 3 +ObjectDBX Classes + 90 + 0 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_FEATURE_LINE + 2 +AeccDbDispRepFeatureLine + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_GRADING + 2 +AeccDbDispRepGrading + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_GRAPH + 2 +AeccDbDispRepGraph + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SECTION_VIEW + 2 +AeccDbDispRepGraphCrossSection + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PROFILE_VIEW + 2 +AeccDbDispRepGraphProfile + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_MATERIAL_SECTION + 2 +AeccDbDispRepMaterialSection + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_QUANTITY_TAKEOFF_AGGREGATE_EARTHWORK_TABLE + 2 +AeccDbDispRepQuantityTakeoffAggregateTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SAMPLE_LINE + 2 +AeccDbDispRepSampleLine + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SAMPLE_LINE_GROUP + 2 +AeccDbDispRepSampleLineGroup + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SECTION + 2 +AeccDbDispRepSection + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SHEET + 2 +AeccDbDispRepSheet + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_GRID_SURFACE + 2 +AeccDbDispRepSurfaceGrid + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_TIN_SURFACE + 2 +AeccDbDispRepSurfaceTin + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PROFILE + 2 +AeccDbDispRepVAlignment + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT + 2 +AeccDbViewAlignment + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_LABELING + 2 +AeccDbViewLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_DESIGNSPEED_LABELING + 2 +AeccDbViewAlignmentDesignSpeedLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_GEOMPT_LABELING + 2 +AeccDbViewAlignmentGeomPointLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_MINOR_STATION_LABELING + 2 +AeccDbViewAlignmentMinorStationLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_PI_LABELING + 2 +AeccDbViewAlignmentPILabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_STAEQU_LABELING + 2 +AeccDbViewAlignmentStaEquLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_STATION_LABELING + 2 +AeccDbViewAlignmentStationLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_TABLE + 2 +AeccDbViewAlignmentTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_VERTICAL_GEOMPT_LABELING + 2 +AeccDbViewAlignmentVAGeomPointLabeling + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_CURVE_TABLE + 2 +AeccDbViewCurveScheduleTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_FACE + 2 +AeccDbViewFace + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PARCEL_TABLE + 2 +AeccDbViewFaceScheduleTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_FEATURE + 2 +AeccDbViewFeature + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_FEATURE_LABEL + 2 +AeccDbViewFeatureLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_GENERAL_SEGMENT_LABEL + 2 +AeccDbViewGeneralLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_LEGEND_TABLE + 2 +AeccDbViewLegendScheduleTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PARCEL_SEGMENT + 2 +AeccDbViewLotLine + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_LINE_TABLE + 2 +AeccDbViewLotLineScheduleTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_NOTE_LABEL + 2 +AeccDbViewNoteLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_OFFSET_ELEV_LABEL + 2 +AeccDbViewOffsetElevLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PARCEL_BOUNDARY + 2 +AeccDbViewParcelBoundary + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PARCEL_SEGMENT_TABLE + 2 +AeccDbViewParcelSegmentTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_POINT_ENT + 2 +AeccDbViewPointEnt + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_POINT_GROUP + 2 +AeccDbViewPointGroup + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_POINT_TABLE + 2 +AeccDbViewPointScheduleTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_RIGHT_OF_WAY + 2 +AeccDbViewRightofWay + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_STATION_ELEV_LABEL + 2 +AeccDbViewStaElevLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ALIGNMENT_STATION_OFFSET_LABEL + 2 +AeccDbViewStaOffsetLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SURFACE_ELEVATION_LABEL + 2 +AeccDbViewSurfaceElevLabel + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_TANGENT_INTERSECTION_TABLE + 2 +AeccDbViewTangentIntersectionTable + 3 +AeccLand40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SECTION_CORRIDOR + 2 +AeccDbDispRepSectionCorridor + 3 +AeccRoadway40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_ASSEMBLY + 2 +AeccDbViewAssembly + 3 +AeccRoadway40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_CORRIDOR + 2 +AeccDbViewCorridor + 3 +AeccRoadway40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SUBASSEMBLY + 2 +AeccDbViewSubassembly + 3 +AeccRoadway40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SVFIGURE + 2 +AeccDbViewSvFigure + 3 +AeccSurvey40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SVNETWORK + 2 +AeccDbViewSvNetwork + 3 +AeccSurvey40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 0 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_BLOCK + 2 +AeccuDbDispRepColBlock + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CIRCARC2D + 2 +AeccuDbDispRepColCircArc2d + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONCOINCIDENT + 2 +AeccuDbDispRepColConCoincident + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONCONCENTRIC + 2 +AeccuDbDispRepColConConcentric + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONEQUALDISTANCE + 2 +AeccuDbDispRepColConEqualDistance + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONMIDPOINT + 2 +AeccuDbDispRepColConMidpoint + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONNORMAL + 2 +AeccuDbDispRepColConNormal + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONPARALLEL + 2 +AeccuDbDispRepColConParallel + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONPERPENDICULAR + 2 +AeccuDbDispRepColConPerpendicular + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONSYMMETRIC + 2 +AeccuDbDispRepColConSymmetric + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONTANGENT + 2 +AeccuDbDispRepColConTangent + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_CONNECTOR + 2 +AeccuDbDispRepColConnector + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMANGLE + 2 +AeccuDbDispRepColDimAngle + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DCM_DIMRADIUS + 2 +AeccuDbDispRepColDimRadius + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMDIAMETER + 2 +AeccuDbDispRepColDimDiameter + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMDISTANCE + 2 +AeccuDbDispRepColDimDistance + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMLENGTH + 2 +AeccuDbDispRepColDimLength + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMMAJORRADIUS + 2 +AeccuDbDispRepColDimMajorRadius + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_DIMMINORRADIUS + 2 +AeccuDbDispRepColDimMinorRadius + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_ELLIPARC2D + 2 +AeccuDbDispRepColEllipArc2d + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_LAYOUTDATA + 2 +AeccuDbDispRepColLayoutData + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_LINE2D + 2 +AeccuDbDispRepColLine2d + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_ADD + 2 +AeccuDbDispRepColModAdd + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_CUTPLANE + 2 +AeccuDbDispRepColModCutPlane + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_EXTRUSION + 2 +AeccuDbDispRepColModExtrusion + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_GROUP + 2 +AeccuDbDispRepColModGroup + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_PATH + 2 +AeccuDbDispRepColModPath + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_SUBTRACT + 2 +AeccuDbDispRepColModSubtract + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_MODIFIER_TRANSITION + 2 +AeccuDbDispRepColModTransition + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_POINT2D + 2 +AeccuDbDispRepColPoint2d + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_PROFILE + 2 +AeccuDbDispRepColProfile + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_WORKPLANE + 2 +AeccuDbDispRepColWorkPlane + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_COL_WORKPLANE_REF + 2 +AeccuDbDispRepColWorkPlaneRef + 3 +LAN_AECBCOL|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_GRAPHPROFILE_NETWORKPART + 2 +AeccDbDispRepGraphProfileNetworkPart + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_INTERFERENCE_PART + 2 +AeccDbDispRepInterference + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_INTERFERENCE_CHECK + 2 +AeccDbDispRepInterferenceCheck + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_NETWORK + 2 +AeccDbDispRepNetwork + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_PIPE + 2 +AeccDbDispRepPipe + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_SECTION_PIPENETWORK + 2 +AeccDbDispRepSectionPipeNetwork + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_DISP_REP_STRUCTURE + 2 +AeccDbDispRepStructure + 3 +AeccNetwork40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_DISPLAYTHEME + 2 +AecDbDispRepDisplayTheme + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_DISPLAYTHEME + 2 +AecDbDispPropsDisplayTheme + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ANCHOR_EXT_TAG_TO_ENT + 2 +AecDbDispRepAnchorExtendedTagToEnt + 3 +AecBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_SPACE_DECOMPOSED + 2 +AecDbDispRepSpaceDecomposed + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_SPACE_DECOMPOSED + 2 +AecDbDispPropsSpaceDecomposed + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_REP_ZONE + 2 +AecDbDispRepZone + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_DISP_PROPS_ZONE + 2 +AecDbDispPropsZone + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPZONE100 + 2 +AecDbDispRepZonePlan100 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_AECDBDISPREPZONE50 + 2 +AecDbDispRepZonePlan50 + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +DMSTYLIZEDENTITIESTABLE + 2 +AcMapDMStylizedEntitiesTable + 3 +AcMapDisplayManagement + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MAPGWSUNDOOBJECT + 2 +AcMapGWSUndoRecorder + 3 +AcMapFeatureSourceManager + 90 + 1025 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECC_TREE_NODE + 2 +AeccDbTreeNode + 3 +AeccvBase40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 3071 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECC_ROOT_SETTINGS_NODE + 2 +AeccDbRootSettingsNode + 3 +AeccvBase40|Product Desc: Autodesk Civil 3D |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 3071 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +SCALE + 2 +AcDbScale + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 19 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MLEADERSTYLE + 2 +AcDbMLeaderStyle + 3 +ACDB_MLEADERSTYLE_CLASS + 90 + 4095 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +NPOCOLLECTION + 2 +AcDbImpNonPersistentObjectsCollection + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MAPRESOURCEMANAGEROBJECT + 2 +AcMapResourceManager + 3 +AcMapSharedComponents + 90 + 1024 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +CELLSTYLEMAP + 2 +AcDbCellStyleMap + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +IMAGE + 2 +AcDbRasterImage + 3 +ISM + 90 + 2175 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +IMAGEDEF_REACTOR + 2 +AcDbRasterImageDefReactor + 3 +ISM + 90 + 1 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +IMAGEDEF + 2 +AcDbRasterImageDef + 3 +ISM + 90 + 0 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AEC_REFEDIT_STATUS_TRACKER + 2 +AecDbRefEditStatusTracker + 3 +AecArchBase80|Product Desc: Autodesk Architectural Desktop 2007 |Company: Autodesk,Inc. |WEB Address: www.autodesk.com + 90 + 129 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +RASTERVARIABLES + 2 +AcDbRasterVariables + 3 +ISM + 90 + 0 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +EXACXREFPANELOBJECT + 2 +ExAcXREFPanelObject + 3 +EXAC_ESW + 90 + 1025 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBSECTIONVIEWSTYLE + 2 +AcDbSectionViewStyle + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBDETAILVIEWSTYLE + 2 +AcDbDetailViewStyle + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 1 +280 + 0 +281 + 0 + 0 +CLASS + 1 +MULTILEADER + 2 +AcDbMLeader + 3 +ACDB_MLEADER_CLASS + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ACAD_EVALUATION_GRAPH + 2 +AcDbEvalGraph + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACAECUSTOBJ + 2 +AcAeEditorObj + 3 +AcAeEditorObj + 90 + 1024 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +ACDB_DYNAMICBLOCKPURGEPREVENTER_VERSION + 2 +AcDbDynamicBlockPurgePreventer + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +AECIDBEMBEDDEDRASTERIMAGEDEF + 2 +AeciDbEmbeddedRasterImageDef + 3 +AECIIB|Autodesk Raster Design|www.autodesk.com + 90 + 2175 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECIDBEMBEDDEDIMAGEDATA + 2 +AeciDbEmbeddedImageData + 3 +AECIIB|Autodesk Raster Design|www.autodesk.com + 90 + 129 + 91 + 0 +280 + 1 +281 + 0 + 0 +CLASS + 1 +AECIDBEMBEDDEDRASTERIMAGE + 2 +AeciDbEmbeddedRasterImage + 3 +AECIIB|Autodesk Raster Design|www.autodesk.com + 90 + 2175 + 91 + 0 +280 + 1 +281 + 1 + 0 +CLASS + 1 +TABLETEMPLATE + 2 +AcDbTableTemplate + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACAD_TABLE + 2 +AcDbTable + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +TABLECONTENT + 2 +AcDbTableContent + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +TABLEGEOMETRY + 2 +AcDbTableGeometry + 3 +ObjectDBX Classes + 90 + 1152 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKVISIBILITYPARAMETER + 2 +AcDbBlockVisibilityParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKVISIBILITYGRIP + 2 +AcDbBlockVisibilityGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKGRIPLOCATIONCOMPONENT + 2 +AcDbBlockGripExpr + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKBASEPOINTPARAMETER + 2 +AcDbBlockBasepointParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_BLOCKREPRESENTATION_DATA + 2 +AcDbBlockRepresentationData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +VISIBILITYGRIPENTITY + 2 +AcDbBlockVisibilityGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ACAEEEMGROBJ + 2 +AcAeEEMgrObj + 3 +AcAeEEMgrObj + 90 + 1024 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +VISIBILITYPARAMETERENTITY + 2 +AcDbBlockVisibilityParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKPOINTPARAMETER + 2 +AcDbBlockPointParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKLOOKUPACTION + 2 +AcDbBlockLookupAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKMOVEACTION + 2 +AcDbBlockMoveAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKLOOKUPPARAMETER + 2 +AcDbBlockLookupParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKLOOKUPGRIP + 2 +AcDbBlockLookupGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKXYGRIP + 2 +AcDbBlockXYGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BASEPOINTPARAMETERENTITY + 2 +AcDbBlockBasepointParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +SOLID_BACKGROUND + 2 +AcDbSolidBackground + 3 +SCENEOE + 90 + 4095 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKFLIPPARAMETER + 2 +AcDbBlockFlipParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKFLIPGRIP + 2 +AcDbBlockFlipGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKFLIPACTION + 2 +AcDbBlockFlipAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_DYNAMICBLOCKPROXYNODE + 2 +AcDbDynamicBlockProxyNode + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKPROPERTIESTABLE + 2 +AcDbBlockPropertiesTable + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKPROPERTIESTABLEGRIP + 2 +AcDbBlockPropertiesTableGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKUSERPARAMETER + 2 +AcDbBlockUserParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBASSOCNETWORK + 2 +AcDbAssocNetwork + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDBASSOCVARIABLE + 2 +AcDbAssocVariable + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +RAPIDRTRENDERSETTINGS + 2 +AcDbRapidRTRenderSettings + 3 +ObjectDBX Classes + 90 + 1024 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +FLIPPARAMETERENTITY + 2 +AcDbBlockFlipParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +FLIPGRIPENTITY + 2 +AcDbBlockFlipGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +FLIPACTIONENTITY + 2 +AcDbBlockFlipActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKPROPERTIESTABLEENTITY + 2 +AcDbBlockPropertiesTableEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKPROPERTIESTABLEGRIPENTITY + 2 +AcDbBlockPropertiesTableGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +POINTPARAMETERENTITY + 2 +AcDbBlockPointParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +XYGRIPENTITY + 2 +AcDbBlockXYGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +MOVEACTIONENTITY + 2 +AcDbBlockMoveActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +LOOKUPGRIPENTITY + 2 +AcDbBlockLookupGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +LOOKUPPARAMETERENTITY + 2 +AcDbBlockLookupParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +LOOKUPACTIONENTITY + 2 +AcDbBlockLookupActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKALIGNMENTPARAMETER + 2 +AcDbBlockAlignmentParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKALIGNMENTGRIP + 2 +AcDbBlockAlignmentGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ALIGNMENTGRIPENTITY + 2 +AcDbBlockAlignmentGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ALIGNMENTPARAMETERENTITY + 2 +AcDbBlockAlignmentParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKROTATEACTION + 2 +AcDbBlockRotateAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKPOLARPARAMETER + 2 +AcDbBlockPolarParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKPOLARGRIP + 2 +AcDbBlockPolarGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +POLARGRIPENTITY + 2 +AcDbBlockPolarGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +POLARPARAMETERENTITY + 2 +AcDbBlockPolarParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKSTRETCHACTION + 2 +AcDbBlockStretchAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +STRETCHACTIONENTITY + 2 +AcDbBlockStretchActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKPOLARSTRETCHACTION + 2 +AcDbBlockPolarStretchAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +POLARSTRETCHACTIONENTITY + 2 +AcDbBlockPolarStretchActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKROTATIONPARAMETER + 2 +AcDbBlockRotationParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKROTATIONGRIP + 2 +AcDbBlockRotationGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ROTATIONGRIPENTITY + 2 +AcDbBlockRotationGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ROTATIONPARAMETERENTITY + 2 +AcDbBlockRotationParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ROTATEACTIONENTITY + 2 +AcDbBlockRotateActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKSCALEACTION + 2 +AcDbBlockScaleAction + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKLINEARPARAMETER + 2 +AcDbBlockLinearParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +BLOCKLINEARGRIP + 2 +AcDbBlockLinearGrip + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +LINEARGRIPENTITY + 2 +AcDbBlockLinearGripEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +LINEARPARAMETERENTITY + 2 +AcDbBlockLinearParameterEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +SCALEACTIONENTITY + 2 +AcDbBlockScaleActionEntity + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 0 +280 + 0 +281 + 1 + 0 +CLASS + 1 +BLOCKLINEARCONSTRAINTPARAMETER + 2 +AcDbBlockLinearConstraintParameter + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +PLOTSETTINGS + 2 +AcDbPlotSettings + 3 +ObjectDBX Classes + 90 + 0 + 91 + 0 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_ALDIMOBJECTCONTEXTDATA_CLASS + 2 +AcDbAlignedDimensionObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 4 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS + 2 +AcDbAngularDimensionObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 4 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_DMDIMOBJECTCONTEXTDATA_CLASS + 2 +AcDbDiametricDimensionObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_RADIMOBJECTCONTEXTDATA_CLASS + 2 +AcDbRadialDimensionObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ACDB_ORDDIMOBJECTCONTEXTDATA_CLASS + 2 +AcDbOrdinateDimensionObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +LARGE_RADIAL_DIMENSION + 2 +AcDbRadialDimensionLarge + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 1 +280 + 0 +281 + 1 + 0 +CLASS + 1 +ACDB_RADIMLRGOBJECTCONTEXTDATA_CLASS + 2 +AcDbRadialDimensionLargeObjectContextData + 3 +ObjectDBX Classes + 90 + 1153 + 91 + 2 +280 + 0 +281 + 0 + 0 +CLASS + 1 +ARC_DIMENSION + 2 +AcDbArcDimension + 3 +ObjectDBX Classes + 90 + 1025 + 91 + 1 +280 + 0 +281 + 1 + 0 +ENDSEC + 0 +SECTION + 2 +TABLES + 0 +TABLE + 2 +VPORT + 5 +2D +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +VPORT + 5 +2E +330 +2D +100 +AcDbSymbolTableRecord +100 +AcDbViewportTableRecord + 2 +*Active + 70 + 0 + 10 +0.0 + 20 +0.0 + 11 +1.0 + 21 +1.0 + 12 +-27.57512837365903 + 22 +30.59987466812412 + 13 +0.0 + 23 +0.0 + 14 +1.0 + 24 +1.0 + 15 +0.0 + 25 +0.0 + 16 +0.0 + 26 +0.0 + 36 +1.0 + 17 +0.0 + 27 +0.0 + 37 +0.0 + 40 +95.65482542206492 + 41 +3.015124555160141 + 42 +50.0 + 43 +0.0 + 44 +0.0 + 50 +0.0 + 51 +0.0 + 71 + 0 + 72 + 100 + 73 + 1 + 74 + 1 + 75 + 0 + 76 + 0 + 77 + 0 + 78 + 0 +281 + 0 + 65 + 1 +110 +0.0 +120 +0.0 +130 +0.0 +111 +1.0 +121 +0.0 +131 +0.0 +112 +0.0 +122 +1.0 +132 +0.0 + 79 + 0 +146 +0.0 +348 +2F + 60 + 3 + 61 + 5 +292 + 1 +282 + 1 +141 +0.0 +142 +0.0 + 63 + 250 +421 + 3355443 +1001 +ACAD_NAV_VCDISPLAY +1070 + 3 + 0 +ENDTAB + 0 +TABLE + 2 +LTYPE + 5 +28 +330 +0 +100 +AcDbSymbolTable + 70 + 1 + 0 +LTYPE + 5 +29 +330 +28 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByBlock + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +2A +330 +28 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +ByLayer + 70 + 0 + 3 + + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +LTYPE + 5 +12 +330 +28 +100 +AcDbSymbolTableRecord +100 +AcDbLinetypeTableRecord + 2 +CONTINUOUS + 70 + 0 + 3 +Solid line + 72 + 65 + 73 + 0 + 40 +0.0 + 0 +ENDTAB + 0 +TABLE + 2 +LAYER + 5 +1F +102 +{ACAD_XDICTIONARY +360 +20 +102 +} +330 +0 +100 +AcDbSymbolTable + 70 + 3 + 0 +LAYER + 5 +6 +102 +{ACAD_XDICTIONARY +360 +7 +102 +} +330 +1F +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +0 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS +370 + 20 +390 +9 +347 +E +348 +0 + 0 +LAYER + 5 +80 +102 +{ACAD_XDICTIONARY +360 +81 +102 +} +330 +1F +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +DEFPOINTS + 70 + 0 + 62 + 7 + 6 +CONTINUOUS +290 + 0 +370 + 13 +390 +9 +347 +E +348 +0 + 0 +LAYER + 5 +71 +102 +{ACAD_XDICTIONARY +360 +72 +102 +} +330 +1F +100 +AcDbSymbolTableRecord +100 +AcDbLayerTableRecord + 2 +44 + 70 + 0 + 62 + 7 + 6 +CONTINUOUS +370 + 20 +390 +9 +347 +E +348 +0 + 0 +ENDTAB + 0 +TABLE + 2 +STYLE + 5 +25 +330 +0 +100 +AcDbSymbolTable + 70 + 3 + 0 +STYLE + 5 +26 +330 +25 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Standard + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +0.2 + 3 +times.ttf + 4 + +1001 +ACAD +1000 +Times New Roman +1071 + 18 + 0 +STYLE + 5 +35 +330 +25 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +TIMES NEW ROMAN + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +0.1 + 3 +times.ttf + 4 + +1001 +ACAD +1000 +Times New Roman +1071 + 18 + 0 +STYLE + 5 +193 +330 +25 +100 +AcDbSymbolTableRecord +100 +AcDbTextStyleTableRecord + 2 +Legend + 70 + 0 + 40 +0.0 + 41 +1.0 + 50 +0.0 + 71 + 0 + 42 +0.1 + 3 +calibri.ttf + 4 + +1001 +ACAD +1000 +Calibri +1071 + 80 + 0 +ENDTAB + 0 +TABLE + 2 +VIEW + 5 +2B +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +UCS + 5 +2C +330 +0 +100 +AcDbSymbolTable + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +APPID + 5 +32 +330 +0 +100 +AcDbSymbolTable + 70 + 9 + 0 +APPID + 5 +24 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD + 70 + 0 + 0 +APPID + 5 +17 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD_PSEXT + 70 + 0 + 0 +APPID + 5 +C +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ADE + 70 + 0 + 0 +APPID + 5 +36 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +AcadAnnotative + 70 + 0 + 0 +APPID + 5 +31 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD_NAV_VCDISPLAY + 70 + 0 + 0 +APPID + 5 +E9 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +ACAD_DSTYLE_DIMRADIAL_EXTENSION + 70 + 0 + 0 +APPID + 5 +16B +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +DCO15 + 70 + 0 + 0 +APPID + 5 +197 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +AcMapDMDisplayStyleRegapp + 70 + 0 + 0 +APPID + 5 +1A5 +330 +32 +100 +AcDbSymbolTableRecord +100 +AcDbRegAppTableRecord + 2 +MapGWS + 70 + 0 + 0 +ENDTAB + 0 +TABLE + 2 +DIMSTYLE + 5 +33 +330 +0 +100 +AcDbSymbolTable + 70 + 1 +100 +AcDbDimStyleTable + 71 + 1 +340 +34 + 0 +DIMSTYLE +105 +34 +102 +{ACAD_REACTORS +330 +6E +330 +92 +330 +B0 +330 +D0 +330 +EA +330 +104 +330 +11E +330 +13A +102 +} +330 +33 +100 +AcDbSymbolTableRecord +100 +AcDbDimStyleTableRecord + 2 +ANNO + 70 + 0 + 3 +\X + 40 +0.0 + 41 +0.1 + 42 +0.075 + 43 +0.075 + 44 +0.025 + 70 + 256 + 73 + 0 + 74 + 0 + 77 + 1 + 78 + 3 +140 +0.1 +141 +0.05 +143 +0.083333 +147 +0.025 +176 + 256 +177 + 256 +178 + 256 +271 + 2 +272 + 2 +340 +35 +345 +2A +346 +2A +347 +2A +371 + -1 +372 + -1 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +ENDTAB + 0 +TABLE + 2 +BLOCK_RECORD + 5 +1 +330 +0 +100 +AcDbSymbolTable + 70 + 16 + 0 +BLOCK_RECORD + 5 +2 +102 +{ACAD_XDICTIONARY +360 +3 +102 +} +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Model_Space +340 +14 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +19C +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*Paper_Space +340 +19D + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +76 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D0 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +97 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D1 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +B5 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D2 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +D5 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D3 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +EF +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D4 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +109 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D5 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +123 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D6 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +13F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D7 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +14E +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D8 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +12F +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D9 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +114 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D10 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +FA +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D11 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +E0 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D12 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +C3 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D13 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +A4 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D14 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +BLOCK_RECORD + 5 +86 +330 +1 +100 +AcDbSymbolTableRecord +100 +AcDbBlockTableRecord + 2 +*D15 +340 +0 + 70 + 0 +280 + 1 +281 + 0 + 0 +ENDTAB + 0 +ENDSEC + 0 +SECTION + 2 +BLOCKS + 0 +BLOCK + 5 +5 +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*Model_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Model_Space + 1 + + 0 +ENDBLK + 5 +13 +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +19E +330 +19C +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockBegin + 2 +*Paper_Space + 70 + 0 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*Paper_Space + 1 + + 0 +ENDBLK + 5 +19F +330 +19C +100 +AcDbEntity + 67 + 1 + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +77 +330 +76 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D0 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D0 + 1 + + 0 +LINE + 5 +78 +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +-0.045 + 20 +0.06 + 30 +0.0 + 11 +-26.41499999999998 + 21 +35.21999999999997 + 31 +0.0 + 0 +LINE + 5 +79 +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +79.95500000000001 + 20 +60.06 + 30 +0.0 + 11 +53.58500000000002 + 21 +95.21999999999996 + 31 +0.0 + 0 +LINE + 5 +7A +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +-26.31999999999999 + 20 +35.25999999999998 + 30 +0.0 + 11 +53.52000000000001 + 21 +95.13999999999999 + 31 +0.0 + 0 +SOLID + 5 +7B +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +-26.32999999999999 + 20 +35.27333333333331 + 30 +0.0 + 11 +-26.30999999999998 + 21 +35.24666666666664 + 31 +0.0 + 12 +-26.39999999999999 + 22 +35.19999999999998 + 32 +0.0 + 13 +-26.39999999999999 + 23 +35.19999999999998 + 33 +0.0 + 0 +SOLID + 5 +7D +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +53.51000000000002 + 20 +95.15333333333332 + 30 +0.0 + 11 +53.53000000000001 + 21 +95.12666666666666 + 31 +0.0 + 12 +53.60000000000001 + 22 +95.19999999999999 + 32 +0.0 + 13 +53.60000000000001 + 23 +95.19999999999999 + 33 +0.0 + 0 +MTEXT + 5 +7E +330 +76 +100 +AcDbEntity + 8 +44 +100 +AcDbMText + 10 +13.55439437635185 + 20 +65.26080749819752 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 11 +0.8 + 21 +0.6000000000000001 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +7F +330 +76 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +82 +330 +76 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +80.00000000000001 + 20 +60.0 + 30 +0.0 + 0 +POINT + 5 +83 +330 +76 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +53.60000000000001 + 20 +95.19999999999999 + 30 +0.0 + 0 +ENDBLK + 5 +84 +330 +76 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +98 +330 +97 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D1 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D1 + 1 + + 0 +LINE + 5 +99 +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +0.0 + 20 +-0.075 + 30 +0.0 + 11 +-0.0000000000000012 + 21 +-20.025 + 31 +0.0 + 0 +LINE + 5 +9A +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +100.0 + 20 +-0.075 + 30 +0.0 + 11 +100.0 + 21 +-20.025 + 31 +0.0 + 0 +LINE + 5 +9B +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +0.0999999999999988 + 20 +-20.0 + 30 +0.0 + 11 +99.90000000000001 + 21 +-20.0 + 31 +0.0 + 0 +SOLID + 5 +9C +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +0.0999999999999988 + 20 +-19.98333333333333 + 30 +0.0 + 11 +0.0999999999999988 + 21 +-20.01666666666666 + 31 +0.0 + 12 +-0.0000000000000012 + 22 +-20.0 + 32 +0.0 + 13 +-0.0000000000000012 + 23 +-20.0 + 33 +0.0 + 0 +SOLID + 5 +9D +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +99.90000000000001 + 20 +-19.98333333333333 + 30 +0.0 + 11 +99.90000000000001 + 21 +-20.01666666666666 + 31 +0.0 + 12 +100.0 + 22 +-20.0 + 32 +0.0 + 13 +100.0 + 23 +-20.0 + 33 +0.0 + 0 +MTEXT + 5 +9E +330 +97 +100 +AcDbEntity + 8 +44 +100 +AcDbMText + 10 +50.0 + 20 +-19.92399062725306 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +9F +330 +97 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +A0 +330 +97 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +100.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +A1 +330 +97 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +100.0 + 20 +-20.0 + 30 +0.0 + 0 +ENDBLK + 5 +A2 +330 +97 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +B6 +330 +B5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D2 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D2 + 1 + + 0 +LINE + 5 +B7 +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +99.92499999999999 + 20 +0.0 + 30 +0.0 + 11 +63.22055320336759 + 21 +0.0000000000000036 + 31 +0.0 + 0 +LINE + 5 +B8 +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +79.93999999999999 + 20 +59.95499999999999 + 30 +0.0 + 11 +50.57644256269408 + 21 +37.93233192202057 + 31 +0.0 + 0 +ARC + 5 +B9 +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbCircle + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +63.24555320336759 +100 +AcDbArc + 50 +0.0905925912248056 + 51 +36.77930505461921 + 0 +SOLID + 5 +BA +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +63.26214080788441 + 20 +0.1000131449069066 + 30 +0.0 + 11 +63.22880748496775 + 21 +0.0999867925930751 + 31 +0.0 + 12 +63.24555320336759 + 22 +-0.0000000000000036 + 32 +0.0 + 13 +63.24555320336759 + 23 +-0.0000000000000036 + 33 +0.0 + 0 +SOLID + 5 +BB +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +50.64303806353006 + 20 +37.85729505690618 + 30 +0.0 + 11 +50.66972053325169 + 21 +37.87727396880511 + 31 +0.0 + 12 +50.59644256269407 + 22 +37.94733192202055 + 32 +0.0 + 13 +50.59644256269407 + 23 +37.94733192202055 + 33 +0.0 + 0 +MTEXT + 5 +BC +330 +B5 +100 +AcDbEntity + 8 +44 +100 +AcDbMText + 10 +60.07210882242031 + 20 +20.0240362741401 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;37\U+00B0 + 7 +TIMES NEW ROMAN + 11 +0.3162277660168379 + 21 +-0.9486832980505138 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +BD +330 +B5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +BE +330 +B5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +100.0 + 20 +-0.0000000000000036 + 30 +0.0 + 0 +POINT + 5 +BF +330 +B5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +79.99999999999999 + 20 +60.0 + 30 +0.0 + 0 +POINT + 5 +C0 +330 +B5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +61.79614645668088 + 20 +13.46240257548576 + 30 +0.0 + 0 +ENDBLK + 5 +C1 +330 +B5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +D6 +330 +D5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D3 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D3 + 1 + + 0 +LINE + 5 +D7 +330 +D5 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +240.1913338139869 + 20 +30.14350036049024 + 30 +0.0 + 11 +224.0799999999999 + 21 +18.05999999999996 + 31 +0.0 + 0 +MTEXT + 5 +D8 +330 +D5 +100 +AcDbEntity + 8 +44 +100 +AcDbMText + 10 +239.9537022350396 + 20 +30.06173035328045 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;∅60.00 + 7 +TIMES NEW ROMAN + 11 +0.8 + 21 +0.5999999999999999 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +SOLID + 5 +D9 +330 +D5 +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +224.0699999999999 + 20 +18.07333333333329 + 30 +0.0 + 11 +224.0899999999999 + 21 +18.04666666666662 + 31 +0.0 + 12 +223.9999999999999 + 22 +17.99999999999997 + 32 +0.0 + 13 +223.9999999999999 + 23 +17.99999999999997 + 33 +0.0 + 0 +LINE + 5 +DA +330 +D5 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +199.9499999999999 + 20 +-0.0000000000000142 + 30 +0.0 + 11 +200.0499999999999 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +DB +330 +D5 +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +199.9999999999999 + 20 +-0.0499999999999972 + 30 +0.0 + 11 +199.9999999999999 + 21 +0.0499999999999972 + 31 +0.0 + 0 +POINT + 5 +DC +330 +D5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +223.9999999999999 + 20 +17.99999999999997 + 30 +0.0 + 0 +POINT + 5 +DD +330 +D5 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +175.9999999999999 + 20 +-18.00000000000001 + 30 +0.0 + 0 +ENDBLK + 5 +DE +330 +D5 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +F0 +330 +EF +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D4 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D4 + 1 + + 0 +LINE + 5 +F1 +330 +EF +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +360.2114994650095 + 20 +30.10574973250478 + 30 +0.0 + 11 +335.8665303590966 + 21 +17.93326517954831 + 31 +0.0 + 0 +MTEXT + 5 +F2 +330 +EF +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +359.9660075751221 + 20 +30.06798484975572 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;R40.00 + 7 +TIMES NEW ROMAN + 11 +0.8944271909999159 + 21 +0.447213595499958 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +SOLID + 5 +F3 +330 +EF +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +335.8590767991716 + 20 +17.94817229939832 + 30 +0.0 + 11 +335.8739839190216 + 21 +17.9183580596983 + 31 +0.0 + 12 +335.7770876399966 + 22 +17.8885438199983 + 32 +0.0 + 13 +335.7770876399966 + 23 +17.8885438199983 + 33 +0.0 + 0 +LINE + 5 +F4 +330 +EF +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +299.95 + 20 +0.0 + 30 +0.0 + 11 +300.05 + 21 +-0.0000000000000142 + 31 +0.0 + 0 +LINE + 5 +F5 +330 +EF +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +300.0 + 20 +-0.0500000000000256 + 30 +0.0 + 11 +300.0 + 21 +0.0499999999999687 + 31 +0.0 + 0 +POINT + 5 +F6 +330 +EF +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +335.7770876399966 + 20 +17.8885438199983 + 30 +0.0 + 0 +POINT + 5 +F7 +330 +EF +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +300.0 + 20 +-0.0000000000000142 + 30 +0.0 + 0 +ENDBLK + 5 +F8 +330 +EF +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +10A +330 +109 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D5 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D5 + 1 + + 0 +LINE + 5 +10B +330 +109 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +100.0000000000001 + 20 +-0.075 + 30 +0.0 + 11 +100.0000000000001 + 21 +-39.60000000000004 + 31 +0.0 + 0 +LINE + 5 +10C +330 +109 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +100.0000000000001 + 20 +-39.60000000000004 + 30 +0.0 + 11 +120.0000000000001 + 21 +-39.80000000000003 + 31 +0.0 + 0 +LINE + 5 +10D +330 +109 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +120.0000000000001 + 20 +-39.80000000000003 + 30 +0.0 + 11 +120.0000000000001 + 21 +-40.40848954578229 + 31 +0.0 + 0 +MTEXT + 5 +10E +330 +109 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +119.9239906272531 + 20 +-40.21674477289119 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 11 +0.0000000000000001 + 21 +1.0 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +10F +330 +109 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +100.0000000000001 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +110 +330 +109 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +120.0000000000001 + 20 +-40.00000000000002 + 30 +0.0 + 0 +POINT + 5 +111 +330 +109 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDBLK + 5 +112 +330 +109 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +124 +330 +123 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D6 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D6 + 1 + + 0 +LINE + 5 +125 +330 +123 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +300.0 + 20 +100.0000000000001 + 30 +0.0 + 11 +290.5149908843547 + 21 +62.05996353741858 + 31 +0.0 + 0 +LINE + 5 +126 +330 +123 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +290.5149908843547 + 20 +62.05996353741858 + 30 +0.0 + 11 +319.9267555902371 + 21 +79.70702236094798 + 31 +0.0 + 0 +LINE + 5 +127 +330 +123 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +319.926755590237 + 20 +79.707022360948 + 30 +0.0 + 11 +309.7256785639569 + 21 +38.90271425582779 + 31 +0.0 + 0 +SOLID + 5 +128 +330 +123 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +309.7095095222879 + 20 +38.90675651624505 + 30 +0.0 + 11 +309.741847605626 + 21 +38.89867199541051 + 31 +0.0 + 12 +309.7014250014534 + 22 +38.80570000581324 + 32 +0.0 + 13 +309.7014250014534 + 23 +38.80570000581324 + 33 +0.0 + 0 +MTEXT + 5 +129 +330 +123 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +319.7714112601061 + 20 +79.39903971279672 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;R40.00 + 7 +TIMES NEW ROMAN + 11 +0.242535625036334 + 21 +0.9701425001453316 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +12A +330 +123 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +309.7014250014534 + 20 +38.80570000581324 + 30 +0.0 + 0 +POINT + 5 +12B +330 +123 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +300.0 + 20 +100.0000000000001 + 30 +0.0 + 0 +POINT + 5 +12C +330 +123 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +305.2208732372958 + 20 +70.88349294918329 + 30 +0.0 + 0 +ENDBLK + 5 +12D +330 +123 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +140 +330 +13F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D7 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D7 + 1 + + 0 +LINE + 5 +141 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +500.075 + 20 +0.0 + 30 +0.0 + 11 +540.0249999999999 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +142 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbLine + 10 +399.925 + 20 +0.0000000000000061 + 30 +0.0 + 11 +359.975 + 21 +0.000000000000011 + 31 +0.0 + 0 +ARC + 5 +143 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbCircle + 10 +450.0 + 20 +0.0 + 30 +0.0 + 40 +90.0 +100 +AcDbArc + 50 +0.0636619805115517 + 51 +179.9363380194884 + 0 +SOLID + 5 +144 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +540.0166111085391 + 20 +0.1000092438271593 + 30 +0.0 + 11 +539.9832777803498 + 21 +0.0999907253086408 + 31 +0.0 + 12 +540.0 + 22 +0.0 + 32 +0.0 + 13 +540.0 + 23 +0.0 + 33 +0.0 + 0 +SOLID + 5 +145 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbTrace + 10 +360.0167222196502 + 20 +0.0999907253086518 + 30 +0.0 + 11 +359.9833888914609 + 21 +0.1000092438271703 + 31 +0.0 + 12 +360.0 + 22 +0.000000000000011 + 32 +0.0 + 13 +360.0 + 23 +0.000000000000011 + 33 +0.0 + 0 +MTEXT + 5 +146 +330 +13F +100 +AcDbEntity + 8 +44 +100 +AcDbMText + 10 +450.0 + 20 +90.07600937274693 + 30 +0.0 + 40 +0.1 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;157.08 + 7 +TIMES NEW ROMAN + 73 + 1 + 44 +1.0 + 0 +ARC + 5 +147 +330 +13F +100 +AcDbEntity + 8 +44 + 6 +Continuous +100 +AcDbCircle + 10 +449.7078586878155 + 20 +90.03520187454942 + 30 +0.0 + 40 +0.0816149963951603 +100 +AcDbArc + 50 +359.9999999999801 + 51 +180.0000000000199 + 0 +POINT + 5 +148 +330 +13F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +450.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +149 +330 +13F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +500.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +14A +330 +13F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +400.0 + 20 +0.0000000000000061 + 30 +0.0 + 0 +POINT + 5 +14B +330 +13F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +100 +AcDbPoint + 10 +495.0 + 20 +77.94228634059948 + 30 +0.0 + 0 +ENDBLK + 5 +14C +330 +13F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +14F +330 +14E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D8 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D8 + 1 + + 0 +LINE + 5 +150 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +501.4999999999999 + 20 +0.0 + 30 +0.0 + 11 +540.5 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +151 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +398.5 + 20 +0.0000000000000063 + 30 +0.0 + 11 +359.5 + 21 +0.0000000000000111 + 31 +0.0 + 0 +ARC + 5 +152 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbCircle + 10 +450.0 + 20 +0.0 + 30 +0.0 + 40 +90.0 +100 +AcDbArc + 50 +1.273265744535275 + 51 +178.7267342554647 + 0 +SOLID + 5 +153 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +539.6444650212112 + 20 +-1.996172835695542 + 30 +0.0 + 11 +540.3110905343443 + 21 +-2.00358024310295 + 31 +0.0 + 12 +540.0 + 22 +0.0 + 32 +0.0 + 13 +540.0 + 23 +0.0 + 33 +0.0 + 0 +ARC + 5 +154 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbCircle + 10 +450.0 + 20 +0.0 + 30 +0.0 + 40 +90.0 +100 +AcDbArc + 50 +357.454096922135 + 51 +358.7267342554647 + 0 +ARC + 5 +155 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbCircle + 10 +450.0 + 20 +0.0 + 30 +0.0 + 40 +90.0 +100 +AcDbArc + 50 +0.0 + 51 +1.272637333329752 + 0 +SOLID + 5 +156 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +360.3555349787888 + 20 +1.996172835695553 + 30 +0.0 + 11 +359.6889094656557 + 21 +2.003580243102961 + 31 +0.0 + 12 +360.0 + 22 +0.000000000000011 + 32 +0.0 + 13 +360.0 + 23 +0.000000000000011 + 33 +0.0 + 0 +MTEXT + 5 +157 +330 +14E +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +450.0 + 20 +91.52018745493872 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;157.08 + 7 +TIMES NEW ROMAN + 73 + 1 + 44 +1.0 + 0 +ARC + 5 +158 +330 +14E +100 +AcDbEntity + 8 +44 + 6 +Continuous +440 + 16777216 +100 +AcDbCircle + 10 +444.1571737563085 + 20 +90.70403749098771 + 30 +0.0 + 40 +1.632299927901954 +100 +AcDbArc + 50 +0.0000000000014965 + 51 +179.9999999999985 + 0 +POINT + 5 +159 +330 +14E +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +450.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +15A +330 +14E +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +500.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +15B +330 +14E +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +400.0 + 20 +0.0000000000000061 + 30 +0.0 + 0 +POINT + 5 +15C +330 +14E +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +495.0 + 20 +77.94228634059948 + 30 +0.0 + 0 +ENDBLK + 5 +15D +330 +14E +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +130 +330 +12F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D9 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D9 + 1 + + 0 +LINE + 5 +131 +330 +12F +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +300.0 + 20 +100.0000000000001 + 30 +0.0 + 11 +290.5149908843547 + 21 +62.05996353741858 + 31 +0.0 + 0 +LINE + 5 +132 +330 +12F +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +290.5149908843547 + 20 +62.05996353741858 + 30 +0.0 + 11 +319.9267555902371 + 21 +79.70702236094798 + 31 +0.0 + 0 +LINE + 5 +133 +330 +12F +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +319.926755590237 + 20 +79.707022360948 + 30 +0.0 + 11 +310.186496251526 + 21 +40.74598500610392 + 31 +0.0 + 0 +SOLID + 5 +134 +330 +12F +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +309.8631154181443 + 20 +40.82683021444935 + 30 +0.0 + 11 +310.5098770849078 + 21 +40.66513979775847 + 31 +0.0 + 12 +309.7014250014534 + 22 +38.80570000581324 + 32 +0.0 + 13 +309.7014250014534 + 23 +38.80570000581324 + 33 +0.0 + 0 +MTEXT + 5 +135 +330 +12F +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +318.3703527247935 + 20 +79.74930434662488 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;R40.00 + 7 +TIMES NEW ROMAN + 11 +0.242535625036334 + 21 +0.9701425001453316 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +136 +330 +12F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +309.7014250014534 + 20 +38.80570000581324 + 30 +0.0 + 0 +POINT + 5 +137 +330 +12F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +300.0 + 20 +100.0000000000001 + 30 +0.0 + 0 +POINT + 5 +138 +330 +12F +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +305.2208732372958 + 20 +70.88349294918329 + 30 +0.0 + 0 +ENDBLK + 5 +139 +330 +12F +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +115 +330 +114 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D10 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D10 + 1 + + 0 +LINE + 5 +116 +330 +114 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +100.0000000000001 + 20 +-1.5 + 30 +0.0 + 11 +100.0000000000001 + 21 +-32.00000000000004 + 31 +0.0 + 0 +LINE + 5 +117 +330 +114 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +100.0000000000001 + 20 +-32.00000000000004 + 30 +0.0 + 11 +120.0000000000001 + 21 +-36.00000000000003 + 31 +0.0 + 0 +LINE + 5 +118 +330 +114 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +120.0000000000001 + 20 +-36.00000000000003 + 30 +0.0 + 11 +120.0000000000001 + 21 +-48.16979091564531 + 31 +0.0 + 0 +MTEXT + 5 +119 +330 +114 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +118.4798125450613 + 20 +-44.33489545782269 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 11 +0.0000000000000001 + 21 +1.0 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +11A +330 +114 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +100.0000000000001 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +11B +330 +114 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +120.0000000000001 + 20 +-40.00000000000002 + 30 +0.0 + 0 +POINT + 5 +11C +330 +114 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +ENDBLK + 5 +11D +330 +114 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +FB +330 +FA +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D11 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D11 + 1 + + 0 +LINE + 5 +FC +330 +FA +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +364.2299893001903 + 20 +32.11499465009517 + 30 +0.0 + 11 +337.5659420219964 + 21 +18.78297101099822 + 31 +0.0 + 0 +MTEXT + 5 +FD +330 +FA +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +359.320151502443 + 20 +31.35969699511415 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;R40.00 + 7 +TIMES NEW ROMAN + 11 +0.8944271909999159 + 21 +0.447213595499958 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +SOLID + 5 +FE +330 +FA +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +337.4168708234964 + 20 +19.0811134079982 + 30 +0.0 + 11 +337.7150132204964 + 21 +18.48482861399824 + 31 +0.0 + 12 +335.7770876399966 + 22 +17.8885438199983 + 32 +0.0 + 13 +335.7770876399966 + 23 +17.8885438199983 + 33 +0.0 + 0 +LINE + 5 +FF +330 +FA +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +299.0 + 20 +0.0 + 30 +0.0 + 11 +301.0 + 21 +-0.0000000000000142 + 31 +0.0 + 0 +LINE + 5 +100 +330 +FA +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +300.0 + 20 +-1.000000000000028 + 30 +0.0 + 11 +300.0 + 21 +0.9999999999999573 + 31 +0.0 + 0 +POINT + 5 +101 +330 +FA +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +335.7770876399966 + 20 +17.8885438199983 + 30 +0.0 + 0 +POINT + 5 +102 +330 +FA +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +300.0 + 20 +-0.0000000000000142 + 30 +0.0 + 0 +ENDBLK + 5 +103 +330 +FA +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +E1 +330 +E0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D12 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D12 + 1 + + 0 +LINE + 5 +E2 +330 +E0 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +177.5999999999999 + 20 +-16.80000000000001 + 30 +0.0 + 11 +222.3999999999999 + 21 +16.79999999999998 + 31 +0.0 + 0 +MTEXT + 5 +E3 +330 +E0 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +239.9999999999999 + 20 +30.0 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;∅60.00 + 7 +TIMES NEW ROMAN + 11 +0.8 + 21 +0.5999999999999999 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +SOLID + 5 +E4 +330 +E0 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +177.3999999999999 + 20 +-16.53333333333334 + 30 +0.0 + 11 +177.7999999999999 + 21 +-17.06666666666668 + 31 +0.0 + 12 +175.9999999999999 + 22 +-18.00000000000001 + 32 +0.0 + 13 +175.9999999999999 + 23 +-18.00000000000001 + 33 +0.0 + 0 +SOLID + 5 +E5 +330 +E0 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +222.1999999999999 + 20 +17.06666666666663 + 30 +0.0 + 11 +222.5999999999999 + 21 +16.5333333333333 + 31 +0.0 + 12 +223.9999999999999 + 22 +17.99999999999997 + 32 +0.0 + 13 +223.9999999999999 + 23 +17.99999999999997 + 33 +0.0 + 0 +POINT + 5 +E6 +330 +E0 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +223.9999999999999 + 20 +17.99999999999997 + 30 +0.0 + 0 +POINT + 5 +E7 +330 +E0 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +175.9999999999999 + 20 +-18.00000000000001 + 30 +0.0 + 0 +ENDBLK + 5 +E8 +330 +E0 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +C4 +330 +C3 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D13 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D13 + 1 + + 0 +LINE + 5 +C5 +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +98.49999999999999 + 20 +-0.0000000000000036 + 30 +0.0 + 11 +62.74555320336759 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +C6 +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +78.79999999999999 + 20 +59.1 + 30 +0.0 + 11 +50.19644256269407 + 21 +37.64733192202056 + 31 +0.0 + 0 +ARC + 5 +C7 +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbCircle + 10 +0.0 + 20 +0.0 + 30 +0.0 + 40 +63.24555320336759 +100 +AcDbArc + 50 +1.811927138074011 + 51 +35.05797050777 + 0 +SOLID + 5 +C8 +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +63.54722209082807 + 20 +2.00502044713999 + 30 +0.0 + 11 +62.88063876270372 + 21 +1.994479521606095 + 31 +0.0 + 12 +63.24555320336759 + 22 +-0.0000000000000036 + 32 +0.0 + 13 +63.24555320336759 + 23 +-0.0000000000000036 + 33 +0.0 + 0 +SOLID + 5 +C9 +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +51.50119872312664 + 20 +36.13279964033735 + 30 +0.0 + 11 +52.04078994094647 + 21 +36.52431689678484 + 31 +0.0 + 12 +50.59644256269407 + 22 +37.94733192202055 + 32 +0.0 + 13 +50.59644256269407 + 23 +37.94733192202055 + 33 +0.0 + 0 +MTEXT + 5 +CA +330 +C3 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +61.44217644840627 + 20 +20.48072548280209 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;37\U+00B0 + 7 +TIMES NEW ROMAN + 11 +0.3162277660168379 + 21 +-0.9486832980505138 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +CB +330 +C3 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +CC +330 +C3 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +100.0 + 20 +-0.0000000000000036 + 30 +0.0 + 0 +POINT + 5 +CD +330 +C3 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +79.99999999999999 + 20 +60.0 + 30 +0.0 + 0 +POINT + 5 +CE +330 +C3 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +61.79614645668088 + 20 +13.46240257548576 + 30 +0.0 + 0 +ENDBLK + 5 +CF +330 +C3 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +A5 +330 +A4 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D14 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D14 + 1 + + 0 +LINE + 5 +A6 +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +-0.0000000000000001 + 20 +-1.5 + 30 +0.0 + 11 +-0.0000000000000013 + 21 +-20.5 + 31 +0.0 + 0 +LINE + 5 +A7 +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +100.0 + 20 +-1.5 + 30 +0.0 + 11 +100.0 + 21 +-20.5 + 31 +0.0 + 0 +LINE + 5 +A8 +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +1.999999999999998 + 20 +-20.0 + 30 +0.0 + 11 +98.0 + 21 +-20.0 + 31 +0.0 + 0 +SOLID + 5 +A9 +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +1.999999999999998 + 20 +-19.66666666666666 + 30 +0.0 + 11 +1.999999999999998 + 21 +-20.33333333333333 + 31 +0.0 + 12 +-0.0000000000000012 + 22 +-20.0 + 32 +0.0 + 13 +-0.0000000000000012 + 23 +-20.0 + 33 +0.0 + 0 +SOLID + 5 +AA +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +98.0 + 20 +-19.66666666666666 + 30 +0.0 + 11 +98.0 + 21 +-20.33333333333333 + 31 +0.0 + 12 +100.0 + 22 +-20.0 + 32 +0.0 + 13 +100.0 + 23 +-20.0 + 33 +0.0 + 0 +MTEXT + 5 +AB +330 +A4 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +50.0 + 20 +-18.47981254506128 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +AC +330 +A4 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +AD +330 +A4 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +100.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +AE +330 +A4 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +100.0 + 20 +-20.0 + 30 +0.0 + 0 +ENDBLK + 5 +AF +330 +A4 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +BLOCK + 5 +87 +330 +86 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockBegin + 2 +*D15 + 70 + 1 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 3 +*D15 + 1 + + 0 +LINE + 5 +88 +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +-0.9 + 20 +1.199999999999999 + 30 +0.0 + 11 +-26.69999999999999 + 21 +35.59999999999997 + 31 +0.0 + 0 +LINE + 5 +89 +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +79.10000000000001 + 20 +61.2 + 30 +0.0 + 11 +53.30000000000001 + 21 +95.59999999999998 + 31 +0.0 + 0 +LINE + 5 +8A +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbLine + 10 +-24.79999999999999 + 20 +36.39999999999998 + 30 +0.0 + 11 +52.0 + 21 +93.99999999999998 + 31 +0.0 + 0 +SOLID + 5 +8B +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +-24.99999999999999 + 20 +36.66666666666664 + 30 +0.0 + 11 +-24.59999999999999 + 21 +36.13333333333331 + 31 +0.0 + 12 +-26.39999999999999 + 22 +35.19999999999998 + 32 +0.0 + 13 +-26.39999999999999 + 23 +35.19999999999998 + 33 +0.0 + 0 +SOLID + 5 +8C +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbTrace + 10 +51.8 + 20 +94.26666666666665 + 30 +0.0 + 11 +52.2 + 21 +93.73333333333333 + 31 +0.0 + 12 +53.60000000000001 + 22 +95.19999999999999 + 32 +0.0 + 13 +53.60000000000001 + 23 +95.19999999999999 + 33 +0.0 + 0 +MTEXT + 5 +8D +330 +86 +100 +AcDbEntity + 8 +44 +440 + 16777216 +100 +AcDbMText + 10 +12.68788752703678 + 20 +66.41614996395095 + 30 +0.0 + 40 +2.0 + 41 +0.0 + 46 +0.0 + 71 + 5 + 72 + 1 + 1 +\A1;100.00 + 7 +TIMES NEW ROMAN + 11 +0.8 + 21 +0.6000000000000001 + 31 +0.0 + 73 + 1 + 44 +1.0 + 0 +POINT + 5 +8E +330 +86 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +0.0 + 20 +0.0 + 30 +0.0 + 0 +POINT + 5 +8F +330 +86 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +80.00000000000001 + 20 +60.0 + 30 +0.0 + 0 +POINT + 5 +90 +330 +86 +100 +AcDbEntity + 8 +DEFPOINTS + 62 + 0 +440 + 16777216 +100 +AcDbPoint + 10 +53.60000000000001 + 20 +95.19999999999999 + 30 +0.0 + 0 +ENDBLK + 5 +91 +330 +86 +100 +AcDbEntity + 8 +0 +100 +AcDbBlockEnd + 0 +ENDSEC + 0 +SECTION + 2 +ENTITIES + 0 +LINE + 5 +69 +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbLine + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +100.0 + 21 +0.0 + 31 +0.0 + 0 +LINE + 5 +6A +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbLine + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +80.0 + 21 +60.0 + 31 +0.0 + 0 +CIRCLE + 5 +6B +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbCircle + 10 +200.0 + 20 +0.0 + 30 +0.0 + 40 +30.0 + 0 +CIRCLE + 5 +6C +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbCircle + 10 +300.0 + 20 +0.0 + 30 +0.0 + 40 +40.0 + 0 +ARC + 5 +6D +330 +2 +100 +AcDbEntity + 8 +0 +100 +AcDbCircle + 10 +450.0 + 20 +0.0 + 30 +0.0 + 40 +50.0 +100 +AcDbArc + 50 +0.0 + 51 +180.0 + 0 +DIMENSION + 5 +6E +102 +{ACAD_XDICTIONARY +360 +6F +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D0 + 10 +53.60000000000001 + 20 +95.19999999999999 + 30 +0.0 + 11 +13.55439437635185 + 21 +65.26080749819752 + 31 +0.0 + 70 + 1 + 71 + 5 + 42 +100.0 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbAlignedDimension + 13 +0.0 + 23 +0.0 + 33 +0.0 + 14 +80.0 + 24 +60.0 + 34 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +DIMENSION + 5 +92 +102 +{ACAD_XDICTIONARY +360 +93 +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D1 + 10 +100.0 + 20 +-20.0 + 30 +0.0 + 11 +50.0 + 21 +-19.92399062725306 + 31 +0.0 + 71 + 5 + 42 +100.0 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbAlignedDimension + 13 +0.0 + 23 +0.0 + 33 +0.0 + 14 +100.0 + 24 +0.0 + 34 +0.0 +100 +AcDbRotatedDimension +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +DIMENSION + 5 +B0 +102 +{ACAD_XDICTIONARY +360 +B1 +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D2 + 10 +61.79614645668088 + 20 +13.46240257548576 + 30 +0.0 + 11 +60.07210882242031 + 21 +20.02403627414009 + 31 +0.0 + 70 + 5 + 71 + 5 + 42 +0.6435011087932843 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDb3PointAngularDimension + 13 +100.0 + 23 +0.0 + 33 +0.0 + 14 +80.0 + 24 +60.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +DIMENSION + 5 +D0 +102 +{ACAD_XDICTIONARY +360 +D1 +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D3 + 10 +175.9999999999999 + 20 +-18.00000000000001 + 30 +0.0 + 11 +239.9999999999999 + 21 +29.99999999999999 + 31 +0.0 + 70 + 131 + 71 + 5 + 42 +60.0 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbDiametricDimension + 15 +223.9999999999999 + 25 +17.99999999999997 + 35 +0.0 + 40 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 + 288 +1070 + 1 +1002 +} +1001 +ACAD_DSTYLE_DIMRADIAL_EXTENSION +1070 + 387 +1070 + 1 +1070 + 388 +1040 +0.0 +1070 + 390 +1040 +0.0 + 0 +DIMENSION + 5 +EA +102 +{ACAD_XDICTIONARY +360 +EB +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D4 + 10 +300.0 + 20 +-0.0000000000000142 + 30 +0.0 + 11 +360.0 + 21 +30.00000000000002 + 31 +0.0 + 70 + 132 + 71 + 5 + 42 +40.0 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbRadialDimension + 15 +335.7770876399966 + 25 +17.8885438199983 + 35 +0.0 + 40 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 + 288 +1070 + 1 +1002 +} +1001 +ACAD_DSTYLE_DIMRADIAL_EXTENSION +1070 + 387 +1070 + 1 +1070 + 388 +1040 +0.0 +1070 + 390 +1040 +0.0 + 0 +DIMENSION + 5 +104 +102 +{ACAD_XDICTIONARY +360 +105 +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +100 +AcDbDimension +280 + 0 + 2 +*D5 + 10 +0.0 + 20 +0.0 + 30 +0.0 + 11 +119.9239906272531 + 21 +-40.21674477289119 + 31 +0.0 + 70 + 70 + 71 + 5 + 42 +100.0000000000001 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbOrdinateDimension + 13 +100.0000000000001 + 23 +0.0 + 33 +0.0 + 14 +120.0000000000001 + 24 +-40.00000000000002 + 34 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +LARGE_RADIAL_DIMENSION + 5 +11E +102 +{ACAD_XDICTIONARY +360 +11F +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +160 + 1500 +310 +DC050000300000000C0000001300000000000000880000001D000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000 +310 +000000000000000000000000000000000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00005400000020000000020000000000000000C0724006000000000059400000000000000000AAE014673D28724028159CE2AC074F4000000000000000000000 +310 +0000000000000000000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F0000540000002000000002000000AAE014673D28724028159CE2AC074F4000000000000000004177ABFDD3FE7340FD73B7DA3FED53400000000000000000000000000000000000 +310 +00000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00005400000020000000020000004077ABFDD3FE7340FE73B7DA3FED5340000000000000000017527EE3FB627340E842CA6F7C5F4440000000000000000000000000000000000000000000000000 +310 +000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000014000000010000000C00000012000000000000000C00000013000000FFFFFFFFB00000000900000004000000A6D91C52CF5D7340CC338D92D569444000000000000000008ACADF7428687340025207 +310 +4D2355444000000000000000006C1D6C09395B73406CAD832D2167434000000000000000006C1D6C09395B73406CAD832D216743400000000000000000050000000400000000000000010000000200000003000000600000000100000002000000030000000400000001000000010000000100000001000000000000000000 +310 +00000C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F0000D400000026000000CCAA29D886E473406FFEAC6F05D75240000000000000000000000000000000000000000000000000000000000000F03F40AFD248680BCF3F1AAFD248680BEF3F0000000000 +310 +0000005200340030002E00300030000000440006000000010000000000000000000040000000000000F03F0000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000100000012000000540069006D006500730020004E0065007700200052006F006D0061006E000000 +310 +00006B00000033CC0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000012000000000000000C00000014000000020000005400000020000000020000006C1D6C09395B73406CAD832D2167434000000000000000006C1D6C09395B73406CAD832D2167434000000000000000 +310 +0000000000000000000000000000000000000000000000F03F0C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000012000000000000000C00000014000000020000005400000020000000020000000000000000C0724008000000000059400000 +310 +0000000000000000000000C072400800000000005940000000000000000000000000000000000000000000000000000000000000F03F0C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000012000000000000000C000000140000000200000054 +310 +0000002000000002000000F52B60B28813734049BF02268BB851400000000000000000F52B60B28813734049BF02268BB85140000000000000000000000000000000000000000000000000000000000000F03F0C0000001400000001000000080000001F000000 +100 +AcDbDimension +280 + 0 + 2 +*D6 + 10 +300.0 + 20 +0.0 + 30 +0.0 + 11 +319.8451511830173 + 21 +79.38060473206892 + 31 +0.0 + 70 + 137 + 71 + 5 + 42 +39.99999999999999 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbRadialDimensionLarge + 13 +300.0 + 23 +100.0000000000001 + 33 +0.0 + 14 +305.2208732372958 + 24 +70.88349294918329 + 34 +0.0 + 15 +309.7014250014534 + 25 +38.80570000581324 + 35 +0.0 + 40 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 + 50 +1040 +0.7853981633974483 +1002 +} +1001 +ACAD_DSTYLE_DIMRADIAL_EXTENSION +1070 + 387 +1070 + 1 +1070 + 388 +1040 +0.0 +1070 + 390 +1040 +0.0 + 0 +ARC_DIMENSION + 5 +13A +102 +{ACAD_XDICTIONARY +360 +13B +102 +} +330 +2 +100 +AcDbEntity + 8 +44 +160 + 2436 +310 +84090000530000000C0000001300000000000000880000001D000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000000000000000000000000000000000000000000000000000000000F03F0000000000000000000000 +310 +000000000000000000000000000000000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00005400000020000000020000000000000000587F40000000000000000000000000000000000000000000E48040000000000000000000000000000000000000 +310 +0000000000000000000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00005400000020000000020000000000000000E878401BC4347A6567FC3C0000000000000000000000000078764022CA3A04F2F4083D0000000000000000000000000000000000 +310 +00000000000000000000000000F03F0C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C000000140000000200000064000000040000000000000000207C4000000000000000000000000000000000000000000080564000000000000000000000000000000000000000000000F03F +310 +E8933EE9937E5640651ECC8A7EFFFF3F0000000000000000AC9B2929F5C60840000000000C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000014000000010000000C00000012000000000000000C00000013000000FFFFFFFFB0000000090000 +310 +000400000025EC46DD27DD8040719D67ED52F0FFBF0000000000000000D5B8081D7DE28040AB4F1814550700C000000000000000000000000000E08040000000000000000000000000000000000000000000E08040000000000000000000000000000000000500000004000000000000000100000002000000030000006000 +310 +0000010000000200000003000000040000000100000001000000010000000100000000000000000000000C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C000000140000000200000064000000040000000000000000207C40000000000000000000 +310 +00000000000000000000000080564000000000000000000000000000000000000000000000F03FC8ACEF8A507A56407A1FF0BD73FB0FC0000000000000000000B681BCAABE963F000000000C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C000000 +310 +140000000200000064000000040000000000000000207C4000000000000000000000000000000000000000000080564000000000000000000000000000000000000000000000F03F000000000080564000000000000000000000000000000000F1B581BCAABE963F000000000C00000014000000010000000C000000160000 +310 +00070000C30C00000017000000140000000C00000012000000FF7F00000C00000014000000010000000C00000012000000000000000C00000013000000FFFFFFFFB00000000900000004000000B5277245B0857640A29D67ED52F0FF3F0000000000000000568EEEC5057B7640C54F18145507004000000000000000000000 +310 +0000008076406AA1D4B7A5D1083D000000000000000000000000008076406AA1D4B7A5D1083D000000000000000005000000040000000000000001000000020000000300000060000000010000000200000003000000040000000100000001000000010000000100000000000000000000000C00000014000000010000000C +310 +00000016000000070000C30C00000017000000140000000C00000012000000FF7F0000D400000026000000DAE967A79FDD7B402A60A58095A25640000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000000000000000000000003100350037002E0030003800 +310 +0000440006000000010000000000000000000040000000000000F03F0000000000000000000000000000F03F000000000000000000000000000000000000000000000000000000000100000012000000540069006D006500730020004E0065007700200052006F006D0061006E00000000006B00000033CC0C000000160000 +310 +00070000C30C00000017000000140000000C00000012000000000000000C0000001400000002000000640000000400000028F2A0C883C27B40CEBC43F30EAD5640000000000000000000A27987E61DFA3F00000000000000000000000000000000000000000000F03F00A27987E61DFA3F000000000000283D000000000000 +310 +0000A22C4454FB210940000000000C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000012000000000000000C00000014000000020000005400000020000000020000000000000000207C40000000000000000000000000000000000000000000 +310 +207C400000000000000000000000000000000000000000000000000000000000000000000000000000F03F0C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C00000012000000000000000C0000001400000002000000540000002000000002000000 +310 +0000000000407F40000000000000000000000000000000000000000000407F400000000000000000000000000000000000000000000000000000000000000000000000000000F03F0C00000014000000010000000C00000016000000070000C30C00000017000000140000000C00000012000000FF7F00000C000000120000 +310 +00000000000C00000014000000020000005400000020000000020000000000000000007940CBCFCFAF9B93FB3C00000000000000000000000000007940CBCFCFAF9B93FB3C000000000000000000000000000000000000000000000000000000000000F03F0C00000014000000010000000C00000016000000070000C30C00 +310 +000017000000140000000C00000012000000FF7F00000C00000012000000000000000C00000014000000020000005400000020000000020000000000000000F07E40E8155E6B4E7C534000000000000000000000000000F07E40E8155E6B4E7C53400000000000000000000000000000000000000000000000000000000000 +310 +00F03F0C0000001400000001000000080000001F000000 +100 +AcDbDimension +280 + 0 + 2 +*D7 + 10 +495.0 + 20 +77.94228634059948 + 30 +0.0 + 11 +450.0 + 21 +90.07600937274693 + 31 +0.0 + 70 + 5 + 71 + 5 + 42 +157.0796326794896 + 73 + 0 + 74 + 0 + 75 + 0 + 3 +ANNO +100 +AcDbArcDimension + 13 +500.0 + 23 +0.0 + 33 +0.0 + 14 +400.0 + 24 +0.0000000000000061 + 34 +0.0 + 15 +450.0 + 25 +0.0 + 35 +0.0 + 70 + 0 + 40 +0.0 + 41 +3.141592653589793 + 71 + 0 + 16 +500.0 + 26 +0.0 + 36 +0.0 + 17 +400.0 + 27 +0.0000000000000061 + 37 +0.0 +1001 +AcadAnnotative +1000 +AnnotativeData +1002 +{ +1070 + 1 +1070 + 1 +1002 +} + 0 +ENDSEC + 0 +SECTION + 2 +OBJECTS + 0 +DICTIONARY + 5 +B +330 +0 +100 +AcDbDictionary +281 + 1 + 3 +ACAD_CIP_PREVIOUS_PRODUCT_INFO +350 +18E + 3 +ACAD_COLOR +350 +3E + 3 +ACAD_DETAILVIEWSTYLE +350 +188 + 3 +ACAD_FIELDLIST +350 +15F + 3 +ACAD_GROUP +350 +39 + 3 +ACAD_LAST_SAVED_VERSION_INFO +350 +168 + 3 +ACAD_LAYOUT +350 +15 + 3 +ACAD_MATERIAL +350 +F + 3 +ACAD_MLEADERSTYLE +350 +41 + 3 +ACAD_MLINESTYLE +350 +3A + 3 +ACAD_PLOTSETTINGS +350 +3B + 3 +ACAD_PLOTSTYLENAME +350 +A + 3 +ACAD_SCALELIST +350 +3F + 3 +ACAD_SECTIONVIEWSTYLE +350 +186 + 3 +ACAD_TABLESTYLE +350 +40 + 3 +ACAD_VISUALSTYLE +350 +30 + 3 +ACDB_RECOMPOSE_DATA +350 +1B5 + 3 +AcDbVariableDictionary +350 +42 + 3 +ADE_QUERY_LIBRARY +350 +1A1 + 3 +ASE_INDEX_DICTIONARY +350 +1A3 + 3 +Autodesk_MAP +350 +161 +1001 +ADE +1000 +ADE02C004 +1000 +[Query] +1000 +CaseSensitiveMatch=0 +1000 +SaveCurrQueryInSession=1 +1000 +MkSelSetWithQryObj=0 +1000 +ShowBlockAsInsPt=0 +1000 +CreateAssociativeHatchObjects=0 +1000 +ReferenceBoundaryForAreaLocation=1 +1000 +ShowImageAsBoundary=1 +1000 +DefaultJoinOperator=2 +1000 +ColorForAdd=red +1000 +ColorForRemove=red +1000 +BlockLocnForQuery=1 +1000 +TextLocnForQuery=1 +1000 +IncludeAllObjectsInGroups=0 +1000 +AlwaysUseLibraryDefinitions=0 +1000 +PreviewDefinitionsFrom=2 +1000 +[Save Back] +1000 +RedefineBlockDefinitions=1 +1000 +RedefineLayerDefinitions=1 +1000 +RedefineTextStyleDefinitions=1 +1000 +RemoveUnusedGroups=1 +1000 +EraseSavedBackObjects=1 +1000 +RemoveLockAfterSave=1 +1000 +CreateHistoryFileOfChanges=0 +1000 +CreateBackupFileOfSourceDwg=1 +1000 +DontAddObjectsToSaveSet=0 +1000 +MarkObjectsForEditingWithoutPrompting=0 +1000 +FdoDontAddObjsToSvSet=0 +1000 +FdoEditWithoutPrompt=1 +1000 +FdoRemUnusedGrps=1 +1000 +FdoEraseSvdBkObjs=1 +1000 +FdoRemoveLockOnSave=1 +1000 +FdoTesselationMaxPointsDistance=0 +1000 +FdoTesselationMaxCurvesDistance=0 +1000 +[Coordinate Transformation] +1000 +RestoreLastActiveDwgsOnStartup=1 +1000 +ActivateDwgsOnAttach=1 +1000 +AdjustSizesAndScalesForChangesInUnits=1 +1000 +AdjustRotationsForMapDistortions=1 +1000 +AdjustSizesAndScalesForMapDistortions=1 +1000 +AdjustElevations=1 +1000 +AdjustZeroRotationObjects=1 +1000 +ReconnectDbOnWSOpen=1 +1000 +NoOfSQLConditionsInHistory=10 + 0 +DICTIONARY + 5 +20 +330 +1F +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_LAYERFILTERS +360 +21 + 3 +ACAD_LAYERSTATES +360 +22 + 3 +ACLYDICTIONARY +360 +23 + 0 +DICTIONARY + 5 +7 +330 +6 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ADSK_XREC_LAYER_RECONCILED +360 +8 + 0 +DICTIONARY + 5 +81 +330 +80 +100 +AcDbDictionary +280 + 1 +281 + 1 + 0 +DICTIONARY + 5 +72 +330 +71 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ADSK_XREC_LAYER_RECONCILED +360 +73 + 0 +DICTIONARY + 5 +3 +330 +2 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_SORTENTS +360 +15E + 0 +DICTIONARY + 5 +6F +330 +6E +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +70 + 0 +DICTIONARY + 5 +93 +330 +92 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +94 + 0 +DICTIONARY + 5 +B1 +330 +B0 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +B2 + 0 +DICTIONARY + 5 +D1 +330 +D0 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +D2 + 0 +DICTIONARY + 5 +EB +330 +EA +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +EC + 0 +DICTIONARY + 5 +105 +330 +104 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +106 + 0 +DICTIONARY + 5 +11F +330 +11E +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +120 + 0 +DICTIONARY + 5 +13B +330 +13A +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcDbContextDataManager +360 +13C + 0 +XRECORD + 5 +18E +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbXrecord +280 + 1 +300 +MAP +300 +2026 +300 + + 0 +DICTIONARY + 5 +3E +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +188 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Imperial24 +350 +189 + 0 +FIELDLIST + 5 +15F +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbIdSet + 90 + 0 +100 +AcDbFieldList + 0 +DICTIONARY + 5 +39 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 0 +XRECORD + 5 +168 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbXrecord +280 + 1 +300 +{FA67FBA4-1C5D-0442-8E4D-6E774136AC4C} +301 +{D661F239-4705-6E46-BCE6-14BAD75042F8} +302 +{FA67FBA4-1C5D-0442-8E4D-6E774136AC4C} +303 +C:\temp\annotative_dimensions_AC1032.dwg + 0 +DICTIONARY + 5 +15 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Layout1 +350 +19D + 3 +Model +350 +14 + 0 +DICTIONARY + 5 +F +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +ByBlock +350 +3D + 3 +ByLayer +350 +3C + 3 +Global +350 +E + 0 +DICTIONARY + 5 +41 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +185 + 0 +DICTIONARY + 5 +3A +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Standard +350 +51 + 0 +DICTIONARY + 5 +3B +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 0 +ACDBDICTIONARYWDFLT + 5 +A +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Black +350 +9 + 3 +Normal +350 +D +100 +AcDbDictionaryWithDefault +340 +D + 0 +DICTIONARY + 5 +3F +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +56 + 3 +*A2 +350 +57 + 3 +A0 +350 +58 + 3 +A1 +350 +59 + 3 +A2 +350 +5A + 3 +A3 +350 +5B + 3 +A4 +350 +5C + 3 +A5 +350 +5D + 3 +A6 +350 +5E + 3 +A7 +350 +5F + 3 +A8 +350 +60 + 3 +A9 +350 +61 + 3 +B0 +350 +62 + 3 +B1 +350 +63 + 3 +B2 +350 +64 + 3 +B3 +350 +65 + 3 +B4 +350 +66 + 3 +B5 +350 +67 + 3 +B6 +350 +68 + 0 +DICTIONARY + 5 +186 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Imperial24 +350 +187 + 0 +DICTIONARY + 5 +40 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +Legend +350 +194 + 3 +Standard +350 +52 + 0 +DICTIONARY + 5 +30 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +2dWireframe +350 +2F + 3 +3dWireframe +350 +55 + 3 +Basic +350 +174 + 3 +Brighten +350 +179 + 3 +ColorChange +350 +17D + 3 +Conceptual +350 +177 + 3 +Dim +350 +178 + 3 +EdgeColorOff +350 +7C + 3 +Facepattern +350 +17C + 3 +Flat +350 +170 + 3 +FlatWithEdges +350 +171 + 3 +Gouraud +350 +172 + 3 +GouraudWithEdges +350 +173 + 3 +Hidden +350 +176 + 3 +JitterOff +350 +183 + 3 +Linepattern +350 +17B + 3 +OverhangOff +350 +184 + 3 +Realistic +350 +54 + 3 +Shaded +350 +182 + 3 +Shaded with edges +350 +181 + 3 +Shades of Gray +350 +17E + 3 +Sketchy +350 +17F + 3 +Thicken +350 +17A + 3 +Wireframe +350 +175 + 3 +X-Ray +350 +180 + 0 +XRECORD + 5 +1B5 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbXrecord +280 + 1 + 90 + 1 +330 +52 +330 +B0 +330 +D0 +330 +194 + 0 +DICTIONARY + 5 +42 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +CANNOSCALE +350 +43 + 3 +CMLEADERSTYLE +350 +44 + 3 +CTABLESTYLE +350 +45 + 3 +CVIEWDETAILSTYLE +350 +46 + 3 +CVIEWSECTIONSTYLE +350 +47 + 3 +DIMLAYER +350 +48 + 3 +HPCOLOR +350 +49 + 3 +HPTRANSPARENCY +350 +4A + 3 +LAYEREVAL +350 +4B + 3 +LAYERNOTIFY +350 +4C + 3 +LIGHTINGUNITS +350 +4D + 3 +MLEADERSCALE +350 +4E + 3 +MSLTSCALE +350 +4F + 3 +TEXTJUSTIFY +350 +50 + 0 +DICTIONARY + 5 +1A1 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +_CurrQry +350 +1B0 + 0 +DICTIONARY + 5 +1A3 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +ASEBlockHierarchyIndexRecord +350 +1A4 +1001 +DCO15 +1040 +-2090119044.0 + 0 +DICTIONARY + 5 +161 +102 +{ACAD_REACTORS +330 +B +102 +} +330 +B +100 +AcDbDictionary +281 + 1 + 3 +AcMapDMStylizedEntities +350 +19B + 3 +AcMapResourceManager +350 +167 + 3 +MAP_DISPLAY_CUSTOMOBJ_REG_TABLE +350 +165 + 3 +MAP_DISPLAY_MANAGEMENT_DICTIONARY +350 +162 + 3 +MAP_DISPLAY_STYLELIBRARY_DICTIONARY +350 +163 + 3 +MAP_RESOURCE_VERSION_MANAGEMENT_DICTIONARY +350 +166 +1001 +MapGWS +1000 +C:\ProgramData\Autodesk\Autodesk AutoCAD Map 3D 2026\R25.1\MapCache\annotative_dimensions_AC1032GWS1791460556.xml + 0 +DICTIONARY + 5 +21 +102 +{ACAD_REACTORS +330 +20 +102 +} +330 +20 +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +22 +102 +{ACAD_REACTORS +330 +20 +102 +} +330 +20 +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +23 +102 +{ACAD_REACTORS +330 +20 +102 +} +330 +20 +100 +AcDbDictionary +281 + 1 +1001 +ACAD +1000 +% %<\AcVar ViewDetailId>%\PSCALE %<\AcVar ViewScale \f "%sn">% + 71 + 4 +340 +12 + 90 + 25 + 62 + 256 +340 +12 + 90 + 25 + 62 + 256 +280 + 0 + 0 +LAYOUT + 5 +19D +102 +{ACAD_REACTORS +330 +15 +102 +} +330 +15 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +Letter_(8.50_x_11.00_Inches) + 6 + + 40 +6.349999904632568 + 41 +6.349999904632568 + 42 +6.350006103515625 + 43 +6.350006103515625 + 44 +215.8999938964844 + 45 +279.3999938964844 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +1.0 + 70 + 14992 + 72 + 0 + 73 + 0 + 74 + 5 + 7 + + 75 + 16 +147 +1.0 + 76 + 0 + 77 + 2 + 78 + 300 +148 +0.0 +149 +0.0 +100 +AcDbLayout + 1 +Layout1 + 70 + 1 + 71 + 1 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +19C +1001 +ACAD_PSEXT +1000 +None +1000 +None +1000 +Not applicable +1000 +The layout will not be plotted unless a new plotter configuration name is selected. +1070 + 0 + 0 +LAYOUT + 5 +14 +102 +{ACAD_XDICTIONARY +360 +16 +102 +} +102 +{ACAD_REACTORS +330 +15 +102 +} +330 +15 +100 +AcDbPlotSettings + 1 + + 2 +none_device + 4 +Letter_(8.50_x_11.00_Inches) + 6 + + 40 +6.349999904632568 + 41 +6.349999904632568 + 42 +6.350006103515625 + 43 +6.350006103515625 + 44 +215.8999938964844 + 45 +279.3999938964844 + 46 +0.0 + 47 +0.0 + 48 +0.0 + 49 +0.0 +140 +0.0 +141 +0.0 +142 +1.0 +143 +27.46773581402492 + 70 + 11920 + 72 + 0 + 73 + 1 + 74 + 0 + 7 + + 75 + 0 +147 +0.0364063498633697 + 76 + 0 + 77 + 2 + 78 + 300 +148 +4363.230665151171 +149 +437.5794662898717 +100 +AcDbLayout + 1 +Model + 70 + 1 + 71 + 0 + 10 +0.0 + 20 +0.0 + 11 +12.0 + 21 +9.0 + 12 +0.0 + 22 +0.0 + 32 +0.0 + 14 +0.0 + 24 +0.0 + 34 +0.0 + 15 +0.0 + 25 +0.0 + 35 +0.0 +146 +0.0 + 13 +0.0 + 23 +0.0 + 33 +0.0 + 16 +1.0 + 26 +0.0 + 36 +0.0 + 17 +0.0 + 27 +1.0 + 37 +0.0 + 76 + 0 +330 +2 +331 +2E +1001 +ACAD_PSEXT +1000 +None +1000 +None +1000 +Not applicable +1000 +The layout will not be plotted unless a new plotter configuration name is selected. +1070 + 0 + 0 +MATERIAL + 5 +3D +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMaterial + 1 +ByBlock + 73 + 1 + 78 + 1 +172 + 1 +176 + 1 +270 + 1 +274 + 1 + 94 + 63 + 0 +MATERIAL + 5 +3C +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMaterial + 1 +ByLayer + 73 + 1 + 78 + 1 +172 + 1 +176 + 1 +270 + 1 +274 + 1 + 94 + 63 + 0 +MATERIAL + 5 +E +102 +{ACAD_XDICTIONARY +360 +10 +102 +} +102 +{ACAD_REACTORS +330 +F +102 +} +330 +F +100 +AcDbMaterial + 1 +Global + 73 + 1 + 78 + 1 +172 + 1 +176 + 1 +270 + 1 +274 + 1 + 94 + 63 + 0 +MLEADERSTYLE + 5 +185 +102 +{ACAD_REACTORS +330 +41 +102 +} +330 +41 +100 +AcDbMLeaderStyle +179 + 2 +170 + 2 +171 + 1 +172 + 0 + 90 + 2 + 40 +0.0 + 41 +0.0 +173 + 1 + 91 +-1056964608 +340 +29 + 92 + -2 +290 + 1 + 42 +0.09 +291 + 1 + 43 +0.36 + 3 +Standard + 44 +0.18 +300 + +342 +26 +174 + 1 +178 + 6 +175 + 1 +176 + 0 + 93 +-1056964608 + 45 +0.18 +292 + 0 +297 + 0 + 46 +0.18 + 94 +-1056964608 + 47 +1.0 + 49 +1.0 +140 +1.0 +293 + 1 +141 +0.0 +294 + 1 +177 + 0 +142 +1.0 +295 + 1 +296 + 0 +143 +0.125 +271 + 0 +272 + 9 +273 + 9 +298 + 1 + 0 +MLINESTYLE + 5 +51 +102 +{ACAD_REACTORS +330 +3A +102 +} +330 +3A +100 +AcDbMlineStyle + 2 +STANDARD + 70 + 0 + 3 + + 62 + 256 + 51 +90.0 + 52 +90.0 + 71 + 2 + 49 +0.5 + 62 + 256 + 6 +BYLAYER + 49 +-0.5 + 62 + 256 + 6 +BYLAYER + 0 +ACDBPLACEHOLDER + 5 +9 +102 +{ACAD_REACTORS +330 +A +102 +} +330 +A + 0 +ACDBPLACEHOLDER + 5 +D +102 +{ACAD_REACTORS +330 +A +102 +} +330 +A + 0 +SCALE + 5 +56 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1:20 +140 +1.0 +141 +20.0 +290 + 0 + 0 +SCALE + 5 +57 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1" = 1' +140 +1.0 +141 +1.0 +290 + 0 + 0 +SCALE + 5 +58 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1:1 +140 +1.0 +141 +1.0 +290 + 1 + 0 +SCALE + 5 +59 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/128" = 1'-0" +140 +0.0078125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5A +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/64" = 1'-0" +140 +0.015625 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5B +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/32" = 1'-0" +140 +0.03125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5C +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/16" = 1'-0" +140 +0.0625 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5D +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +3/32" = 1'-0" +140 +0.09375 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5E +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/8" = 1'-0" +140 +0.125 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +5F +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +3/16" = 1'-0" +140 +0.1875 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +60 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/4" = 1'-0" +140 +0.25 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +61 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +3/8" = 1'-0" +140 +0.375 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +62 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1/2" = 1'-0" +140 +0.5 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +63 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +3/4" = 1'-0" +140 +0.75 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +64 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1" = 1'-0" +140 +1.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +65 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1-1/2" = 1'-0" +140 +1.5 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +66 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +3" = 1'-0" +140 +3.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +67 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +6" = 1'-0" +140 +6.0 +141 +12.0 +290 + 0 + 0 +SCALE + 5 +68 +102 +{ACAD_REACTORS +330 +3F +102 +} +330 +3F +100 +AcDbScale + 70 + 0 +300 +1'-0" = 1'-0" +140 +12.0 +141 +12.0 +290 + 0 + 0 +ACDBSECTIONVIEWSTYLE + 5 +187 +102 +{ACAD_REACTORS +330 +186 +102 +} +330 +186 +100 +AcDbModelDocViewStyle + 70 + 0 + 3 +Imperial24 +290 + 1 +300 +Imperial24 + 90 + 0 +100 +AcDbSectionViewStyle + 70 + 0 + 71 + 0 + 90 + 78 + 71 + 1 +340 +26 + 62 + 256 + 40 +0.24 +340 +0 +340 +0 + 62 + 256 + 40 +0.24 +300 +I, O, Q, S, X, Z + 40 +0.48 + 90 + 3 + 40 +0.18 + 90 + 1 + 71 + 2 +340 +12 + 90 + 25 + 62 + 256 +340 +12 + 90 + 50 + 62 + 256 + 40 +0.24 + 40 +0.0 + 40 +0.24 + 71 + 3 +340 +26 + 62 + 256 + 40 +0.24 + 90 + 1 + 40 +0.75 + 90 + 1 +300 +%<\AcVar ViewType \f "%tc1">% %<\AcVar ViewSectionStartId>%-%<\AcVar ViewSectionEndId>%\PSCALE %<\AcVar ViewScale \f "%sn">% + 71 + 4 + 62 + 256 + 62 + 257 +300 +ANSI31 + 40 +1.0 + 90 + 0 +290 + 0 +290 + 0 + 90 + 6 + 40 +0.0 + 40 +1.570796326794896 + 40 +0.2617993877991494 + 40 +1.308996938995747 + 40 +-0.2617993877991494 + 40 +1.832595714594046 + 0 +TABLESTYLE + 5 +194 +102 +{ACAD_XDICTIONARY +360 +1B3 +102 +} +102 +{ACAD_REACTORS +330 +40 +102 +} +330 +40 +100 +AcDbTableStyle +280 + 0 + 3 + + 70 + 0 + 71 + 3 + 40 +0.06 + 41 +0.06 +280 + 0 +281 + 0 + 7 +Legend +140 +0.18 +170 + 4 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 512 + 91 + 0 + 1 + +274 + -2 +284 + 0 + 64 + 0 +275 + -2 +285 + 0 + 65 + 0 +276 + -2 +286 + 0 + 66 + 0 +277 + -2 +287 + 0 + 67 + 0 +278 + -2 +288 + 0 + 68 + 0 +279 + -2 +289 + 0 + 69 + 0 + 7 +Legend +140 +0.25 +170 + 5 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 512 + 91 + 0 + 1 + +274 + -2 +284 + 0 + 64 + 0 +275 + -2 +285 + 0 + 65 + 0 +276 + -2 +286 + 0 + 66 + 0 +277 + -2 +287 + 0 + 67 + 0 +278 + -2 +288 + 0 + 68 + 0 +279 + -2 +289 + 0 + 69 + 0 + 7 +Legend +140 +0.18 +170 + 4 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 512 + 91 + 0 + 1 + +274 + -2 +284 + 0 + 64 + 0 +275 + -2 +285 + 0 + 65 + 0 +276 + -2 +286 + 0 + 66 + 0 +277 + -2 +287 + 0 + 67 + 0 +278 + -2 +288 + 0 + 68 + 0 +279 + -2 +289 + 0 + 69 + 0 + 0 +TABLESTYLE + 5 +52 +102 +{ACAD_XDICTIONARY +360 +53 +102 +} +102 +{ACAD_REACTORS +330 +40 +102 +} +330 +40 +100 +AcDbTableStyle +280 + 0 + 3 +Standard + 70 + 0 + 71 + 0 + 40 +0.06 + 41 +0.06 +280 + 0 +281 + 0 + 7 +Standard +140 +0.18 +170 + 2 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 7 +Standard +140 +0.25 +170 + 5 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 7 +Standard +140 +0.18 +170 + 5 + 62 + 0 + 63 + 7 +283 + 0 + 90 + 4 + 91 + 0 + 1 + +274 + -2 +284 + 1 + 64 + 0 +275 + -2 +285 + 1 + 65 + 0 +276 + -2 +286 + 1 + 66 + 0 +277 + -2 +287 + 1 + 67 + 0 +278 + -2 +288 + 1 + 68 + 0 +279 + -2 +289 + 1 + 69 + 0 + 0 +VISUALSTYLE + 5 +2F +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +2dWireframe + 70 + 4 +177 + 3 +291 + 0 + 70 + 58 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +55 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +3dWireframe + 70 + 5 +177 + 3 +291 + 0 + 70 + 58 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +174 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Basic + 70 + 7 +177 + 3 +291 + 1 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +179 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Brighten + 70 + 12 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +50.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +17D +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +ColorChange + 70 + 16 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 8 +420 + 8421504 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 8 +420 + 8421504 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +177 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Conceptual + 70 + 9 +177 + 3 +291 + 0 + 70 + 58 + 90 + 3 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +179.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +178 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Dim + 70 + 11 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +-50.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +7C +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +EdgeColorOff + 70 + 22 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 8 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +17C +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Facepattern + 70 + 15 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +170 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Flat + 70 + 0 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +171 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +FlatWithEdges + 70 + 1 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +172 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Gouraud + 70 + 2 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +173 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +GouraudWithEdges + 70 + 3 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +176 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Hidden + 70 + 6 +177 + 3 +291 + 0 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +183 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +JitterOff + 70 + 20 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 10 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 1 +176 + 0 +290 + 1 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 40 +0.0 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 0 +176 + 0 + 62 + 18 +420 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 3 +176 + 0 + 62 + 5 +420 + 255 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 0 + 1 +strokes_ogs.tif +176 + 0 +290 + 0 +176 + 0 + 40 +1.0 +176 + 0 + 40 +1.0 +176 + 0 + 0 +VISUALSTYLE + 5 +17B +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Linepattern + 70 + 14 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 7 +176 + 1 + 90 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +184 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +OverhangOff + 70 + 21 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 0 + 90 + 2 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 + 40 +0.6 +176 + 0 + 40 +30.0 +176 + 0 + 62 + 7 +420 + 16777215 +176 + 0 + 90 + 1 +176 + 0 + 90 + 4 +176 + 0 + 62 + 7 +176 + 0 + 62 + 257 +176 + 0 + 90 + 1 +176 + 0 + 90 + 1 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 9 +176 + 2 + 62 + 7 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 1 +176 + 0 + 90 + 6 +176 + 0 + 90 + 2 +176 + 0 + 62 + 7 +176 + 0 + 90 + 5 +176 + 0 + 90 + 0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 1 +176 + 0 + 40 +0.0 +176 + 0 + 90 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 1 +176 + 0 +290 + 1 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 40 +0.0 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 0 +176 + 0 + 62 + 18 +420 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 3 +176 + 0 + 62 + 5 +420 + 255 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 + 90 + 50 +176 + 0 +290 + 0 +176 + 0 + 90 + 50 +176 + 0 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 0 + 1 +strokes_ogs.tif +176 + 0 +290 + 0 +176 + 0 + 40 +1.0 +176 + 0 + 40 +1.0 +176 + 0 + 0 +VISUALSTYLE + 5 +54 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Realistic + 70 + 8 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 8 +420 + 7895160 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +182 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Shaded + 70 + 27 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 0 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 8 +420 + 7895160 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 5 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +181 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Shaded with edges + 70 + 26 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 5 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +17E +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Shades of Gray + 70 + 23 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 7 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +17F +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Sketchy + 70 + 24 +177 + 3 +291 + 0 + 70 + 58 + 90 + 1 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 62 + 7 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +40.0 +176 + 1 + 90 + 11 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 6 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +17A +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Thicken + 70 + 13 +177 + 3 +291 + 1 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 12 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 5 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +175 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +Wireframe + 70 + 5 +177 + 3 +291 + 0 + 70 + 58 + 90 + 0 +176 + 1 + 90 + 2 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 + 40 +0.6 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 4 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 257 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +VISUALSTYLE + 5 +180 +102 +{ACAD_REACTORS +330 +30 +102 +} +330 +30 +100 +AcDbVisualStyle + 2 +X-Ray + 70 + 25 +177 + 3 +291 + 0 + 70 + 58 + 90 + 2 +176 + 1 + 90 + 2 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +0.5 +176 + 1 + 40 +30.0 +176 + 1 + 62 + 7 +420 + 16777215 +176 + 1 + 90 + 1 +176 + 1 + 90 + 0 +176 + 1 + 62 + 7 +176 + 1 + 62 + 257 +176 + 1 + 90 + 1 +176 + 1 + 90 + 1 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 8 +176 + 1 + 62 + 7 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 1 +176 + 1 + 90 + 6 +176 + 1 + 90 + 2 +176 + 1 + 62 + 7 +176 + 1 + 90 + 3 +176 + 1 + 90 + 0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 13 +176 + 1 + 40 +0.0 +176 + 1 + 90 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 1 +176 + 1 +290 + 1 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 40 +0.0 +176 + 1 + 40 +1.0 +176 + 1 + 90 + 0 +176 + 1 + 62 + 18 +420 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 3 +176 + 1 + 62 + 5 +420 + 255 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 + 90 + 50 +176 + 1 +290 + 0 +176 + 1 + 90 + 50 +176 + 1 + 62 + 256 +176 + 0 + 40 +1.0 +176 + 0 + 90 + 2 +176 + 1 + 1 +strokes_ogs.tif +176 + 1 +290 + 0 +176 + 1 + 40 +1.0 +176 + 1 + 40 +1.0 +176 + 1 + 0 +DICTIONARYVAR + 5 +43 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +1:20 + 0 +DICTIONARYVAR + 5 +44 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +STANDARD + 0 +DICTIONARYVAR + 5 +45 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +STANDARD + 0 +DICTIONARYVAR + 5 +46 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +Imperial24 + 0 +DICTIONARYVAR + 5 +47 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +Imperial24 + 0 +DICTIONARYVAR + 5 +48 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +44 + 0 +DICTIONARYVAR + 5 +49 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +BYLAYER + 0 +DICTIONARYVAR + 5 +4A +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +ByLayer + 0 +DICTIONARYVAR + 5 +4B +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +1 + 0 +DICTIONARYVAR + 5 +4C +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +15 + 0 +DICTIONARYVAR + 5 +4D +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +0 + 0 +DICTIONARYVAR + 5 +4E +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +1.000000 + 0 +DICTIONARYVAR + 5 +4F +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +0 + 0 +DICTIONARYVAR + 5 +50 +102 +{ACAD_REACTORS +330 +42 +102 +} +330 +42 +100 +DictionaryVariables +280 + 0 + 1 +Left + 0 +XRECORD + 5 +1B0 +102 +{ACAD_REACTORS +330 +1A1 +102 +} +330 +1A1 +100 +AcDbXrecord +280 + 1 +1000 +ADE02C001 +1070 + 1 +1070 + 0 +1002 +{ +1002 +} +1002 +{ +1002 +} +1002 +{ +1002 +} +1000 + + 0 +XRECORD + 5 +1A4 +102 +{ACAD_REACTORS +330 +1A3 +102 +} +330 +1A3 +100 +AcDbXrecord +280 + 1 + 0 +DMSTYLIZEDENTITIESTABLE + 5 +19B +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcMapDMStylizedEntitiesTable + 70 + 1 + 0 +MAPRESOURCEMANAGEROBJECT + 5 +167 +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcMapResourceManager + 70 + 1 + 90 + 0 + 0 +DATATABLE + 5 +165 +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcDbDataTable + 70 + 2 + 90 + 4 + 91 + 15 + 1 + + 92 + 3 + 2 +OriginalClassName + 3 +AcMapDMDefaultStyle + 3 +AcMapDMEntityStyle + 3 +AcMapDMRasterStyle + 3 +AcMapDMSEAnnotationStyle + 3 +AcMapDMSEHatchStyle + 3 +AcMapDMSETextStyle + 3 +AcMapDMThematicStyle + 3 +AcMapDMBaseElement + 3 +AcMapDMAttachedDwgsQueryElement + 3 +AcMapDMFeatureElement + 3 +AcMapDMLayerElement + 3 +AcMapDMCurrentDwgQueryElement + 3 +AcMapDMRasterElement + 3 +AcMapDMTopoElement + 3 +AcMapDMTopoQueryElement + 92 + 3 + 2 +ProxyDisplayName + 3 +Default + 3 +Entity + 3 +Raster + 3 +Annotation + 3 +Hatch + 3 +Text + 3 +Thematic + 3 +Map Base + 3 +Ade Query + 3 +Feature Class + 3 +Layer + 3 +Ade Project Query + 3 +Raster + 3 +Topology + 3 +Topology Query + 92 + 1 + 2 +CustomObjectType + 93 + 2 + 93 + 2 + 93 + 2 + 93 + 2 + 93 + 2 + 93 + 2 + 93 + 2 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 92 + 1 + 2 +StyleCoExistanceType + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 1 + 93 + 2 + 93 + 0 + 93 + 0 + 93 + 0 + 93 + 0 + 93 + 0 + 93 + 0 + 93 + 0 + 93 + 0 + 0 +DMMAPMANAGER + 5 +162 +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcDbDictionary +281 + 1 + 3 +DisplayMap1 +350 +192 +100 +AcDbDictionaryWithDefault +340 +192 +100 +AcMapDMMapManager + 70 + 1 +340 +192 + 0 +DMSTYLELIBRARY + 5 +163 +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcMapDMStyleLibrary + 70 + 1 + 70 + 1 +360 +164 + 0 +DICTIONARY + 5 +166 +102 +{ACAD_REACTORS +330 +161 +102 +} +330 +161 +100 +AcDbDictionary +281 + 1 + 0 +DICTIONARY + 5 +74 +102 +{ACAD_REACTORS +330 +70 +102 +} +330 +70 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +75 + 3 +*A2 +350 +85 + 0 +DICTIONARY + 5 +95 +102 +{ACAD_REACTORS +330 +94 +102 +} +330 +94 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +96 + 3 +*A2 +350 +A3 + 0 +DICTIONARY + 5 +B3 +102 +{ACAD_REACTORS +330 +B2 +102 +} +330 +B2 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +B4 + 3 +*A2 +350 +C2 + 0 +DICTIONARY + 5 +D3 +102 +{ACAD_REACTORS +330 +D2 +102 +} +330 +D2 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +D4 + 3 +*A2 +350 +DF + 0 +DICTIONARY + 5 +ED +102 +{ACAD_REACTORS +330 +EC +102 +} +330 +EC +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +EE + 3 +*A2 +350 +F9 + 0 +DICTIONARY + 5 +107 +102 +{ACAD_REACTORS +330 +106 +102 +} +330 +106 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +108 + 3 +*A2 +350 +113 + 0 +DICTIONARY + 5 +121 +102 +{ACAD_REACTORS +330 +120 +102 +} +330 +120 +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +122 + 3 +*A2 +350 +12E + 0 +DICTIONARY + 5 +13D +102 +{ACAD_REACTORS +330 +13C +102 +} +330 +13C +100 +AcDbDictionary +281 + 1 + 3 +*A1 +350 +13E + 3 +*A2 +350 +14D + 0 +DICTIONARY + 5 +16 +330 +14 +100 +AcDbDictionary +280 + 1 +281 + 1 + 0 +DICTIONARY + 5 +10 +330 +E +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +FBXASSET +360 +11 + 0 +DICTIONARY + 5 +1B3 +330 +194 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_ROUNDTRIP_2008_TABLESTYLE_CELLSTYLEMAP +360 +1B4 + 0 +DICTIONARY + 5 +53 +330 +52 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +ACAD_ROUNDTRIP_2008_TABLESTYLE_CELLSTYLEMAP +360 +1B2 + 0 +DMMAP + 5 +192 +102 +{ACAD_REACTORS +330 +162 +330 +195 +102 +} +330 +162 +100 +AcMapDMMap + 70 + 1 + 1 +Default + 70 + 1 +330 +0 +100 +AcMapDMMap + 70 + 1 + 90 + 1 +360 +195 + 90 + 1 + 40 +1.797693134862314E+99 + 70 + 1 +100 +AcMapDMMap + 70 + 6 + 70 + 0 + 40 +1.797693134862314E+99 +290 + 1 +290 + 1 + 40 +1.0 + 40 +3.0 + 1 +Legend + 90 + 1 + 40 +1.797693134862314E+99 + 1 + + 70 + 0 + 40 +0.5 + 70 + 1 + 90 + 0 + 90 + 1 +360 +196 + 40 +8.162545102682873 +290 + 0 +290 + 1 + 40 +1.0 + 90 + 40 +290 + 0 +290 + 1 + 40 +-171.7807348484713 + 40 +-17.22753804290833 + 40 +116.6304781011532 + 40 +78.42728737915658 + 1 + +290 + 1 + 40 +45.0 + 40 +45.0 + 0 +DMSTYLECATEGORY + 5 +164 +102 +{ACAD_REACTORS +330 +163 +102 +} +330 +163 +100 +AcMapDMStyleCategory + 70 + 1 + 1 +Display Styles + 70 + 0 + 0 +ACDB_ALDIMOBJECTCONTEXTDATA_CLASS + 5 +75 +102 +{ACAD_REACTORS +330 +74 +102 +} +330 +74 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D0 +293 + 0 + 10 +13.55439437635185 + 20 +65.26080749819752 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAlignedDimensionObjectContextData + 11 +53.60000000000001 + 21 +95.19999999999999 + 31 +0.0 + 0 +ACDB_ALDIMOBJECTCONTEXTDATA_CLASS + 5 +85 +102 +{ACAD_REACTORS +330 +74 +102 +} +330 +74 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D15 +293 + 0 + 10 +12.68788752703678 + 20 +66.41614996395095 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 1 + 71 + 0 +280 + 8 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAlignedDimensionObjectContextData + 11 +53.60000000000001 + 21 +95.19999999999999 + 31 +0.0 + 0 +ACDB_ALDIMOBJECTCONTEXTDATA_CLASS + 5 +96 +102 +{ACAD_REACTORS +330 +95 +102 +} +330 +95 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D1 +293 + 0 + 10 +50.0 + 20 +-19.92399062725306 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAlignedDimensionObjectContextData + 11 +100.0 + 21 +-20.0 + 31 +0.0 + 0 +ACDB_ALDIMOBJECTCONTEXTDATA_CLASS + 5 +A3 +102 +{ACAD_REACTORS +330 +95 +102 +} +330 +95 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D14 +293 + 0 + 10 +50.0 + 20 +-18.47981254506128 +294 + 1 +140 +0.0 +298 + 1 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 1 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAlignedDimensionObjectContextData + 11 +100.0 + 21 +-20.0 + 31 +0.0 + 0 +ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS + 5 +B4 +102 +{ACAD_REACTORS +330 +B3 +102 +} +330 +B3 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D2 +293 + 0 + 10 +60.07210882242031 + 20 +20.02403627414009 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAngularDimensionObjectContextData + 11 +61.79614645668088 + 21 +13.46240257548576 + 31 +0.0 + 0 +ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS + 5 +C2 +102 +{ACAD_REACTORS +330 +B3 +102 +} +330 +B3 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D13 +293 + 0 + 10 +61.44217644840627 + 20 +20.48072548280209 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 3 +292 + 0 + 71 + 0 +280 + 4 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAngularDimensionObjectContextData + 11 +61.79614645668088 + 21 +13.46240257548576 + 31 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 + 289 +1070 + 3 +1002 +} + 0 +ACDB_DMDIMOBJECTCONTEXTDATA_CLASS + 5 +D4 +102 +{ACAD_REACTORS +330 +D3 +102 +} +330 +D3 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D3 +293 + 0 + 10 +239.9999999999999 + 20 +29.99999999999999 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbDiametricDimensionObjectContextData + 11 +223.9999999999999 + 21 +17.99999999999997 + 31 +0.0 + 12 +175.9999999999999 + 22 +-18.00000000000001 + 32 +0.0 + 0 +ACDB_DMDIMOBJECTCONTEXTDATA_CLASS + 5 +DF +102 +{ACAD_REACTORS +330 +D3 +102 +} +330 +D3 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D12 +293 + 0 + 10 +239.9999999999999 + 20 +30.0 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 2 +280 + 16 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbDiametricDimensionObjectContextData + 11 +223.9999999999999 + 21 +17.99999999999997 + 31 +0.0 + 12 +175.9999999999999 + 22 +-18.00000000000001 + 32 +0.0 +1001 +ACAD +1000 +DSTYLE +1002 +{ +1070 + 279 +1070 + 2 +1002 +} + 0 +ACDB_RADIMOBJECTCONTEXTDATA_CLASS + 5 +EE +102 +{ACAD_REACTORS +330 +ED +102 +} +330 +ED +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D4 +293 + 0 + 10 +360.0 + 20 +30.00000000000002 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbRadialDimensionObjectContextData + 11 +335.7770876399966 + 21 +17.8885438199983 + 31 +0.0 + 0 +ACDB_RADIMOBJECTCONTEXTDATA_CLASS + 5 +F9 +102 +{ACAD_REACTORS +330 +ED +102 +} +330 +ED +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D11 +293 + 0 + 10 +360.0 + 20 +30.00000000000002 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbRadialDimensionObjectContextData + 11 +335.7770876399966 + 21 +17.8885438199983 + 31 +0.0 + 0 +ACDB_ORDDIMOBJECTCONTEXTDATA_CLASS + 5 +108 +102 +{ACAD_REACTORS +330 +107 +102 +} +330 +107 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D5 +293 + 0 + 10 +119.9239906272531 + 20 +-40.21674477289119 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbOrdinateDimensionObjectContextData + 11 +0.0 + 21 +0.0 + 31 +0.0 + 12 +120.0000000000001 + 22 +-40.00000000000002 + 32 +0.0 + 0 +ACDB_ORDDIMOBJECTCONTEXTDATA_CLASS + 5 +113 +102 +{ACAD_REACTORS +330 +107 +102 +} +330 +107 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D10 +293 + 0 + 10 +118.4798125450613 + 20 +-44.33489545782269 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbOrdinateDimensionObjectContextData + 11 +0.0 + 21 +0.0 + 31 +0.0 + 12 +120.0000000000001 + 22 +-40.00000000000002 + 32 +0.0 + 0 +ACDB_RADIMLRGOBJECTCONTEXTDATA_CLASS + 5 +122 +102 +{ACAD_REACTORS +330 +121 +102 +} +330 +121 +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D6 +293 + 0 + 10 +319.8451511830173 + 20 +79.38060473206892 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbRadialDimensionObjectContextData + 11 +309.7014250014534 + 21 +38.80570000581324 + 31 +0.0 +100 +AcDbRadialDimensionLargeObjectContextData + 12 +300.0 + 22 +100.0000000000001 + 32 +0.0 + 13 +305.2208732372958 + 23 +70.88349294918329 + 33 +0.0 + 0 +ACDB_RADIMLRGOBJECTCONTEXTDATA_CLASS + 5 +12E +102 +{ACAD_REACTORS +330 +121 +102 +} +330 +121 +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D9 +293 + 0 + 10 +319.8451511830173 + 20 +79.38060473206892 +294 + 0 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbRadialDimensionObjectContextData + 11 +309.7014250014534 + 21 +38.80570000581324 + 31 +0.0 +100 +AcDbRadialDimensionLargeObjectContextData + 12 +300.0 + 22 +100.0000000000001 + 32 +0.0 + 13 +305.2208732372958 + 23 +70.88349294918329 + 33 +0.0 + 0 +ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS + 5 +13E +102 +{ACAD_REACTORS +330 +13D +102 +} +330 +13D +100 +AcDbObjectContextData + 70 + 4 +290 + 1 +100 +AcDbAnnotScaleObjectContextData +340 +58 +100 +AcDbDimensionObjectContextData + 2 +*D7 +293 + 0 + 10 +450.0 + 20 +90.07600937274693 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 0 +297 + 0 +100 +AcDbAngularDimensionObjectContextData + 11 +495.0 + 21 +77.94228634059948 + 31 +0.0 + 0 +ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS + 5 +14D +102 +{ACAD_REACTORS +330 +13D +102 +} +330 +13D +100 +AcDbObjectContextData + 70 + 4 +290 + 0 +100 +AcDbAnnotScaleObjectContextData +340 +56 +100 +AcDbDimensionObjectContextData + 2 +*D8 +293 + 0 + 10 +450.0 + 20 +91.52018745493872 +294 + 1 +140 +0.0 +298 + 0 +291 + 0 + 70 + 0 +292 + 0 + 71 + 0 +280 + 0 +295 + 0 +296 + 1 +297 + 0 +100 +AcDbAngularDimensionObjectContextData + 11 +495.0 + 21 +77.94228634059948 + 31 +0.0 + 0 +XRECORD + 5 +11 +102 +{ACAD_REACTORS +330 +10 +102 +} +330 +10 +100 +AcDbXrecord +280 + 1 + 70 + 1 + 90 +2070111275 + 71 + 1 + 1 +1726B2AA-BEA8-4E36-92B1-C4E9E05F2AAB +311 +504B03041400060808003D7AEE4A3D73C5AC26010000A80100004F00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F446566696E6974696F6E4974657261746F7250726F706572746965732E62696E3590BD4EC33010C70D038881018907C8C0C0 +311 +62D2D8693E90108A6B1B31B0C003809BBA6D2437ADEA447C4C1DFB14A88FD6F76080736D2C9D7F77FF3BDF9DBC4508FD86032E3A02DBC07D0E7CD0AD5E37F54B3DD70B854E9C62966365AEC09392F042528E8928339C1605C56CC4723C4C04CDB9AC722946C750770AC6F554F5A6732D9F1A5B6B6354AB97BDBD0021CC8816 +311 +AA8359CADCB8476708396CC0D07FC2BA4E33BF915BF21D4C4D56B7F7CA5ADDDDC59412C9B2A2C4192114A73CE198D19C622E13C648252A2958FCACEDB25FD7DAC6494E32902BCC4455E054D00C97842578948A520C8612522CEEE6BDFB9A4BB7C6B8558D89077158E175D5CE40467BFC650FBCF68C7E3E0FF16E12D878EE1F +311 +3F0E7A340E9C7AEEBB107FFBBAB7C0DDCEC7D1D6F30F504B03041400060808003D7AEE4AB71BFCCC12010000300200004500000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F496E7374616E636550726F706572746965732E62696EEB606060F80F +311 +0540260323103700495E20ED9E9A975A94991C9C9C919A9BA802143034373273327274D4757275B4D035713536D3B5347232D4753671B574353075034A39B1233482B4181B9AB8B81A995AEA9A9A9818EB9A981919EA3AB939B9E81A9A1B1B389B393B5B3ABA5A029581ED65D08CE93FF455E38A3D9066028A3500318C0FA6 +311 +817C20F8600F51CDC020E0C020001602132A0E08365616502304C01958950105E10A3E3003790D400CD5FA004AF300853001281C113270433014A6EC74C0104311C0D40A325A0349CD077B16200F145B7C401C5C9E58929CA1EB54949897929A0292E107623028CA4F294D2E89CF4C61F8CF01F10A58182E7FE71E2C34A11A +311 +20145C1EAA3F2F31371528D30000504B03041400060808003D7AEE4A88E57597CD3F0000904100006B00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D433445394530354632414142 +311 +2F7468756D626E61696C2F302F67656E657269635F706E67355B773CD4FF1FBF73E71C0E67EF7576C9DEF3EC995D46C6A1EC5046649CBDF79E192942562825CE965D8A868C2842C8DE9FDFD1F7E7F138F7078FCF6B3F5FCFD7EBFDFEC41B196891913091804020321D6D7513FC77D8C5070EC3FFEE51B21F068154CC75D455 +311 +CC028A3EA68992803810109FDDE5D5CEC5521B28A1B422BF80741695D5B529DA1C2D058AD2388BDA9F476F7C2CADC939304173DBF48A452BF8A700C0C70C3D121C1AA15A5270C22E2B9E28763651F7DA0D12CE11077B2ECD0D560B5E3DE2368B1E65C5E1C87384A4CC5F2D9FB8BE39E9B77C753783A37998F5CEF1B4FEE553 +311 +463245C9712270880DF339E0B882A6BA713D865F6F384C842D440934EF264F4A304F8DE4EEFA1E2BF5E2D91F5ADD9613D6E31DDB33ED31DB1D7916CAF091286EA3D31B9CFECB78BB0060245B943C4C040119FF780A74DD308BA9D028678674EB5504ECF284EE814DAED07440BAF649BE4B55DA2890F4D73E2D489A59EE54FD +311 +B0A85B59F2F52C4858A02705C4815A792B0C4A996A2023ECB195073E115E3E3647F64243A8338F2000BCB58DA5692C7E7C3D413F963FEDF3CF00FBB0F831A9D51360FECA43819F527B89FA260EB63C5DA676830AA3626A3693B23F1A17A0DFFCE3EE164E31B5365EDF0C89EF64D8E38AB0BA9A1117D7C3A0EC44F44F402309 +311 +5E80BA610DE336D0F99593A88BFC5306E72DF98F7FD132ED95878DF2964EA7E43071359FD83B2BDF9C6B5BDF768F0F3C0FC351199526F53D9460A34511F75D1B63E488178569472C91A94497807A3FD4A390C6558F26D416365C3656DE6E769DA9D8FC73774E1709812842DD8EF96AED1960F79D21B395CDDFE6F92CB4EB96 +311 +2A4668C76990E2EF29798C8941D67DA50F4A5F947872460F1F6FDB794E8A29FD7AC0C0D6E0714339CE258FB17AE8535221E3464A10F29A0BE5EEECEFC5675926A89F49EB14E5711894F6586DB5754EB4D5DA9C6437EBA57DB97A24F8B8A8DB295FFD73266CF57E82694DF5166DDF93573AFE9C9C5EB05F8FEF8E89E0A8917B +311 +0B3724DB7BEBB53252581EFC3E38166BA131A3A5B42FE2AD00A769BBFA4458D2DE7822F8C4F63D0B8E21B285AE13325F3410A435C648C9D91FDEB109E73CEDA7BC796961AF79175E1A3CE4C5E8B0D009B0C9E29EFD98BC8E97554E3D8D838424E270F7685226E5AC268E021EDE3522D583E8F20C0BDE2959EF5BBFEEDAB32F +311 +E9A3ED0E39F211A86AA9DEBFC68182EDED132AB8BB794442D2D7EA9F4D8BFF52BC4D55BB165124EE90A42D101E67BBBB292FFB4F66DE5BF2300E44546757DA7CEF8932BFC9F92A0707953491A55C5A5ACEDABD9FA1AEA01BAC3DC5A24E22E7C47213493996EFBC369D086ED9397C9BA6C7F9855C7BD5E15BFC8C53DB3D2A4C +311 +5901A57ACD2FBDF4D1676E95338B2C2BCE65FDA4C64F5FEFDC7D9CA5AA1FCF11E193F2FDABF0F4916BF13FB916A224380E6462A9815F2300DC49CC4DF8D055CEF76462F4B7A7ACA7365C2707891370BC1D0AA6203C44CCAB47084FEC057F27FFCD57F89B8B9852459798A675C66BD7CE572CAF71FF7E6D7ECF7BF62CAB7B3F +311 +1107DCD04DC55A3F9961700286141C94A4F771FEB2BCDA2DDEE0CB0BAE402FF1DB0100F8E475DFFFC074DDB4498AB7D186A7654DDB1CB680D703D47CEB4E72F8CB13D86A4AA68116E26387B93FD6738779B34FEDB8E517EDF2BAF28D9BE93A1D3A164320E07D42E514725C29515FF361754213EDE06B079A2E99EB1CA82A02 +311 +019EADEEB87B9AF005BD04BBCECB14AACD6B24EFBE482194A97DD32400685FF1FEF1544D1B14EFB1E7F08E6D2CD2AF52DE757F35F5E62332EE88EA26417AD5C3E0E319D68F25414E6D672BD4522B278C57D18F0113921C71D96527E091F00CEB15AE23D24667369BD3CEFA10C7549D930890BA4366F4EBC55F01F746109F98 +311 +ABCDD5A3EE06619C6AD78AB33E48E4C9BD21BF7478B385EC05C4F8987E2C1BFA0A60EBEDAA0AE0B015C2720ECE180FB6F2DEFBEB822D96338C9B63822183BBF52FB664A7AE57003AABCE512BF77E7E31BDA2E739AC4C131657DDFE5225E900FB56CC01CDE808FA4A9C9DA16AC679656BB64796283D89812B8F91136AE18EE5 +311 +EBBAF47A73BE3C153EB5D4CD491B4BFB4FE690A4CF9ABA08C0D8AA64220C438C96EA6CA80B58FE5761E697B3A292EB9FBDA502FA863E49FE694ADDFFF9D62C520BDD1A22014147A0903A05B9B729F54272EF83931FEEC057BFF8C8055C279EAC5C0011804828734024F6CFA319C9CC6867C727184465CD9BB7ED386AFFD96B +311 +294A85E3802FAE47244602D8273615952B98C4F23F7EAE4463D9D638EEE374A20959E0FE519C4CFB0FBFE5DD80C2AA3F9DB961D1BDE57E67C9BB47B77FDD74EE3094F5DBBE3EBC1FBDB7393F5116263009E2EFE1AF9A221B2AE234C902BF70E9F280ED23E73908361565964333A3F01D0B006AF32FB21AA1316744B489D5A1 +311 +98E85299241735BE559675130955C902A8ED761FC0DBE337A9F91919AF5CE32AF902ADF9AB2615E00E8A94586BA1A90839B61832FF1BFB76D2EFADE6DB1BA04CCAD3DA649E7E2A0219F592E22F2AD54847EEA8E42271011E9074F8F3DD9FBA6CDF88FFC9FC7E811AD1CA8F4557CE4AFC7BBEDCF0114A48689F20A584520C74 +311 +DA8127124B767E2FB91A6B186246727BE63C9445BAE02088D58B8EFDC0F1072407CD9B89A13F6303B4A928F593AD489B58E6869325790ADC406036C591729FE14021F94B7796BB11848D463536A092A26F077F94639F7CEEE2A724C66EC885F4A24F8B8A0AC321F8FD149BA529460FAA34E4663C02D41FDF80BCA222D42F0A +311 +BFF8490F4FA74C673807C2051D8E467B47B616072860069A9A303ABA9B319D58404461401B0A0F9BE5E1E151C14BC33B32ABE03DDE91708DFAEB15E7C0D593C86BB7D7EC17BE56E57975F077BFD5525F3A1A361D584A75E08CF29FC7B44B2B3085014F3A5A14517377C3F6B8F37E59514C3B12F8AACDEDDA4DFC49BE571010 +311 +1534CD6FB6DE15B50F11A09472AABA727F0C49D9CB906B158030065F48EB3625E010CEC1D511D0053474B11E6A4F01C0D6EF1BED3A944FDEC70E0DDCDC756C86545910E0DAE3BE3AA9A404574C2995CD5CAF9549226BC94B4F4F0F5F9086F418F6B32346464610D8BC7391D3C3A3CCF04CFC1FB2A3A3170E369511868F14EE +311 +A4E5E438CC73DB1F3248AA94B6B2FF33B222FF3D1E7BF146CAD229770158063BCE4F5391964DF62F7E52A7BE0EEA829C9E13C4C147D6F93FE59E111DAB5E4594D6F3CD1AD375EE039930EFE5AF2BB2D41C83C7DABD8C659BAFBE8FAB392CA634F3D15C1D945DB4588D2B0824A4EC928AAC565557CA2F0DAA588CA5BE30B3A8 +311 +004F7BF005E96CBF891D7F18112A3619FDF530DC8AA64954258E1811789B5189B49B4EB53F5F89F7D37523894F3EB57B373763C91E502F52CC99EB7BDDF933FC324C4FFC2561DFFA7339FAFDD0A4BFBE6D3A8FF9ED1FC49898139864602458968913181918F719CCF5A68B2EE9C1FF050E34E63107003B8120FA982C21B30A +311 +874E4F5E4B38D5A8290C4B8D9BE48A0BE31EA995BDC37AC6DE90BA17D259DEF53605D55922FEB1855D915B659FBEB350EE0DFB2F9F766E1C84CC8964B75D08667445EAB966015F63A18A9E0A325C1B3DC628C0D3CB60F767FA93CC65F25458BD23C3B312716E5F40E5858AC06EBA9AB14F95DB99147B832069201541D09A0D +311 +856E12C629CF32683760EE855537D1901988D5EBC156676C7DD51D7207CF3267AF1D76C2AD867315E44618015313A98B19941C696FED3461CAA9B5415F918556D7802EDACEFD6B2E45853A9735DFC9DBF7E440F9319F8B6805A973BCCDC76C069A9144E51F187EDCC12FC31B5DEAAF0A76137199B106EC84ADA6B6EE697D4E +311 +6A96E007417F4E880E8B1E89B4BCE9D81EF611E2ED8F0C1A6C25F620FAFAAB656A7C42D464880E8AFAB0E0FC8EA38CA9A8AEEAEE3E4648BA4680270A89743CDD3E6C6CBF34B7B640EFA285ABC7EA0A1E28F3CC963D114A80123EE66D0AF7D5380EB41909B605AB4765B709B808590458157E69BA1378FEC4B48CAF6A730E3B +311 +E3C5EF2DD1A5EAF94B1DDE50CEB55DDFD7EE9A16747FA4B223359FB1FCC69E1194892BABB93A1D5C4E807AC0EA2E30180811E77A2291F6E7F7FAA5E0F60215BC6024E48DE436C511F0628B8CA189982D4D83CCA17D305A7E923C37941CFDFDCD93ACAF735EF5F0E61BBD3E6C41A59B242790D3A3BAC7064DCD89AA2E37214E +311 +C839820949D5CAA31E240D2948E48F690298974A96BA9A8432BC90F5071D6537C9666EA4564796B7AFFFA548077BEEA75F63083435074BA182F3699557397F71548383FDA8CA34D99B981E72835ECDA5DDDC151315173D05A21F651AAF8524E88209E2E7A737ED1045800CE3390050BCFB8BE588DF111617874C62575039CA +311 +588EEFDEFEFE319B739DE2EDC147092A262611E159650E787917885EF08F1F51B8F2D8A71D60B58B190FEF9541A1BE94BC19FEA50784DA1419FE4B0FB51B8D36B5FF8E1286FD8AF42B91E59A5F1CC4D60174E764045FD8C57B18209B217F89A62252BD20BE0E63E12B8E8F029FE19E0E8D0870F58721A557082250D5424F79 +311 +09369376E41666C0EE77CD87CB283F661D5FB6D0DA023CB67320A20DC7BE661E9E1BFE5463085C557DA1FF9BE835733766C3D139F2CF9E2208873AD0EB4814DE9E6BF2CAF81614D4D43906ED1C05A3265CABBFE192770FC2F64F940CB6B17B5F166F133C9AEEAD2641807C3E69515171DD74C4A85311513D6EC9530B3B601B +311 +6BA3EBFF3B5C3D2F7D69765141E345F75433953D013ADDF8F6AA7DC3F4A7563FE5C7D367937E2900D7EAD0F9FC9A4A1A9B5BDF1FEF08532660C01C5D6DE22199AA774383E306DAB87E301ABB7D213887F9869D4942D0D71E94B27EDF216A318BD488D45DF84529EF575AF3C3938C0AAA0215B01994153E2054A0B894DA5C78 +311 +4980633AAD48576957CF4AEAEAFADC7C587368551C73DBE1E57C58AC713303A8BFC258BD04B51724459FF9E24C03A81E0E0679CEB9B348C0DC998FEB9C6D6EFA77D247CC8F92D3848599ED89A23218D0636465AD1CEEB7DC140D7426F83491C4E8E8281C2FB35240918FFECE880CA2A42D70E8B20B34DF5221C7DB0CF90ECC +311 +B9C745B37A47E9B716FF7A97B7A252C1F3814DC7B1E1A7F72B8751D524EF7CAE45B0C73B3BE7D08ED39781B380DDFC9AA4A4749C9493DB5BAD07A6EA6C092FBD0E85DB004DF06B8C9D3089C5320187E4CE1846158C7EA7DDAE8AD9AFFF21AA3A1026BB06A259845E8232DEE62811A4DA9CEAB3A4887320B76E2AE5615EAB7B +311 +DF738CBDD01F1E64064BC13D9EC53576751CA8CACD58B3CEB0E6CA585BD089B2A59B9FC101403387AADBDBE70586B93D64BF3AD4453EF9C3B6A93817E8346991798601344F79A83C51F3D50F7BF2683A3605F51A72449489E0EE6169C749C60B1035651103AEE24D24E51A759C840DD3FC6504DA6FE107510E447B43461C79 +311 +D22970B75DE5E1BD3007D1AFC619A4A4A69B5626AF5E9B8374E20677F77E2F8E73DF868E8BEC7EBA7B6A75EEF7205E1AB9486CB642741D6E03FF13FCCEDB1C4AC129886268B01CDF4B124AF797CF784F3C6DEC97A17D4B558070A0F1C04DA4FF9BDBF34159AEFE958479824B3F58EBD1E19088A2AFDE501B6F2052368A3FD0 +311 +E650A179EFAB1561E1D27527077136E652676C3670F42DCB3352F48F6BC86D2C3B0051727E41A0A4DC6CE2BE9D47F5CAA2935A3C0539AF080665997194ABECD723B08129CC5B6B21D2E7D54CD4D12610E7E9FB8306771A89576C7A982002775ED44F3F744CF21EEBB27A631671D921938AAEE3EB0D19CD1E083727F607823E +311 +817BF599DCED5394E37EEBC2E88782E638920CA641EF74D4CDFCDEF06F4278ECB18E31E7E9876F2D783C8BF429C75395F57E98C2B495A3DA077EB3AC3C158608B6B57FE3EA48484D9A480096FCEE0DE880950E7E5A5714131C5C41AAA29FD19AE81AC145FA1B9E85C7169A5AB837B213493DF7E9AA4B5FBF9CDEB36EBD21EF +311 +1181B7CF7366AB2A951D01E37AF4EB835D1BE8C117CFBE7625D2EBCDB0B20C5A4B45CED0BCDE3EE8DA9DA78C2E21DEAAFFD1197E463C33CC6A80FB785669B856EFF7A8CCCA2841B5A5369173320B1170C368B2748D81062EA0296E5E2D95D7667A4A46D98A6FF475C76AAB0A8C8D45E226FAFC9FE0133EA9F60111F99CA81A +311 +CE03A1D14C89E8B0D69079C91464FA1D99E651D0EAF606F345C42A8A1AA9BA391031582B96D5B4176A77AADB01F12FD298A75DEEBB2C82F0B8650E880722F8DDD90C56A7A058E5FDEF1AC93545BA27367C76F5D8F9690CB6F8DAE141EDD7971F0FB548A2AE435F224D6E5954CA155512F7332029D5A1230854B79F258EC5FF +311 +DB09F5F6343A8EB193229B7F7E79B3E48F8E183860B38C8269D1B53738FF1E0BACF6AADA6D4869E9DE708E79B5DADCC09B1BC76F649731CFAF59A83FD8BAE4C749D66FA87A3810D4D62FFE826FA400C0F325D2BC0F3CA35F5847B82A2ACC7961745C823E4D863D54460AF792CE6F79B5C7A33B25C3AEA6CDE15A919B6367D7 +311 +81E9D44F61BF828672594A3E1D9EDD6DF179A81F27EAC05B936575D73E05C209DDD2115CFB705DF9BBF3C911589B3640735E9E618FC9C36A7326C82B2205E244C55D56FDB9D5DC93CE958D4BF8174D2B3DA54CB3C09F2C2A6DFF73D23B2197355761AD421EC581284A7EF8DE2CE3497C0C804D49B41DFD6A7360844E5BEFFB +311 +495CFCDB97A4595911CDBA623274CE852B5E278AF0BEB1770E9D37CD977B2766A7DED0E94B840E1E95E8C77DE5CB6354AF7871427C28ADBEEF7BA0A28E19DE9ACD75F379FE373EAE6DDDAE3834692F9C2B03B4FCA8FCA9ABE8EEEBEBB725B88A7C90941E850682CA04061A7DF0CE82ED49BFAFFD42C309818FAE14755CAAE7 +311 +8B0F73243ECCCAD7DF58FCB9CDFAE7A4D3E6671A613639130D056C8383C8F4FCF4808C331E544DD26E4755D09EA05253B3049A1E32587CC25D72E073E2CD96D04A71BBCB0038FEC3F53D254199C3CDC67CD66640269431860225392B2CB3ECD0B4498AAE78BA1994246AE1EE78F2EDFB79F6C6CB6B5E279C4D373FBC21CB26 +311 +98C9ACBBEB6A4BB6B39E16AB0E421CCBFC7654D81ED86022F9BB522146F9F4772E2D0E4FA70120C95A85A417BF5078B232F4754363EB1750B2AC2148EB46B1EA72AD9B4D23ADCBC589D70106C3EC2ABEEED84DFE28E718C6C83502C28E9FDD3B09DA0A6F6F7B72B706A31C9E2A331EE70DA56A083D2177BFD63C55B11D8D94 +311 +9FAFCF90B23A1E24B9B5018B9A17E99F2890EC302F330FE7936E2C23F0D237EC8916F5166AB84B62A21BB0B950146962D754F92CC2C8877BED8FC7B7B25726DD19545392570B3A2C66B58F027BEF412E552D12A588C4A3CC5C3193FCB3485EFFF700D0B9EEC077754A33DC1FB9E25AF814628F91DDFECB667D3F7690803F38 +311 +D13F8AE39353523BB08FC6760144AFA2CE28236F65EDBB3D5F59A57D612B99E3D7E5F8A851666BF9B5A6658EFC96EEB37A378ABB0EB3FDDF1303AF32C41BD1C8560745D7BD81066B0D6313359CF488563D3BA3F8E2185D1FAA3EBA1397C9D0E3DD232180A4DCADB6AF25DB3AC3CC26589C8239E66E81547BC7E2F328F98847 +311 +64CA37EB5DBE390DFC03A5246B456A7C3684C4377D0EEF9A350680FA9A077E8B2957B489E09AB1AD41316944C2254B5984830F691C93CAA767EECF976FA5647538830B5E63236A6F0365C1E0F3E327F24FE35EDDBD7360B0F7374837409F7A6311BECC12B7026D4FA1AE204FA3F5FE904B1F420C7A9044AE58E403E7C4848E +311 +7DA25DC9EDAC79DD756FAA26B9EA83ACE8A214A2612A22AFA19DAE7DBAC5F8CDE1292A485F98DAC731A29FE01A3966E96BCB9FB5A4C8830E1B9AF0C54B87FBE221A097036E5D28D1F869F810C06A9BB0AC0612F69AEBAF893C6E7AD59460208BAB3A6B09CA4F6BDDAB8CF0D1F84B72487498395A70DCD754796E271099A567 +311 +A55CF242BBED64696378BB6CF25EF0FCDB589F3A82F1116D010A9AB9FA4358809EE0C973A2B4229BAA876A70B03AB49CBA7FBE71DB1832FFD32F9BF2C8E98075CACAFB36921235D0F552B6A67E94E094097A5D7DF681B40623DA535ADA7A9AD8E9A62407D7C9A5AE51D62A17A83A23728DE86BB56115804D3F2675F2C6B875 +311 +41A0FC497BF0CA86420F558C9859EBE9FAD62747E323E3AADC03FDCDDFE7407B09DA90B44E3185723C5381EAEF589765E2F7A099BA46695BAD60CEF3491B8A171F5F56444F7CE9455312C3498C74173AEA0214EC029833B34B650CBB5A5508D5091665309642791708ECF27CF11DB3D797D6CFE474453BD4BFADB768094B21 +311 +47814D81C7CBAF8228DCAF5564B5891F5EF6A860EB2E323CB82AB868D8EA048880D63B0DE5341F1B3D53297B928A11E15F25E5148990F710747C3509ED14909C552EBE3973246FCE55D00564D8310BC3EBC5085D08D806799B77D6C57FDF5E55837F9E934F09C03C729271B64F12D0A9F9E938107CAF7BF1EC8CF1BB9B4236 +311 +3D33070F4CACB425E605DDB0A34A12BB936DE286B9887A4E2E558F0886498BFF49C311D96C277CF6A9FC0D75AD0ECC5226D7E0E3572012E56D7FDE4410CEC7A6D0F997F225A2055B8B92E3956E875AE4993CB3D4C9063AF98FD45E1BAB165640A43439A2C9181A7C355B297C0A0CCFFAE19B6FA3C2BA238A885FBC98B8F6DA +311 +F4B94B97304878DF4D8BFF6A4AEDF79E90ED4E68F00CD7299F4E0D83E35601AF0CBEF18C1E870E74758FA91F5131075004DB3CFCF09AE1DABC11957FD9808C92E8A678CE9DBE40DDA0E0D1D505AAFBCBA208232BFB6FB3704E8985E61ADE53DE74152F5C7DE74B1DEDCD37DC3E8FB30D7EBA8B9EFFC3606BF90B8D438279CB +311 +7709FC7C00D327F41817EEA71CD9E49FE9C8C9A81C70915D9F0F15958EC5AA4C3BBFAF46986B90F188BDB24B89DE3C6F29EC3E6F66D84856EE96A35E657CA41B41EFD8DBFA16AD6E91439EA92B40B21C053249F51AE50EB0B24C770FFAF40DF12C8436366819C48E36547D4E7B72FE2BBF10828583057814A668BDF183F6B2 +311 +E58DFB151103E56303E63D00F39C27C4661605DB644D19175D02E3F0241E8FC3458D17AAAADB117CE9EEA690D0DB01E634878C04C2C9310B69FCAB831151E3AD293BEF6E46B0ABCECB50F5939B39C613D41E81FAE8D34CAE3C4566B761D37185FE864AC32FCB71AEF39DAA5BAB88609BB980CD2F07A8F941653B529567726E +311 +2B2A58D079DD57E1E5E31426CF184A04D7B03B985F276D47406AF276FE32E3328BA866EB1FD39BEF57863A317634AA5FE467409B3873F5069EF0D71AF00AD189D17BA1974ECDB2D623E9E14086386A6AAB5807825C37B015BFE892AFD154920EC437EB945D958E18622E1E0FE2FA06557CE4BB9BBD05A2D40E774DA2B65473 +311 +791E314B7D6C886820B2FCFE4AA272B3B8B15E7344A145E8AF919B5454D89D36D413E87211186BF6F645E5EC94DCCE8E1C799022E4EC9BC86D7A0F2AFB1FC4B2CE48F84B3F49ECE65BAD24CADCC07EFF39AB06BE9E6B27A059938EA7208838455383DDBCFCD967DDE4650EF92A14FF933C975DB20BD7FEEBC4487576485963 +311 +D757D16340D9599FEB362F775F38CA4185A86F74B629C81B133644A3B18FD056E997E0734F9BE26D11C0AAFC669E2AC9FC41D281F8B2E1C35AE27BCE05F3DA295488096688719D974DF1B5D182DB7792288697F8763CFB43562C1CDEE11C4AABD5C22B6E33F6F389CFC3477C5919DC0D533F8A7A1846B7ADB60ABDC26C43D0 +311 +CFC8910B7C15EE22675BD02702ED39DB77A87A192CA7A543E6205B979B9F5A6B512A3CA799E198B2D5797C0AF8D1D872CA455D4D431A7879D4DD76110B5FF7F4176B54477A9EB5E4A5D11214FDA585F0382751D8E2582BA5D2075053298FEB8F1537304E32CB22C2E2B693DC0A760B1DFCA751BDC445AFDCBB12820ED85F6D +311 +5298933C7EF1211E9E057684056CDA3FEF3BB6052355E162DF27C59E965A8DDB7F9437EB72CDDA3A090DE65A5B2F50326247B7EC67B73ACC7047FC9B353D6EE990F772207C6EC52B39DC2F3C0754821DAB559F7C1809C7D0DD5B0499D0442E0A6E391B3D5DB46D11E731E6794EC77523FBDAA242ED67F9FA1FB684255671F6 +311 +3C9BCFE6E7E896D51001A6113EF2298BA494E0B0980D1FA5B9D60796554C02256B1E0345FB7C6186B6A19D2DCA270416262845FA4F42DB5D9B0A0B6F07FCA2E56C242522E001E0CEB734AF310FC8BFB57E38E03AACE93B3326A2197891E68452B26A6307FDABFEE0223D3C03C3C73D2D5BC054C8311F12004CAE488E5C2928 +311 +7F8156A2CAA4AD0D7BE6B97264E4139F437CE73ADF52E5134C52B819777C18B323A5924E4F67AFD13B1CDC3A61793A79FAF5C0CEB718E441071E797C6DCCB9EFCF7E4A1E9F3DF3C2F9C9E8294E9586868788C972857FB0556D7A26941A7EEB9B580AD78EC40B85DC906B4120A563CA3B87797ED612D3B035962BB75F6515A3 +311 +93F4CB057F564CDF54F2E5A024514E6A1F901DB80C7E70B1FC05E356A7E72FABF4775B3E3FB8F70A2A8E7B6A94542BB304157978CCC999E707A29CC795E67A59CC546A5D47B368954CA7B6E75EC9E1F6FC73CE3B4F71F8CB1A6B15923D61EAAEB14626AAA9D04A26EB9C66CD1BE86CA31A5D8703DE04CD1EBCE4F5CCB62F93 +311 +909AD11E55799A781A956ED27D3E738F4538CB04ADABC7DAEF20BC35BA6A90BCC1DC61BA05F20D8832FFB9BC9B15E2DB838A0AFBB7E0C82A562127E0446894F427794C3037186F622BF24DE1B00AA10A23BFA47B2A180D6DA5AD6F7326FEB8C100C2D7142EB2A0B2A9D1008A09BA343D70E054AB69E2A7EDB783CBD92537FA +311 +F4A44D1296AC2792729104B3276C276C951D0CF3CF3F1E6B017720A7B8505A5FF9589365979678C36F1BAF759EAF57C60F1FF5FE9DCF5F8E764FF25A2D06CF25117A8FED51884C13B2B750DB0E4F5E3D64124FCF11F0AD8F1CC3B3DA4B38ED22BF1CB2585EE6BFEBBA63FBFD44F9537B9B37BDD6B358720F98A8125AED4349 +311 +CCFEB0E135F19E208A04CA7E2B10711185D72E381F448036EF57C9F874E54A971CA37A639E986AC0226DC5AA00D5B14FEA9192234B3DE617814FC221C92F33F1D392F297731B567FD98FD91D989379AF567A65B8ADF177591DB90FBEA99BF4ED11B16E50A0AB1DBF1156D034BBE04D69D08F939D8E92BF525A1DDAFF80ECBC +311 +95D8F45D3FDD289FD23F7D8B452F8EBB34EC082DEEE68E18EDDF072060FAD2AB1504DD4879BF67099FC58F6E9DEFBF645D16334A3E9A127C6F1AF6132CF287E433B43A0EE93812B4AA0B194E03EE3FF91EF9C6ED0074A2F6EB18A96A7C9890B1FCDA1F2095E944DB911ED54C60DF16FB74C8CE9BDC7C54C4F14078CF73C2FF +311 +F1F1BBCCD7CF64F71407EA1683DBC410D226627F66E509060D5C0AFD611DE681D509DB8DD12FB1265B03C6F5C55FF4C30BD94187FF692B4F152982502F193098A789526A038AB529A52BC0DC4FB6285CBAC10A8B8DB75DCD9BDABBB221E27D1F8DA9F5EE5926A1C8AA9BA9BC09239C6A7F12914EA3B59EFF7AAEC3FFCCE56F +311 +1C5C2980AD072793527565E774F4631DB178CEEC691B1F367BEA0CF2907E1D6B854D527065979DDEF002D8B2ACEA7CE21AE297737EDE1D45B31233B73FEA35BCFDD0B09721FDBAF6432681F2FD10C3E9EFB246FD6E854B344ACC9D8A0EEF876A7314B49B6A499FC650B099D650DBFEC7638ADFD245E2B7839DA5AC5F7D5623 +311 +FC0ECEEC8653FC9B2BDD1AD4D00A566FBA7186DD3C9CD26512551637498CADB950FEC71ADB9A5524285DE328B8EC7EC75D2345AEC6A27C42AF6D9B92155315C80DBFCABBB7DA0FAE425C4FB896B15C9BFAC4FE67DF5A23D30C93DA4D8F36FB15D100050DA6062E22AEC5F4DAC4F6FEEF97AE05DE63C6D38F9E068A20BC5E3B +311 +6BCD75320C5090924E7F93640A7735B1A43451C2D91EE62C6238B797349E59890AF3A520DF4A87095F3ABEC2E61F0593416CE46CDCBE0E00E2523FCCD04408588B5B6C9DB6459C786CE378770B54F51DA3A5E1DF2A3349BEAAC234A6CF8993B598B3B25B4B113E353A4D750FA7534749430F3EBF2512E7EA3FD43C6AB9A1F7 +311 +65A58463B306721A15D224FAFE8C6F5E3432D57EE697DA0DD5A9D4866A8BCCAAA9DFF1F06047851408FEC060471D0E3EB86BFAF46E4B5E60311DC3E3CEA147C75CF971BE74689507154FF2D2E92F15CDB2B9182B11459FD8ACAC5A85F174BC94A7F4EE4C4F5CAFA7C02E37BF0BC77B7DCD0C047BC316F562A01A441AFA7931 +311 +CC84A28CB9F4AA367EB515778F29BFE61195FA671F4352E5E46E3A64773F1F76EE5EB36D7BCE9BCEAD837A4D77F8DB8C92AEEF6711920D7C7D0F76B0FD0EB7AB83724CD35BCA7D36DDDF5FBB7FF6F04A91F3E2BB3B8F1A43CD659639507FF6331C5F697BCC782AE57D757A27D97F1AB9E0AEDB43F92F1B2AACDF5FEC8ADBAF +311 +9F814E2027003BA2F9E144B1938A7A04050AE5D953B82C45619165C813A10E76DD6906B3C16438064D14CDA713AEC420034613E1AC7241904A49FBF87409AFB1FCB9B72FE7933A87D8FBEDACECE4EDCF6A4FE9FB94D5DEB74FAB7CFEAE17EE965DF980DCCA2D04134994F9A2E94D2265DA4FE6AA7B7AC15FACAC2B5ABBCD7D +311 +FF542C5314FDAB2E1B9D8B65220B8E2B638BE008E8DCA22678C820C5053664D15E89F2D735B51A84955E81A443545E9FF787BE0FA700A76D136C27DA179A7C6E8939E01BE756E19CB292798063D8B97F44E8A27BCF3A614FEB8BE974A718E86F7EC99B53CA35FA24F61F2B07266684623A3D4CF073E511F3A10A8FDAFAF007 +311 +8C577F4DF9D339FE7862E5FA47CF4344209E5BF76D783B1B48E152AD281B15FCB934DCDA49CEC5706B1EE8B460F435324A5CAD154725E21AB8044B75A557A79F6C807B9340AA3D92503E866F4274412926C8C504E4D5EF8C0E68DD0B028781A6B4054F11CF18941F101C57CCC796773ABC8DED9CD91FE5788806C05E548895 +311 +354AEAC96546D55B0E94A59F148D061F42AA398D822CDECA4CDE79E13469BDCC44FDC990F366BA5978C15F97ED80CBFD73B0CD9B8B83A4F6845BDFBFAF034019473FB9A63BD55D3A4A7284757071574029A4D016DCCBE95DD679EF3C4880BF169422F8C89B68A988D2B13793CAED4F74DE7486C72DC94DF46B8E93D8E02EFC +311 +B1FF9B3BA10C8AE7F653DF94F4AF466CDDCEF5776687F7C4C14B63E4EED1719DC2EC482D7DBCC7AE518CDE3D5FF86D39000EC3673C0044E1D308BF05F74D1B5F033A7D1BE7F74BC55BBE3E4A20F920946CA0271EB17BD2B80E5660ACB8A29A79F5E4BBA49D4D945B6EEF4A7EFEAA65E5555BBB57A7E15D2F83C69F30BBB978 +311 +D2B39F1F26FC097424D39BB33CA3D87ABF64E307938B685BAD44F71556A30B7E712CA4FE600613C3E554B69ADE949A7CFE214DF1FFF05CB82151EC6FC31950239F94CF7AD39DC473F6EA356E5EC2C4EFA04383CEFE985A127484366FBEE3C0EC4FEA363E4F6632AE781392FD45D67B63FB8DF70E82734F431FD3443172A0E3 +311 +0A83D60982D55FA6A2CF86DBA8382502ACC6CDEF3B907982EED1160E14863FA242F9757347E1544275CCDCF71ECD5F8621CBEA326B8BA884AD7F825781923E66971F04010D574C541D8427A438A37EEF8AF88240EED7362C953F5A81DE2D56109CDE2524EA0F5D2F87308C0C47BD97AD605878AB8589E17CA83930CB5E0DCC +311 +D75853D68B1AB136594926DE426C367428E9334AFAFF90ECE221BB5DC9E5BB53D2CDEF954EAA9CD814F0E5725F1965DD458E5F8487683AD86B9D0076BE3EE91EB1CECC5331A67A3F79D8B27587C12EC2A6A70474749F27B4C0BBAFB94B34189E88DC18964BE4121B9137FD516C7755356E50D6714E31ACD222621EBBCD1CFF +311 +81D87479056A9DA0E0B8EA19D24CF937DA89F78E8650CCBDC110AAB6C4E46DCBFD0446BA9E2060E81F314AC2031E88135E5476AC0160EF5C0DD2EEF1B8B5CB2D198BE9A554A9093B5F7D7E4B5407DDFCA1D9C152FD97F55BFFFDFE802954DFEC8995B983E28AC92F1971E28F531DC407A1280EB125F64A72E617EFB27DFBCE +311 +DCDA2D6F2BDADA36873EE46B9BE1782998C63DA7182BC383FB6FD15DA472B175D7E8B4FC88F38D6E07FEAA3FA3CBB8F6B449ECF14D2175E5C5CCA3A42ABF24CA6C9395AF74535F4DDB38CB84F56614B0FD32D7E19CA5CF988DB4449C40E23DF2B16772594554579094450F56F253CD25EA7F77366FB1CFE79696C428BB64D5 +311 +A41E986189427E5E4D7E2DAE3D5BB4972B3DC44EAABDDDD63A2264ECFA5C786EB0EE1FDC5BE34FA0F08376869FD1E61EA06CAE15191135445EE8F0394161C3266A596AA035572BB0C8876180D8B9C77D307DF9DCDF7365ABDA6F3A2366436457A4DFC1F259666569A9E4A79C817BDD5610E5200FCE894A358EC72858D50EF6 +311 +7545DA81C6FACE3D457BAF70367E1E6BDD9A952FB4F56247F58F523B97E640246051A72F79BE42FFA0B3187F63097F91C48B868586F714B0EBD5A00A8412C1236E1298F60C72BE6C96B82B404CADAA304AE9F303176B14BA53FBC2D5E86377E35542019E24D97B96A49B2C0E5006E7795954DEAF5DA58958839043C6C70BD3 +311 +B1B33B6DC5C31316D8A6923F142E26F6711A2258AF977DDF1F970ECC4F1F2B434B96D81BEB6E89BF3BBB3C7C8CC80505070723D6D7D7D3C8CA27CA164A26024FED94B12A86031867241DA53D929636DA600F050BC40CE48B8BA03D69224720DEE2ED2127390BDF5E6EA64527BBD4C4C63FA76BB801FEEC0E61218EC98A8A86 +311 +CD8313781617877E66692839B9468CF4DB8E50A73986E558E309C0D6F676F921BE02F1185454DC75B111572FF9D27D85EA14C05AD7271225B391C4275659CA4A43759D0BA44639BE4C30A84DB7F67A41399FB95CBF923B1B1672ABC807C1590557FB18D811983FA97F5E609516D62281D38B1281F68FC75528C35E4CD7DF0F +311 +7DBB5E5DD69C414EBEA2F4A5B241B996BA77AE6C772E367408C633EA3E438B68563EA8BE7667F3A4C4FDEEA52ABD78A2820F443B7914A15F180018D231E64519C56A12F6CA7C8DAE18F06F6B769DBF92329EF6A5D18FBCE600F36BD8E8198DE5CDAA96181F3A756EBA5501CEE58F497EA4F418A2B82565B9BCC611713C0B70 +311 +8CCA1F398B78C5F7D03B3437CC18F13061F55C7BEDADD5ACB1DB0E36D3CE47FF6EA1A563A57E9649EA5D14D1A50EAA457463381C073777EF1600607BAF6428A7DDC079D47A204EF1E1F1F0589FB054D45E02CE623B3823C317C601E589E22B1E88B448524B86A82828E32345EC18AE17214B42F8C41C6D428016D9BA31DDCB +311 +47572561E5A402E5BA4FCE55F78AF7268524AA04130F3A20BA5D1E9F9948EA48FC8F5314FDB35E21898198060034ACE5E3E2BBCA34092518F275190AF65F45867FF0900AA4B81F25427414C372BF51DC29AA855C5428EE1EEDD6B849AD60F6E73475C2D2523F8A2772C840A478DED18A8C5C91B085F255DC4F54EA7AA89473 +311 +54FD17ECF8FB3B4A0DE7B483CAF3A1165EE05BBA413E5C1FEF3DE1D6B8F2F3F3251C17D9FCAB48A9AAF63AC773A0E413BBC46A9ADF84A566FC920E4D8C52C9769EE3301CADEEEDD92B312E02E2A7E35B7F1E7D203FE5A7D75578B06E99D0E46FFADB8FDA17ED8880390DA29094202D6F645F76F6F96409CDA05495A96E84B0 +311 +4A00D1A6C6C81D7F3DE9376E828CCF144EE50E364ACCE7237EA0BFB5607ED1AC3CFE73794E5B61739D14DF1743441B1AC98F00ECEDE9E7301FA29755FBEFA68C91EF2B314CF510537EF1ABFC9A762496280B546F5EDAAF8A5B387D469FC9A878A92828C88608453ACEC6094DCA54111E7AD5B2663DFE2DD151B7F123B9F4FE +311 +F8EE36AB125FD7AD52A59B1B765B3E3F73E3F73DEA93875004D2AFFE3CDE9493B87A9904DD052028949041A91DC0E1BA47BA714343FD5B25E0A6A09503AFC17C790058A836A324FE31D7893512E28230332F153181C1E018E1124EBE1BA262AA428A518237D1EA7275E48C5C561BD19ED6912EDD8367DA0F31E40EEAE9683D +311 +A9257525AEA7B632B97119E17145A90231768A4F3B9120FF32E8319B015E3CBE26F1A754177D8185345817C096B0CE443A955D13AC15E1FB5DEEA0239EC32A3C92241A237B0B02FFCB4F93CF2B02570C8D192E2F2A68CEEB42F12E6F8CEEFF46C251E22B4341C56FB08CCE550E7A9D6F4D6564B9EA52A83D5BF2C6E03FA19D +311 +2775E15A8A7ACF30A13C259EE7F5EF2AC3BA354F1500E1A07FC63FB4686E2F12EC69719F9ECF5FE3F35598DF2CE944008CE78F0911BA5BE5D0A34E0098FF038669C26030BA9B300303039852A8F6F496341737CA7E0D2E3AAA36DE0A70AA7D9CA0D54D9AD84B18A44C9E625475E1C97B93BEBB38DCE7D227E67A2D00F53143 +311 +6136355F243D1FC0D712C5765754FA22FCFFAE97919161F46D6E61ACB37D83777B385889770B50765B127768443A5C4D3A4E35A3151111F146B7CA116F918A049F1C272F2CD7976C69A0068773451659A97E0F4A08FE604C3FF6CE7385DB19F4D3ABC8A0D80DA8A42096AC377DB49382B36E270B6FA7570188B4B7D1DDDDA8 +311 +2ACA487CCA5D38BD3BD039ADBAFA4ACFF27809239B722081E2EB9F145320553D183F28471C388BC8814E5045676767AB58A8E72D1CED2CA731379515D2E533E4CF0B39DFC625F97AC4836831A4DE330E87A8126FA17EBE583D614E71E22A8DBF2825599743E0640037303E8E1B1E8EA4E1ABFA4F62907B5E4E0E5DCFDAB417 +311 +C36C6848A2B8D15F1E505434C0707E16B1CFC2A1C36A42BBF55734F8F4301DDC2A5110CEE8C0747F69519265012A2174BF4E955ECD4FDE095A3ABC70536B7AD0B9D7892F81287D667C108703C9B66A221E9A0929D030008F77FF6F5D2108EF5706FC87A3069B976F7C9FC3239D13D283CDEA83597461079FEEE049B0F39288 +311 +9898B7D87D31F8D60ED7B56B91823A8E4EDDB36C6172ECEE42BD42B12CD67994FA0F0DFAE9389356F4CD4425A4B8AA55CBF7ECD585C6A2C2316791E43D5C06841ADBB226A87FD61515FFBB0167B74E56BD7F3E90A57A97FEDCBDF483A0D6699A8C0849CAEB4947FAA90D8E332D9DEBD9F4738C37DA0CAF9CF3DAA68BCB67C4 +311 +20459C7A64498D6E848E5CADE92BB6901F607AA331104A67F7CD650EE169B1DAE94D2C31C2F993632259B6957E246EFE4C5481107B07118607700040E5812A2A2A38DA0076875258C753F60E0F2662C748EDD5F3F3686B8FC3BD6FE631ECCAA1E8B1C1E565AD117E54893E79F4672E32F9E46B2A183DFDCF3EECB4D4D077DB +311 +EA0DA254D256045109670050129E9B9B1A9E4A11344D61497A992778095151510C4BB7EF2009B63AA4360635312E4CF668B7E0D3D85A8688E2BD83B569439892ADB63461930D428E0DE42E4AC57CE48DA5CC1449530D8BD3D6A0F08DF20C8E8F570F2CFFFCEA286E30969B4654D498A58D9DA782E19FE3F002181838925592 +311 +C4A1EF0B332D88B61A92C644547BED490D3A42CFFAB70E36D961F694F6307F72FF15A1C79D5B1B5CEFD353D9E2B52566DEC8F8F09CB3E8359C0F68EBBB7898243E34E12A015B2685AB303C04D3A9E00671FF3DFF0A184E4A2ABEB2B666AF5B3A209C73D8EF29DCDB069C9F391EEE9DD0F74C7BCDE16F8F02E3B8816122BBEB +311 +50665775B600549D8BB33A54A6BF940C028118BC6878C79958D6784F9DEAA6E26748386FFAF8D0D0101E2847B6563F5D8DC1D78F787BE00E2C941AE12148D4A81599FE8F68D4DA5CDED75530ADE138240300EE13B0FC13A1687FED6774662C05A2B7DFB186732F0D7A93545D8B0A6390AE5054D9CB582DA846D7A061B3358B +311 +45E2B52DDE63E114397EDB7E09233A579155D795BE76102CF277F4DF8B188C4F2879BEAE3C08347124BF9ED23B128259FE107D31E34A652F090B30B39E0D9AF917B76A2806135621A8A60681F16AF216514BBD02711585B5B1AE823F4B2D0369EA5B6BCB863072727FFC871CA6C9AB79A814D989057E9470A3D238BC87CBB4 +311 +A0EA49AFE2B86F22E499793CAA9047080450166BDC357524561E258C77CB697F1ABB32562CF87C3B7AA12F911EF19FB3E5C02222E887D08202A60A17151F5E053A86B437771088B4FEE14D652C43E8D939995D34545E12E2FF93D4E366EAD25F10CB7DED141563C3D0C447AF06078A91135FD4B9611583CB4BF3BD167F2399 +311 +CEAB0E0100F8FFC305F00F1711717173138B4B48C83022295DE657EFEDD97F238ECA80F528AFB4F8D67AD4E2594B9A3AA86D7487EFC313BA95745C186F0CDD84CC12DC9CB0424B42203D351FD9C0A3AF10CC7F388E0329279087386421F194F4A29464C1DEF7EF8BE515E4A199DCD5B909342598D8FE6A231F71336248D5CE +311 +C5454455C7BE383B3BC7B260FED27F703FDC39A170F3827239102F59D4DEE7FEF82EAA1A5E4BA94DCC4CC44E7E2EDE20F24244E4454369D2E87C3F823F193FD4FD27E1C23984B01898D15ABC20711A8A558054951A6AE280096BA36CBA439603B7B0B4C45F248C14B2383B4B5CD8ECECE4FF859AD4A6CA2326D020EF090F40 +311 +41D28DB66E5256B56232CC52829DE8060BAE6BBF37D4B7469B822454FE93210A3E8D15E69FFCF01123222611C51C4FD0A041A0CFA2471CF6BE38D2B20FA4C3525B5B8B586759475CF80ADFE67A284AC24651E52B8E683D24C2622642F27E7C3C22783BCF63648BC398BD6CD0D9C97E7E7E3EACB6126DB7A6C1FD9F1031302E +311 +E67ED96F22B77C7CA0239BB324207559B105E4693EB26EC46182A92C9C0DBD24F29B31C5C5AC1F84300E0E17CEEAC15F5736FA4A98971E2F1423BFCD68D4BBD5F86E74B40A369F39507C88FCDB35D2DD8DEBEA4AF999E23CF2816D204200DF6E611781B9884C1AC8888B4DE397320472959434323A5A36B22A8E1F721A270D +311 +F3BD65E4A31C11FF048AFB0D8B7B6881423793963A23CFCE935FC189ED36FAE35C46DA3574C979E4394BE52084F3081837BE033396D2EBD80F1F691B273F660D2B32FA27A33B1DE4ADA5F0FA4651511102DFA410DDA86E065272CA314D5249DF91B06BB92807B28EFD54F08F7B525252782CD276DD02E6B0319B13DF87B1F6 +311 +361AD6B28FC0D711CF445429B9E5A433CD493051C49A9E03DDB1B147D880253514A5DED88009018620EE229101C041950E2D8AA8E1F5F5438E0C0C0C60EEDEE9E3E0C051948C69F84BB7B2A48A1F3C8EB9E6864687F4F4F6F6E2FA87608ADAF9C5E117B7C1A737E710769DA1D15ECE6A84502AA855398712D5FB51BE92E4EF +311 +824969CE18278798AC303C2C7980DD2500ADF8FB1E6D6C2FAAFF9987178923334A244758BAA01A9A1B70FA5097D01E1CC2A58DAD0EC94CE6430AA9B0C10D75E3C6BAC670EFBADEE1607739CE0FC18A2587E3EC3058562014C64219C69BC269082D5C2F4A659278D585755912176D78A1B641719C2A394CED495A1AC5D583FD +311 +2F5EDD93308EA7EAE8A6DD396598BDBD3D4CFED62D18A5BDFDE0DD5C80D1A89BA62697B131AE7CE9A6594138582F1B37D68F1749AC7CB67A70695D48A4A056AC1FBD4E82358CEAE38F54B95A9016F9000F9879C0D9D131768635CA798895F27D6F1614F11F2838A83611AA51C9A3DDB539D42979C29F10465655C17BEC3E27 +311 +60B80DCBF609198C7B171A531905F3EC218D696025975E986C6B4C666666787271F202805577DD5A3EF0CAFAF91B62DC4B2DB4217A7606282F31D8DDBC290593BAA93EA6353AFA9939B877978481E15CFC9F2755CDC00C538F63A4BA3E80AE009B73CA0185687D339A507D165B74290D6EE46D5C58148F020C3668ABE9EF2F +311 +7549170DC80DB41FFC1D678FF19AEB10C7133832B104B80F691B3138F97A92D26E551F1F110400D45AC71A9B9AC41A1A1B1DAEED0B0810638EFFB511D46B121C6FEA0F38CD00E03CFFEB9713FE1F9C263E4DDEC160D0497FA9A132BA608584057FB15380825DE6C7FC3C667EE947D488A09898D8E939C4953BF4EC9836344D +311 +2CC6B2971B2A21A572B06096F4982D2CC7232D46E8EA69DC83722E267754D777F97F96D5DA74E1E75178084D0E70F12AD33E5F71EF2AFA599B2BEBF60A5BE475F444F240CBFE8143C334E7ED9150FEEFEF7EB020C4DBED388DD1D6A167A76F3CBF119B578AE8CFA7736ACAFA4440A1C47185638A0D2F3EB5BDDEFDA958FB13 +311 +CE4AA4923D5BF840392D45544329525749734866684BF7F8D9D54D892E19BCA9F829A0F8BFCBEEA6CFDFC61D74EA1A645ED7A1FF241739F15694BD835B66FEC5677E40FE69BD3F91AE402F036537218A401CB0828604AD189E575015C6F3F6BBC8AC79CF6C70653847254B31551EFCBEB5978B9DB85D58D0FA41A9DFE9C624 +311 +834AA04949D24B5AE6D299E072D152D12097920F14AA92C31C3B97E28B6C2E6E9C23D63043ECBBC0A60FDF5BD0C33C127EA8A3308B8B6AFFEB28B4455BF6E7AF4FC6222728357EB8E46E85053E6A8843AB23295BF838ABDA94658FEF3F832F147046B4ACD6F7D48E8FCC9618582961C898D1C7A253C91BFECBDA6BA18A1FCF +311 +70755DCCEE2222F41B76D23CA98D0CB3D95F0CF66D57FFF65E2A90F5DF40FC3187621E981BD0BC1D992787212688976B94A8F0C6EF646624B570B78E068826F87CE27041A95C9A4871FF65CC17FCB1639629AD6A9517000D63AC231F3D741CB8430777E7ECF80CE7A3F73C0F162F7E56AA71F4DA80A33CD6ACEE78E2C11FAC +311 +03DAFCE929B106F8F6B3ED2DC71FF994BD9CEF4E9A94896EF1B6E2B7B4978168BCF0847A3D2A4F1B0500B926E634B174548E9FBAD27153FB5FC36799B1E6C7C38A94E1F9E996796D7B485E635D5287A2AE76FBD11A341DB3F8F810385BB7296391973DC6C37C452A9305AEBBE0CDB6C566DB59FE60C8E94B1FD090354BF514 +311 +39FFD1B48D725228FFA88C84F686F547107A7A235665A4593B7C34D748C1AC8D56DD5DA861EEFBADDECBBD65117E65851F90351AEB65F0EFCFF4BCFEF24CB7A5879699FAC437A7AF9099186CF006BB923A59E37D7A36A29FD8D2CBB914A5E9D0A8FD212FBF796AE9A67958FF1D5D8B85F78F96219D4714EB919929241B6C01 +311 +8AAE0C02069F8D919961EC5DDFBFB7573E3AC8E08BFB7C8534BE6DE045B3CD63DBD71F7638BA2309CAE398EA3A7D8F98BBBC7AEB367EFA5CFA27A9F8F2F52FE878058E6209C026453F8E7E8A237DFC389E9590F6059B397CFD65183BBF936E86896612A5B5FEE49DAC8455D026218AFEBEC12B3523A45B57B82C9C97E02ACF +311 +A1184DB18E48CF615DBF39C3CC6F0B4AE6BBEEA2E39D944E290302FA3DE33FA7E40296E2EF7BF1CD855BBECFAD0FD622BEE9746FC4FDFDE545AE6E3BC234CADF83A0FB76DFB145BF3828AE3436368AC24989454F8FF70A177672C711CAA1A76107218CF948CA01F873520E7A2B118EBB161ABAD432932029628B6761590C98 +311 +AB590C8C8C79798CE9F715BA696E839E9131A4BB68BE923F1747FBFF165331FFDD4D05997ACD168F12CA75348DAC04C7F509FE83898A8B421181AF492861CE81E4A2DD0A30850CFA95E05F097FF70F9E777310D584A75BA7018922E271DAB1D785671157685B7D383D3E074DDB4F1E44EF04B07BAAC75A062077C54B9752C7 +311 +38C9D804D402E02851F3F89605AF189738C18C021D2139EAF72513824E10DDD3047BACC8521ED7E98B257D1166903B1B08FA6F918FD7E162913FEC7D0EF4787E29C35FBA8C6E2C9C20E9AB30AE42CA2A01A090E7D010C1B5BF9CEE2A304BF3A987FB40D836979B79E18D70F257DA61E808472DD85B82761825779D6B90CAEB +311 +0F23360C6F80A7D7D77545E95B3DFF0CF96A827F9B5BCECD2C9698718417EF80FEEDEE938AFF55859D0D540B7FE09435583A6F04874A0C7E8CF234DF4879722000167F5872CEC6BF3EF7E5A8CC8121E6A359227C8A29C95212F9F735BC72A887D56B8F309FC525BFB4FD767AAEC4AEFF249CFBBD2DE1AB9969A6155C7D8DAB +311 +C307E47324C1F916C7BCFF40ABA5644E9FFB9238D19ADADA49D9610F01ABBA57E4DFCBDCCBB2B93C8953206C91DE01B0E2651A6D6C31721915B31F7B7CBCE55466F6D70402788FA91D73BE4ADCBA99A35F17D6B83383704917D6833F0FA3CD45C926ADB8BC17999A4A0AFBCE2541F7B8CF4C2F5FBA611B3E626D64407CB32C +311 +122DFF4EF8674D6EDBB86C8F7C6A16D50FA685E2CCA34F8F7D1D8265BB0042E9D7F1F666F7BE5FAA5184DF58E12122A42EF02F461B3F369AC746F96528AD208512AB56844CF75B97F352DF7995024FB02855385854F3798670D01CAC771AC3E1889EC25F61A20C1F8CAB46898817F9C47E2CDA1F286BF2F358298709FE567C +311 +91133E2638C8B53975E753EA8BFD3578B5F7186B7BF084EBA3F77BAC3132A5779902EC22AF2D2E79F42D324E083386DAEE9810D1B44A5DAA54513C7A71E52A4AB9257D975B621308FE4D2141CC3DCFE946C154A3C1DFCCA7629EC69ACFA831634ADDA93C0388D2A9A2DDAFCF957C6995BCE7FBB6DC4EBAE79E63EB08E9A25F +311 +52F67076F7093CA545CA3053B5BF576DEAD4E0017143C5F759F32B2D6F145B52B67B48909B7C7FCA6586EE385A2189C16932CB6DDFD9152AE317C430492A578ED27B72D85D40C7C93C097939E1B50F4D67F05334FE9DC362C30B7FF561B95259138ECFD9274C8D695C31B14D4EAA9F3D7FA8DDF652F8C5DEFA23284C799B7D +311 +94416DEE81E05A866302DC70192A5368EA65E1CED8BF107A1E2D3119A71E85DC1A7B0C1E93274CE04DD0F2ABC8AC7C987FDB002B6F81757B43502EF7A0D92E416494FAEEA4C9C090CD9557AA4D532F4996A272B94355C5A0E4974EEA9627476F30809B94D8D8D860062E02204643BEC7D0438AF800FC7E2B26955D595421E8 +311 +3C69E1A07E0E3122285835F014AD538188CF9737CE76D464A353FA55A001AB2526B84E985083693BC76FE211CA1D000679C889E3C009832C87E1AC2EDD05C302557422DF0800E316FCAC86978A371F025A6C7DAA9F333E7BD160403A1A06EA75AA9888FF01504B03041400060808003D7AEE4A28BB58AF800100009E050000 +311 +3D00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F436F6D6D6F6E536368656D612E786D6CBD544D4FC23018BEFB2B96DE15493C78601010A34B880709DEDFB52FD0D8B54BD70DF6EFED3AC0B12E6442E2716BFB3CEFF3D18E26FB440405EA8C2B1992 +311 +E1C323095052C5B8DC842437EBFB673219DF8DA659866649B798C078B48AE6410122242F2A4994AC7F93815DF85C049C8564CA0A901499DD886B2EB9B1E02448F358701A9235880C49A0119892A20C89D1B9FD768815CAD268CB5E0355B40B1E47F3E37A2020464BED06AA57CE8FCC20C3C3446D46761A2632A8C1283D0703 +311 +1EFF2AE7CCB1BFEEE916E406DFAC8E36FFD99A9D60A6944090EEDC3B670C7DC13DE86B6B2C5C240D6E503BB85ACD579D513F1B9F9A69DC9CC22AFA80C426D40AF0B21EA168559156B6276F0F726A6BFF04DCD513A87A62CAD41FB24FCB2858B3952E3D852084DA25B9303C15687973CC8E8AAE11DF2836C38C6A9E765E8C1B +311 +A1BFB1DC29CDFE518C8B5A7655A4ED7E77291ABEB80DBD82EC866ADE1B8D05AF9E35CF09D7A061F38A986D9EC412B8F0F65E5D81534D9B231D1E5A8FE577A241F3A5FD01504B03041400060808003D7AEE4AE336299B9F040000341300003E00000033333246423638392D363232332D344431442D423337332D4446314242 +311 +324145414645422F536368656D61732F47656E65726963536368656D612E786D6CD5585B6FE238147EDF5F61E5BD1498E9A895A02398AA5D1E2A5665BAAF96710C78D6B9C87168D95FBFE7F81242134A968E469A4855437C72AEDFB965F4F53551642B7421B3741C0D7AFD88889467B14CD7E3A834AB8BEBE8EBED1FA34951 +311 +08B3E01B91B0DBD1F3EC8E6C991A470F22155A72F73CBABC1D4D5921DCD1934863A11F990102A6F61466977B8AC49FB13C174CB3940BE4504A22E3713489B7F82406516225536940BD88E4E552493E8E564C1522225AB0384BD56E1C195DC26FAB13882C2EBD62E1FF9E5B0FCC453132C99548446A1872B62267078F1EF14C +311 +3DB1DD1952DDBBB384AD456779F387C51992E0ADCE12FED2622BC5CB1952FC9BDF3295E9206E961AB116DA7ACE45F76F07A26EFC3FD762FD7362FC3C0BAA4DB34C09E682CA5167BADCD16CF94370E331E2F1A3D852008AAD5D64BA2373478338AEB1583B905396D158182655E1B938D07926CF007CC7E85E6709999B0D3827 +311 +C0BF406BEF55C68CF5579DA32C8C85BE03EFE788787E8FEC95DC85C3E31A615658D81F9A34499612004CE69CAB12531B15A887ACA642C110F8C1A8C1974A85853F407794695C905C688E69B116550ACA946B9B4785FC179E0E229240B62665328E86D5BD2C800CF5D80289F35AC25E3DD51508F4BF9A74A0F5A557BB3D284B +311 +C6FF59312E282F956A75C5D453906F48D11A876599E49425602400842995BDF02C4D012E226658F78A710416AC552831FDDEF0E6F0BABEBEA9DC36718CCEF4DAC5A0DF871AECBDD8F448F015F8DA113A473609D1751672B723874B2CAB21ECD6E284E51DCC7D1A47A00F60EC21DC4CC3CDC406DC03760A4E6C772F2F4D561A +311 +9AE58C4B03F5B4838701472139EDCB36819A66C472B52AB1139C648956F43E0DAEC067B56B0818F5961D3D446B8F1E1E78C0EAD7EE02AF2895D813E88AC5014A7B436DBB20F778D40A1D9737EFE45B47D49CC8360F9966B15AABAC802C1005548A93EE469F5D55317CD8BF0AA86CABADB2A009D4D6F60CFE53AE370AFE8C45 +311 +415B15D362A5A038E766E34B00F8C2E3E7098E2093B1C96349FDAEA158903B4BDAEA665F473FECE72186E3BDDCACCADA31839CD6D4FA7D47DF5469006ED340EBE71DF960DDEE88A3E17557039B58C278A1795BA8079419DA8FC5BA1BAA1A66238BF69C7B2BE4E6274839122B7D00BE8B7D52CF61B2D63216046008C8B330FC +311 +10F8907787DEF061F47965BBA02FD8F53BA12F9827614979F53563D0BB1AD67A03DC0E00E2FB2CF3EFB457E70E65A3D7C78E7D700DBB45132AE9BBA5E468CD861408961AD8B00A55C2FCC677F4456039FD9F1907A5B3E2D0EE845FDBA2DAFA88C64195671AD6D282DA2E45B1F50A0D632B0D0B6718757DCC7C84A70A3656F2 +311 +22CDA6DBF07E204AB358961D1BE31E53A82C2C0D56DBF61A5608B5A252A932A1DC6E32462430853353EA30417C8199A662E946A4EF352268B8CDB9A9C6762515ACE8E09BBC031C608A02C4BA89C9DDC074E46E0E26A17BCBD4ED43270D03E3645ADB81F6D62CC07A3243EB81C07E01681DDF2DB4730631E6DDA6CBBD048BE9 +311 +F06AEB3CF06B31DD6C9575E37E9FF17161342C4C76D95519672A6509E0F5C4E71B4B1916440059F57D0921F496237E473A83E3E4E06353BD9D27593594D7B6707C08D22FEBDFBFFE03504B03041400060808003D7AEE4A8DFFFC99640100009B0300004500000033333246423638392D363232332D344431442D423337332D +311 +4446314242324145414645422F536368656D61732F52656E6465724D6174657269616C536368656D612E786D6CA5535D6BC230147DDFAF08799F5FDB600FADA20EA430D968A7AF12D36B1B481349529DFF7EF9A85A718860DFDA73EFB987734EA3D16FC5D10E946652C4B8DFE9610482CA9C8922C6B5D93CBFE3D1F0291A6B +311 +0D26A3255464182D920FB4233CC629881CD49C18508CF000E3EE309A100D61622AAB4A8A33B2483F11CB639C545B0E1508438C3D3C0361192846DB7ACD198DF186700D182920B914FC1063A36AFBEE8FBA03FFD3CC1D1F4FC9E151A2AF59F628C5B7821D83FDFD3489305080F2EE04BF962195FB285E9D2DD352320A9E827A +311 +E357594914E42B1F5FE35F83688F60C4C91A6C946ED0668E8F244BC2EB0BA6E3BCCFC0B6A4B507F9F9F8D51EB315D9BA9E08D308E89F96931666E577837E2B4172199C68C4FE306156D47DF51C698C7B9D97FE5BEFE2190C3C38BB054E6E8163FB039CB4B993C80BF18D969203116D6BBD26238B821F9BB909AD6D9C71B85B +311 +CD8C33D66FEA3D31B4BC0AD45BEA46BBEDDFEC0F504B03041400060808003D7AEE4A5319E9034F000000570000004700000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F41737365745461626C654F66436F6E74656E74732E62696E536160603034 +311 +373273327274D4757275B4D035713536D3B5347232D4753671B574353075034A390901D5E52696A4166526E6241614A4261625E625A70205C1801748BAA7E601659383933352731301504B03041400060808003D7AEE4AF865834058000000680000004500000033333246423638392D363232332D344431442D423337332D +311 +4446314242324145414645422F4173736574446174612F53747265616D56657273696F6E5461626C652E696E66558CBD0A80300C06F73E4B117FB66E451741D041DC5BF98480A492E4FDD18EAEC7DD4555D89EF28DF51A0B1BD8340C4DE7DD848B988C0ACF0649566493F2408C508DDEBB99D5129FF8F1AF8CF5B9503E20FA +311 +E5A16B5AF702504B03041400060808003D7AEE4A218FBC1938010000A20400003600000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F636E782E786D6CCD94314FC3301085FF4A648931765251152AC71582A51348540C6C57E7D25A75ECC8BE20F8 +311 +F7D86D0650115387AEA7EFEE9E9FFC4EAE3E7B5B7C6088C6BB86D5BC62053AED5BE3760D1BA92BEF58B15232784F3F305638E8B161B9CC94DC053F0E53A9C50E469BABD6B8C3547C881169035B8BCFDDA377848E222BB485181B16F51E7BE030926F311E780B04BCE601A31F83C634894C8FD3241D10085BA66655BD28AB45 +311 +59DF6EEAF9B25E2CE7F7EF526452C9ADF776E24D5A16FC7033ABF4692F5395141950720C66A2F26B98FA4B25DF1A274522958C14922B53077D0DA90386C11A0D94CC135E13529920845E8A13ACA4C82EFCF2E2093BE34C6E592769403EBC248118C8E0157AF29FDACB7BB37691C069BC6647CE355EDE87D7E32F7A3BC5F298 +311 +9BEB4BCBB9466E5C7781AC88E33949D1C9D7457D03504B03041400060808003D7AEE4A507FFEB3E7000000600100006700000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945 +311 +303546324141422F7468756D626E61696C2F302F636E782E786D6C4D90C16E03210C447F6585D4E32E4BD4286DC4929FC8A997CA659D2D0A8B1198AAFDFB42CB21A7B1C64F9667F4E57BF7C317A6EC282C424DB31830585A5DD81651F836BE88E1627422E2074C0C01765C44B385D15BA212BBB5E20D8A6FAE77E1DECD0D03 +311 +2667DF63D8C4603DE4BC886C3F7187090AD38AF93EADC030A92961A6922CD603EC76EC076C42605C8539CCEA34CEA7513D5FD5F1AC4EE7E3EB9B968D34FA83C877DE05C644F1E9305BAA63A8FFCC5A36C0E8925CA75A08611E9ED3B22E8DCE9C6AFE0EF14FAC10C4E89D05AE3549B28C3C560861D7F21F365AB6BC55FECAA8 +311 +DABA31BF504B03041400060808003D7AEE4AA233C2345D000000800000006500000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F7468756D626E61696C +311 +2F636E782E786D6C4D8B490E80201004BF42E6EE76F3C0F216234B883063108CCF170C074F95AE5473F5C4C06E932E4F28601967600677D21E9D8092EDB002539227A2FCCB80E1168D80A6417297A89C5D6963B7129A0D1E8F2EE73AA7B62BBEB8B27DE50B504B03041400060808003D7AEE4ABE8976236300000088000000 +311 +5B00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F636E782E786D6C4DCC3B0E80201004D0AB90EDFD75167CCE820A4A845D83603CBE602CAC267999 +311 +19AEEEE0D965E2E908050C6D0FCCE04C8BC355404EB6198129C92351FAD580A10E464065907C8D948F8F166375F655BDC3FDC3B4E530A176BE7057BDC43B2A593FE403504B03041400060808003D7AEE4AF34F79557E000000A30000003600000033333246423638392D363232332D344431442D423337332D444631424232 +311 +4145414645422F5265736F75726365732F636E782E786D6C4D8CD10E822018855F85FDF79890996E808346EFE1121D0BA191B81E3F685E7475B6EF9CF3B1E1B33AB49BF8B6C17320550DC8F84798AC5F38A46DC61DA041B018C2F63703E4C7D5702818045B6248AF034D661E932BD459FF3C20B9D2565129B1D2B2C38D3EB7 +311 +B8A78AE05BA37B5D5FEEB952F9712A971C3F5FCEA2175F504B03041400060808003D7AEE4A46E7C3B70C010000550300003400000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F636E782E786D6CCD93CD4E032114855F6542E27260686C461B862E5CB8 +311 +72A3AEDC21DCB6A4C09DF063F4ED853A8B3671A78BEEE0E4CBCD3907AED87E7AD77D404C16C344381D480741A3B1613F919277FD1DE9B65244C47C86912E280F13693291621FB1CC8B6460A78A6BAAB3E1B8880FE83D86177D00AF48A79D4A6922E974A5AA6434908ED4A8AC28A7111296A8A14EC8D6C332414750190C91AB +311 +818FFD30F6FCF695AF377CDCACEFDF046BA414EF886EE16DC81071BE590D1AEB31544383600D90A244BB502D0591E7EE68ED43B04A489172AC2D2C64FE9A2BA9E6D959AD722D8B9DC01F460AD6C25E447E8400D1EA6BCD7C61EFDF423F4330109FEA4B45ABDCB566FFCDE5DF2A60A70DA8DFA02D84FC06504B030414000608 +311 +08003D7AEE4AE3603EBE7A000000C20000002C00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F636E782E786D6C6DCD410EC2201085E1AB90D9DBEACE05D09878023D01A1D34A8419C380F1F82DA68B9AB8FDFEC93C3D7C52546FCC12980C9CBA232824CF63A0D9402DD3 +311 +E10C6AB03A3397DD192872090D3406ABE7CCF5B5D18893ABB1690CF4DCF02282E5EA8A5BB96FFE536F285CB347F95BEFFE81C9ED5AFF9D5B1FB575BB00504B03041400060808003D7AEE4A22FED86E7E000000A300000007000000636E782E786D6C4D8CD10AC22018465F45FE7B2B35D602754C9CEF319A1B92D361337AFC +311 +3476D1D50787EF1CDE7D568FDE36BD5C0C02C8E902C886479C5C5804E47DC62DA04EF214E3FE770314C6D50AA818245F52CCDB81263B8FD957EA5D781E90316A54D3DE714329C3574D3456ECC6B0364429DA0FBD195431CE5529F3EB95AD79F905504B03041400060808003D7AEE4ACA1DF9C9A90000007301000013000000 +311 +5B436F6E74656E745F54797065735D2E786D6CA590410EC2300C04BF12E5DEBA70400835E500FC800F84E0B411AD13252E2ABF27A55740421CEDDDD9B55CEFA7A117778CC979527255565220197F75D42A39B22DB652EC9BFAFC089844F65252B2630E3B80643A1C742A7D40CA8AF571D09CC7D842D0E6A65B8475556DC078 +311 +62242E78CE904D7D44ABC79EC569CAEBA537E3521C16DF5CA5A40EA17746733E0B6615DE7217475F386F18B9481C510F1F021CD9FF027EA0E1F5C4E609504B03041400060808003D7AEE4A3DEE336E64000000790000001B0000006175746F6465736B2D64657369676E2D7061636B6167652E786D6C35CBC10E83200C00D0 +311 +5F21DCA56CA76D41FC96062B120735B69A7DBE268BB7777961F8D5AF396893C2ADB70FE7ADA196782C2DF776D7A97B5933C430F15651E5469C55D70F80A4992A3ADC954792C525AE70A1E4D6AD9816CC044FEFDF01FE3FDE907802504B03041400060808003D7AEE4A432F74D7F90000009601000037000000333332464236 +311 +38392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F636F72652E786D6C8550CB6E833010FC15B477831D4821917114207C414FBD59C62156828DFCA8FAF9B5132AB5A79E76353B33BB3BF4F4B53CB24F699D32BA059263C8A41666527A6E21F82B6A203B316A8DF1BF6890 +311 +69BEC816120C8CCED684758384D15EEA846A33C90DE4CE490F9978C4A605276E72E1390F3E32DC3D5FB9B8F359E6247FF1180D414D9B544DD14D5D95B4C01A42CABAC367F436128CAA61BCA0AE1A7BD4F4653F1C70472EB8A1451233EAD5F2B35D58C9BD9C80ED30A911AE11A9DEC9FE48EAE3FEF0418BC464D4791B7FDE96 +311 +A6EF809DD3D503F79C16AFE91FD7B04EFFBB06A57DB9DB5C5F0A078CC4239F03468B94522CCF08634D89B26F504B03041400060808003D7AEE4AEBDCC332F40000008E0100006800000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F313732364232 +311 +41412D424541382D344533362D393242312D4334453945303546324141422F7468756D626E61696C2F302F636F72652E786D6C8550CB6E833010FC15B477831D482191715448F8829E7AB36C875A0936F2A3EAE7D74EA8D49E7ADAD5ECCCECEED0D3D7722F3E95F3DA9A1E4889A1504658A9CDDC430C57D4417162D4591B7E +311 +D1A0307C513D6418189D9D8DEB06096B8232193556AA0DE4DEAB0085B8A7A6072F3ED4C24B1E4362F85BB97271E3B32A49F9E4311AA3969B54CBE4A6AF5A39601D21753BE057F432118C9AF3744143338DA81BEBF17CC003B9E08E5659CC68D0CBCF76E1140F4A02DB61D222DC22D2BC91FD91B4C7FDE19D5699C9A80F2EFD +311 +BC2DCDDF01C3B47AA27FDCE22AFF778BDA847AB7B93D151E1849C73D068C56399D541ED1A59A9364DF504B03041400060808003D7AEE4A23E145D5FB000000960100006600000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D +311 +424541382D344533362D393242312D4334453945303546324141422F7468756D626E61696C2F636F72652E786D6C8550CB6E833010FC15B477831D482191715448F8829E7A73B143AC808DFCA8FAF9B5132AB5A79E76353B33BB3BF4F4B5CCD9A7B44E19DD02C93164528F46283DB510FC1535909D18B5C6F85F34C8345F64 +311 +0B090646276BC2BA41A3D15EEA846A23E40672E7A4876C9C63D3821B6F72E1390F3E32DC3D5FF978E793CC49FEE4311A82129B5489E8A6AE4A5A600D2165DDE157F432108CAAF370415D35F4A8E9CBFE7CC01DB9E0861649CCA857CBCFF6D14AEEA500B6C3A446B846A47A23FB23A98FFBC33B2D129351E76DFC795B9ABE03 +311 +E66F61F9D05CCDB4784EFFB88655FCEF1A94F6E56E737D2A1C30128F7C0C182D524AB13C228C3525CABE01504B03041400060808003D7AEE4A0226906D0D010000B10100005C00000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241 +311 +412D424541382D344533362D393242312D4334453945303546324141422F636F72652E786D6C8590DD6E842010855FC5708F82FF6E908DB8FA04BDEA1D51D6925DC108347DFCC26A93F6AA5743CE9CC33733E4FAB53EA34FB11BA9550B708C4024D4A467A99616387B873588AE94EC5ADB5F361029BE8A16041950B2ECDA6D +311 +A7346965850AAAD2B338456E8CB0209A9EFED102337D8895C7DC59EF308F78E3D3832F22C6F1E1A3C439399F5139FBDFE45D8A1DD01AE3AC62A883E58811CC6FE300593EF6B0EEB3FED62086075493248429B172FDA14FBBE056CC80A60857105510E76FB8B8E0EA5234EF24094E4A8CDDFDCE27346C0728AED292A55D07D9 +311 +D0D5301FB2123629C3B0CF876640C5E85B8C2447F00FD06DF3FF402795CDD21378248C67FAF95F0D4A9270405F5ED7F5351C9B7E03504B03041400060808003D7AEE4AD773138AFB000000960100003700000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F757263 +311 +65732F636F72652E786D6C8550496EC3300CFC8AC1BB6C294E6A279015348B1F50F4D49B20338E90580AB4147D7EA5D805DA534F2486334372F8FE6BBA179FE8BCB6A603565228D0283B68337610C385B450EC0577D6865F34288C9CB0830C83E0A3B3F1B140CA9A8026A3C60EB880D27B0C50A87B6A3AF0EA8A932C650C89 +311 +E16FE543AA9B1CB164E5CC133C463D2C523D24377DD1E840B48CD5CD81BE92979E51B23EF5677258F747D21EEBE3694B0FEC4C5B5E65B1E0414F3FDB9543197000B1A2AC21B4216CFDCE363BD6EC36DB0F5E65A6E03EB8F4F3B2347F07E20DBD8D4EA1E7D53CFDE31A1FC3FFAE519B50AF16D759E141B074E473207895534A +311 +E51961AA3951F10D504B03041400060808003D7AEE4A5B72B2D5F8000000940100003500000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F636F72652E786D6C8550CB6E833010FC15B477831D482191715448F881F6D49B851D6225D8C88FAA9F5F9B50 +311 +A93DF5B4ABD999D9DDA1A7AFF9917D4AEB94D12D901C4326F56884D2530BC15F5103D989516B8CFF45834CF359B690606074B2262C1B341AEDA54EA836426E20774E7AC8C6476C5A70E34DCE3CE7C14786BBE70B1FEF7C9239C99F3C46435062932A11DDD455490BAC21A4AC3BFC8A5E068251751E2EA8AB861E357DD99F0F +311 +B82317DCD0228919F56AFED93E5AC9BD14C07698D408D78854EF647F24F5717FF8A0456232EABC8D3F6F4BD377C0DED63B1D2D9EB33F9E6111FF7B06A57DB9DB3C9F0A078CC413D701A345CA289635C058539EEC1B504B03041400060808003D7AEE4AB4BDDA7A02010000D80100002D00000033333246423638392D363232 +311 +332D344431442D423337332D4446314242324145414645422F636F72652E786D6C9591416EC3201045AF62CD1E3B40122711268AE5F8045D7547CDC44589C1025CF5F8C5B52BA5BB7605FAFC37C39F11E7CFE1917DA00FC6D90A68BE810C6DE7B4B17D0553BC9103646729BC73F1C9069955035630CB2045EFDD34AE52E76C +311 +443BABD6695C45150246C8BA47BA5410BA771C54AEA6981CE19E8FAABBAB1E739A2F3E29A2197ED0CEA38AA841B20D2DC9A62474FB4277275A9E76C75751CC4E29266323676B331CDE50676E8C2952C2A82896E7649B8C5E4D46A74F9A9B410F9273D6D6FBC391EC19E364DBD086D4BCE4A469695DB3CBF5D25EEB5424C152 +311 +84E8D368D622F310FE8A2FE0AF68D3A8FF196D2102C8A750C53C67298AEF25A473DE89FC02504B03041400060808003D7AEE4A7E066DEB08010000B201000008000000636F72652E786D6C8D50C172832014FC15E6DD5188A69A0C92A9267E414FBD5121868982239869FFBE10ED4C7BEBE931BBFBDE2ECB4E9FE3801E6A76 +311 +DA9A0A68420029D359A94D5FC1E2AFB80474E26CB6D6FF920132625415441838EB67BB4C1BD459E39589A8B1526DA0704E7940DD101E15B8EEA6469188C50785BB2793E8EEA257094D561D675E8F3FABDDAC845712F88ED0029302D3FC8DEE8FB438EE0FEF2C8D4ACE9645CBCD4ACBE0AEAF5ACDC04B4AB3A226AFF8A5A504 +311 +E7E7F682EBBC6D70D964CDF9406A7A21254BE33267CECFE1CFDB9190D323271ED197A52BC5D987B5C32608A124B266F8024E581A893FA19749FE23B4363EDB6D07D70D079C86404F2218C706C378D61B666C9B7F03504B010214001400060808003D7AEE4A3D73C5AC26010000A80100004F00000000000000000000000000 +311 +0000000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F446566696E6974696F6E4974657261746F7250726F706572746965732E62696E504B010214001400060808003D7AEE4AB71BFCCC120100003002000045000000000000000000000000009301 +311 +000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F496E7374616E636550726F706572746965732E62696E504B010214001400060808003D7AEE4A88E57597CD3F0000904100006B000000000000000000000000000803000033333246423638392D36 +311 +3232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F7468756D626E61696C2F302F67656E657269635F706E67504B010214001400060808003D7AEE4A28BB58AF800100009E0500003D00 +311 +0000000000000000000000005E43000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F436F6D6D6F6E536368656D612E786D6C504B010214001400060808003D7AEE4AE336299B9F040000341300003E000000000000000000000000003945000033333246 +311 +423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F47656E65726963536368656D612E786D6C504B010214001400060808003D7AEE4A8DFFFC99640100009B0300004500000000000000000000000000344A000033333246423638392D363232332D344431442D42333733 +311 +2D4446314242324145414645422F536368656D61732F52656E6465724D6174657269616C536368656D612E786D6C504B010214001400060808003D7AEE4A5319E9034F000000570000004700000000000000000000000000FB4B000033333246423638392D363232332D344431442D423337332D4446314242324145414645 +311 +422F4173736574446174612F41737365745461626C654F66436F6E74656E74732E62696E504B010214001400060808003D7AEE4AF865834058000000680000004500000000000000000000000000AF4C000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174 +311 +612F53747265616D56657273696F6E5461626C652E696E66504B010214001400060808003D7AEE4A218FBC1938010000A204000036000000000000000000000000006A4D000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F636E782E786D6C504B01 +311 +0214001400060808003D7AEE4A507FFEB3E7000000600100006700000000000000000000000000F64E000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F +311 +7468756D626E61696C2F302F636E782E786D6C504B010214001400060808003D7AEE4AA233C2345D0000008000000065000000000000000000000000006250000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D34 +311 +4533362D393242312D4334453945303546324141422F7468756D626E61696C2F636E782E786D6C504B010214001400060808003D7AEE4ABE89762363000000880000005B000000000000000000000000004251000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75 +311 +726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F636E782E786D6C504B010214001400060808003D7AEE4AF34F79557E000000A300000036000000000000000000000000001E52000033333246423638392D363232332D344431442D423337332D4446314242324145 +311 +414645422F5265736F75726365732F636E782E786D6C504B010214001400060808003D7AEE4A46E7C3B70C010000550300003400000000000000000000000000F052000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F636E782E786D6C504B0102140014 +311 +00060808003D7AEE4AE3603EBE7A000000C20000002C000000000000000000000000004E54000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F636E782E786D6C504B010214001400060808003D7AEE4A22FED86E7E000000A300000007000000000000000000000000001255 +311 +0000636E782E786D6C504B010214001400060808003D7AEE4ACA1DF9C9A9000000730100001300000000000000000000000000B55500005B436F6E74656E745F54797065735D2E786D6C504B010214001400060808003D7AEE4A3DEE336E64000000790000001B000000000000000000000000008F5600006175746F646573 +311 +6B2D64657369676E2D7061636B6167652E786D6C504B010214001400060808003D7AEE4A432F74D7F90000009601000037000000000000000000000000002C57000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F4173736574446174612F636F72652E786D6C504B01021400 +311 +1400060808003D7AEE4AEBDCC332F40000008E01000068000000000000000000000000007A58000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F746875 +311 +6D626E61696C2F302F636F72652E786D6C504B010214001400060808003D7AEE4A23E145D5FB000000960100006600000000000000000000000000F459000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F75726365732F31373236423241412D424541382D344533 +311 +362D393242312D4334453945303546324141422F7468756D626E61696C2F636F72652E786D6C504B010214001400060808003D7AEE4A0226906D0D010000B10100005C00000000000000000000000000735B000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F5265736F7572 +311 +6365732F31373236423241412D424541382D344533362D393242312D4334453945303546324141422F636F72652E786D6C504B010214001400060808003D7AEE4AD773138AFB000000960100003700000000000000000000000000FA5C000033333246423638392D363232332D344431442D423337332D4446314242324145 +311 +414645422F5265736F75726365732F636F72652E786D6C504B010214001400060808003D7AEE4A5B72B2D5F80000009401000035000000000000000000000000004A5E000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F536368656D61732F636F72652E786D6C504B010214 +311 +001400060808003D7AEE4AB4BDDA7A02010000D80100002D00000000000000000000000000955F000033333246423638392D363232332D344431442D423337332D4446314242324145414645422F636F72652E786D6C504B010214001400060808003D7AEE4A7E066DEB08010000B201000008000000000000000000000000 +311 +00E2600000636F72652E786D6C504B0506000000001A001A00210B0000106200000000 +310 +504B03041400060808003D7AEE4A000000000000000000000000370000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F617474726962757465732E62696E504B03041400060808003D7AEE4A000000000000000000000000350000006662782F3237383530353136 +310 +2D364138362D344639422D393343302D4530433546313143304643442F76657274696365732E62696E504B03041400060808003D7AEE4AF270F1330600000004000000360000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F747269616E676C65732E62696E6366 +310 +60600000504B03041400060808003D7AEE4A88E57597CD3F000090410000420000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F322F305F67656E657269632E706E67355B773CD4FF1FBF73E71C0E67EF7576C9DEF3EC995D46C6A1EC50 +310 +46649CBDF79E192942562825CE965D8A868C2842C8DE9FDFD1F7E7F138F7078FCF6B3F5FCFD7EBFDFEC41B196891913091804020321D6D7513FC77D8C5070EC3FFEE51B21F068154CC75D455CC028A3EA68992803810109FDDE5D5CEC5521B28A1B422BF80741695D5B529DA1C2D058AD2388BDA9F476F7C2CADC939304173 +310 +DBF48A452BF8A700C0C70C3D121C1AA15A5270C22E2B9E28763651F7DA0D12CE11077B2ECD0D560B5E3DE2368B1E65C5E1C87384A4CC5F2D9FB8BE39E9B77C753783A37998F5CEF1B4FEE553463245C9712270880DF339E0B882A6BA713D865F6F384C842D440934EF264F4A304F8DE4EEFA1E2BF5E2D91F5ADD9613D6E31D +310 +DB33ED31DB1D7916CAF091286EA3D31B9CFECB78BB0060245B943C4C040119FF780A74DD308BA9D028678674EB5504ECF284EE814DAED07440BAF649BE4B55DA2890F4D73E2D489A59EE54FDB0A85B59F2F52C4858A02705C4815A792B0C4A996A2023ECB195073E115E3E3647F64243A8338F2000BCB58DA5692C7E7C3D41 +310 +3F963FEDF3CF00FBB0F831A9D51360FECA43819F527B89FA260EB63C5DA676830AA3626A3693B23F1A17A0DFFCE3EE164E31B5365EDF0C89EF64D8E38AB0BA9A1117D7C3A0EC44F44F4023095E80BA610DE336D0F99593A88BFC5306E72DF98F7FD132ED95878DF2964EA7E43071359FD83B2BDF9C6B5BDF768F0F3C0FC351 +310 +199526F53D9460A34511F75D1B63E488178569472C91A94497807A3FD4A390C6558F26D416365C3656DE6E769DA9D8FC73774E1709812842DD8EF96AED1960F79D21B395CDDFE6F92CB4EB962A4668C76990E2EF29798C8941D67DA50F4A5F947872460F1F6FDB794E8A29FD7AC0C0D6E0714339CE258FB17AE8535221E346 +310 +4A10F29A0BE5EEECEFC5675926A89F49EB14E5711894F6586DB5754EB4D5DA9C6437EBA57DB97A24F8B8A8DB295FFD73266CF57E82694DF5166DDF93573AFE9C9C5EB05F8FEF8E89E0A8917B0B3724DB7BEBB53252581EFC3E38166BA131A3A5B42FE2AD00A769BBFA4458D2DE7822F8C4F63D0B8E21B285AE13325F3410A4 +310 +35C648C9D91FDEB109E73CEDA7BC796961AF79175E1A3CE4C5E8B0D009B0C9E29EFD98BC8E97554E3D8D838424E270F7685226E5AC268E021EDE3522D583E8F20C0BDE2959EF5BBFEEDAB32FE9A3ED0E39F211A86AA9DEBFC68182EDED132AB8BB794442D2D7EA9F4D8BFF52BC4D55BB165124EE90A42D101E67BBBB292FFB +310 +4F66DE5BF2300E44546757DA7CEF8932BFC9F92A0707953491A55C5A5ACEDABD9FA1AEA01BAC3DC5A24E22E7C47213493996EFBC369D086ED9397C9BA6C7F9855C7BD5E15BFC8C53DB3D2A4C5901A57ACD2FBDF4D1676E95338B2C2BCE65FDA4C64F5FEFDC7D9CA5AA1FCF11E193F2FDABF0F4916BF13FB916A224380E6462 +310 +A9815F2300DC49CC4DF8D055CEF76462F4B7A7ACA7365C2707891370BC1D0AA6203C44CCAB47084FEC057F27FFCD57F89B8B9852459798A675C66BD7CE572CAF71FF7E6D7ECF7BF62CAB7B3F1107DCD04DC55A3F9961700286141C94A4F771FEB2BCDA2DDEE0CB0BAE402FF1DB0100F8E475DFFFC074DDB4498AB7D186A765 +310 +4DDB1CB680D703D47CEB4E72F8CB13D86A4AA68116E26387B93FD6738779B34FEDB8E517EDF2BAF28D9BE93A1D3A164320E07D42E514725C29515FF361754213EDE06B079A2E99EB1CA82A02019EADEEB87B9AF005BD04BBCECB14AACD6B24EFBE482194A97DD32400685FF1FEF1544D1B14EFB1E7F08E6D2CD2AF52DE757F +310 +35F5E62332EE88EA26417AD5C3E0E319D68F25414E6D672BD4522B278C57D18F0113921C71D96527E091F00CEB15AE23D24667369BD3CEFA10C7549D930890BA4366F4EBC55F01F746109F98ABCDD5A3EE06619C6AD78AB33E48E4C9BD21BF7478B385EC05C4F8987E2C1BFA0A60EBEDAA0AE0B015C2720ECE180FB6F2DEFB +310 +EB822D96338C9B63822183BBF52FB664A7AE57003AABCE512BF77E7E31BDA2E739AC4C131657DDFE5225E900FB56CC01CDE808FA4A9C9DA16AC679656BB64796283D89812B8F91136AE18EE5EBBAF47A73BE3C153EB5D4CD491B4BFB4FE690A4CF9ABA08C0D8AA64220C438C96EA6CA80B58FE5761E697B3A292EB9FBDA502 +310 +FA863E49FE694ADDFFF9D62C520BDD1A22014147A0903A05B9B729F54272EF83931FEEC057BFF8C8055C279EAC5C0011804828734024F6CFA319C9CC6867C727184465CD9BB7ED386AFFD96B294A85E3802FAE47244602D8273615952B98C4F23F7EAE4463D9D638EEE374A20959E0FE519C4CFB0FBFE5DD80C2AA3F9DB961 +310 +D1BDE57E67C9BB47B77FDD74EE3094F5DBBE3EBC1FBDB7393F5116263009E2EFE1AF9A221B2AE234C902BF70E9F280ED23E73908361565964333A3F01D0B006AF32FB21AA1316744B489D5A198E85299241735BE559675130955C902A8ED761FC0DBE337A9F91919AF5CE32AF902ADF9AB2615E00E8A94586BA1A90839B618 +310 +32FF1BFB76D2EFADE6DB1BA04CCAD3DA649E7E2A0219F592E22F2AD54847EEA8E42271011E9074F8F3DD9FBA6CDF88FFC9FC7E811AD1CA8F4557CE4AFC7BBEDCF0114A48689F20A584520C74DA8127124B767E2FB91A6B186246727BE63C9445BAE02088D58B8EFDC0F1072407CD9B89A13F6303B4A928F593AD489B58E686 +310 +9325790ADC406036C591729FE14021F94B7796BB11848D463536A092A26F077F94639F7CEEE2A724C66EC885F4A24F8B8A0AC321F8FD149BA529460FAA34E4663C02D41FDF80BCA222D42F0ABFF8490F4FA74C673807C2051D8E467B47B616072860069A9A303ABA9B319D58404461401B0A0F9BE5E1E151C14BC33B32ABE0 +310 +3DDE91708DFAEB15E7C0D593C86BB7D7EC17BE56E57975F077BFD5525F3A1A361D584A75E08CF29FC7B44B2B3085014F3A5A14517377C3F6B8F37E59514C3B12F8AACDEDDA4DFC49BE5710101534CD6FB6DE15B50F11A09472AABA727F0C49D9CB906B158030065F48EB3625E010CEC1D511D0053474B11E6A4F01C0D6EF1B +310 +ED3A944FDEC70E0DDCDC756C86545910E0DAE3BE3AA9A404574C2995CD5CAF9549226BC94B4F4F0F5F9086F418F6B32346464610D8BC7391D3C3A3CCF04CFC1FB2A3A3170E369511868F14EEA4E5E438CC73DB1F3248AA94B6B2FF33B222FF3D1E7BF146CAD229770158063BCE4F5391964DF62F7E52A7BE0EEA829C9E13C4 +310 +C147D6F93FE59E111DAB5E4594D6F3CD1AD375EE039930EFE5AF2BB2D41C83C7DABD8C659BAFBE8FAB392CA634F3D15C1D945DB4588D2B0824A4EC928AAC565557CA2F0DAA588CA5BE30B3A8004F7BF005E96CBF891D7F18112A3619FDF530DC8AA64954258E1811789B5189B49B4EB53F5F89F7D37523894F3EB57B373763 +310 +C91E502F52CC99EB7BDDF933FC324C4FFC2561DFFA7339FAFDD0A4BFBE6D3A8FF9ED1FC49898139864602458968913181918F719CCF5A68B2EE9C1FF050E34E63107003B8120FA982C21B30A874E4F5E4B38D5A8290C4B8D9BE48A0BE31EA995BDC37AC6DE90BA17D259DEF53605D55922FEB1855D915B659FBEB350EE0DFB +310 +2F9F766E1C84CC8964B75D08667445EAB966015F63A18A9E0A325C1B3DC628C0D3CB60F767FA93CC65F25458BD23C3B312716E5F40E5858AC06EBA9AB14F95DB99147B832069201541D09A0D856E12C629CF32683760EE855537D1901988D5EBC156676C7DD51D7207CF3267AF1D76C2AD867315E44618015313A98B19941C +310 +696FED3461CAA9B5415F918556D7802EDACEFD6B2E45853A9735DFC9DBF7E440F9319F8B6805A973BCCDC76C069A9144E51F187EDCC12FC31B5DEAAF0A76137199B106EC84ADA6B6EE697D4E6A96E007417F4E880E8B1E89B4BCE9D81EF611E2ED8F0C1A6C25F620FAFAAB656A7C42D464880E8AFAB0E0FC8EA38CA9A8AEEA +310 +EE3E4648BA4680270A89743CDD3E6C6CBF34B7B640EFA285ABC7EA0A1E28F3CC963D114A80123EE66D0AF7D5380EB41909B605AB4765B709B808590458157E69BA1378FEC4B48CAF6A730E3BE3C5EF2DD1A5EAF94B1DDE50CEB55DDFD7EE9A16747FA4B223359FB1FCC69E1194892BABB93A1D5C4E807AC0EA2E30180811E7 +310 +7A2291F6E7F7FAA5E0F60215BC6024E48DE436C511F0628B8CA189982D4D83CCA17D305A7E923C37941CFDFDCD93ACAF735EF5F0E61BBD3E6C41A59B242790D3A3BAC7064DCD89AA2E37214EC839820949D5CAA31E240D2948E48F690298974A96BA9A8432BC90F5071D6537C9666EA4564796B7AFFFA548077BEEA75F6308 +310 +3435074BA182F3699557397F71548383FDA8CA34D99B981E72835ECDA5DDDC151315173D05A21F651AAF8524E88209E2E7A737ED1045800CE3390050BCFB8BE588DF111617874C62575039CA588EEFDEFEFE319B739DE2EDC147092A262611E159650E787917885EF08F1F51B8F2D8A71D60B58B190FEF9541A1BE94BC19FE +310 +A50784DA1419FE4B0FB51B8D36B5FF8E1286FD8AF42B91E59A5F1CC4D60174E764045FD8C57B18209B217F89A62252BD20BE0E63E12B8E8F029FE19E0E8D0870F58721A557082250D5424F7909369376E41666C0EE77CD87CB283F661D5FB6D0DA023CB67320A20DC7BE661E9E1BFE5463085C557DA1FF9BE835733766C3D1 +310 +39F2CF9E2208873AD0EB4814DE9E6BF2CAF81614D4D43906ED1C05A3265CABBFE192770FC2F64F940CB6B17B5F166F133C9AEEAD2641807C3E69515171DD74C4A85311513D6EC9530B3B601B6BA3EBFF3B5C3D2F7D69765141E345F75433953D013ADDF8F6AA7DC3F4A7563FE5C7D367937E2900D7EAD0F9FC9A4A1A9B5BDF +310 +1FEF08532660C01C5D6DE22199AA774383E306DAB87E301ABB7D213887F9869D4942D0D71E94B27EDF216A318BD488D45DF84529EF575AF3C3938C0AAA0215B01994153E2054A0B894DA5C784980633AAD48576957CF4AEAEAFADC7C587368551C73DBE1E57C58AC713303A8BFC258BD04B51724459FF9E24C03A81E0E0679 +310 +CEB9B348C0DC998FEB9C6D6EFA77D247CC8F92D3848599ED89A23218D0636465AD1CEEB7DC140D7426F83491C4E8E8281C2FB35240918FFECE880CA2A42D70E8B20B34DF5221C7DB0CF90ECCB9C745B37A47E9B716FF7A97B7A252C1F3814DC7B1E1A7F72B8751D524EF7CAE45B0C73B3BE7D08ED39781B380DDFC9AA4A474 +310 +9C9493DB5BAD07A6EA6C092FBD0E85DB004DF06B8C9D3089C5320187E4CE1846158C7EA7DDAE8AD9AFFF21AA3A1026BB06A259845E8232DEE62811A4DA9CEAB3A4887320B76E2AE5615EAB7BDF738CBDD01F1E64064BC13D9EC53576751CA8CACD58B3CEB0E6CA585BD089B2A59B9FC101403387AADBDBE70586B93D64BF3A +310 +D4453EF9C3B6A93817E8346991798601344F79A83C51F3D50F7BF2683A3605F51A72449489E0EE6169C749C60B1035651103AEE24D24E51A759C840DD3FC6504DA6FE107510E447B43461C79D22970B75DE5E1BD3007D1AFC619A4A4A69B5626AF5E9B8374E20677F77E2F8E73DF868E8BEC7EBA7B6A75EEF7205E1AB9486C +310 +B642741D6E03FF13FCCEDB1C4AC129886268B01CDF4B124AF797CF784F3C6DEC97A17D4B558070A0F1C04DA4FF9BDBF34159AEFE958479824B3F58EBD1E19088A2AFDE501B6F2052368A3FD0E650A179EFAB1561E1D27527077136E652676C3670F42DCB3352F48F6BC86D2C3B0051727E41A0A4DC6CE2BE9D47F5CAA2935A +310 +3C0539AF080665997194ABECD723B08129CC5B6B21D2E7D54CD4D12610E7E9FB8306771A89576C7A982002775ED44F3F744CF21EEBB27A631671D921938AAEE3EB0D19CD1E083727F607823E817BF599DCED5394E37EEBC2E88782E638920CA641EF74D4CDFCDEF06F4278ECB18E31E7E9876F2D783C8BF429C75395F57E98 +310 +C2B495A3DA077EB3AC3C158608B6B57FE3EA48484D9A480096FCEE0DE880950E7E5A5714131C5C41AAA29FD19AE81AC145FA1B9E85C7169A5AB837B213493DF7E9AA4B5FBF9CDEB36EBD21EF1181B7CF7366AB2A951D01E37AF4EB835D1BE8C117CFBE7625D2EBCDB0B20C5A4B45CED0BCDE3EE8DA9DA78C2E21DEAAFFD119 +310 +7E463C33CC6A80FB785669B856EFF7A8CCCA2841B5A5369173320B1170C368B2748D81062EA0296E5E2D95D7667A4A46D98A6FF475C76AAB0A8C8D45E226FAFC9FE0133EA9F60111F99CA81ACE03A1D14C89E8B0D69079C91464FA1D99E651D0EAF606F345C42A8A1AA9BA391031582B96D5B4176A77AADB01F12FD298A75D +310 +EEBB2C82F0B8650E880722F8DDD90C56A7A058E5FDEF1AC93545BA27367C76F5D8F9690CB6F8DAE141EDD7971F0FB548A2AE435F224D6E5954CA155512F7332029D5A1230854B79F258EC5FFDB09F5F6343A8EB193229B7F7E79B3E48F8E183860B38C8269D1B53738FF1E0BACF6AADA6D4869E9DE708E79B5DADCC09B1BC7 +310 +6F649731CFAF59A83FD8BAE4C749D66FA87A3810D4D62FFE826FA400C0F325D2BC0F3CA35F5847B82A2ACC7961745C823E4D863D54460AF792CE6F79B5C7A33B25C3AEA6CDE15A919B6367D781E9D44F61BF828672594A3E1D9EDD6DF179A81F27EAC05B936575D73E05C209DDD2115CFB705DF9BBF3C911589B3640735E9E +310 +618FC9C36A7326C82B2205E244C55D56FDB9D5DC93CE958D4BF8174D2B3DA54CB3C09F2C2A6DFF73D23B2197355761AD421EC581284A7EF8DE2CE3497C0C804D49B41DFD6A7360844E5BEFFB495CFCDB97A4595911CDBA623274CE852B5E278AF0BEB1770E9D37CD977B2766A7DED0E94B840E1E95E8C77DE5CB6354AF7871 +310 +427C28ADBEEF7BA0A28E19DE9ACD75F379FE373EAE6DDDAE3834692F9C2B03B4FCA8FCA9ABE8EEEBEBB725B88A7C90941E850682CA04061A7DF0CE82ED49BFAFFD42C309818FAE14755CAAE78B0F73243ECCCAD7DF58FCB9CDFAE7A4D3E6671A613639130D056C8383C8F4FCF4808C331E544DD26E4755D09EA05253B3049A +310 +1E32587CC25D72E073E2CD96D04A71BBCB0038FEC3F53D254199C3CDC67CD66640269431860225392B2CB3ECD0B4498AAE78BA1994246AE1EE78F2EDFB79F6C6CB6B5E279C4D373FBC21CB2698C9ACBBEB6A4BB6B39E16AB0E421CCBFC7654D81ED86022F9BB522146F9F4772E2D0E4FA70120C95A85A417BF5078B232F475 +310 +4363EB1750B2AC2148EB46B1EA72AD9B4D23ADCBC589D70106C3EC2ABEEED84DFE28E718C6C83502C28E9FDD3B09DA0A6F6F7B72B706A31C9E2A331EE70DA56A083D2177BFD63C55B11D8D949FAFCF90B23A1E24B9B5018B9A17E99F2890EC302F330FE7936E2C23F0D237EC8916F5166AB84B62A21BB0B950146962D754F9 +310 +2CC2C8877BED8FC7B7B25726DD19545392570B3A2C66B58F027BEF412E552D12A588C4A3CC5C3193FCB3485EFFF700D0B9EEC077754A33DC1FB9E25AF814628F91DDFECB667D3F7690803F38D13F8AE39353523BB08FC6760144AFA2CE28236F65EDBB3D5F59A57D612B99E3D7E5F8A851666BF9B5A6658EFC96EEB37A378A +310 +BB0EB3FDDF1303AF32C41BD1C8560745D7BD81066B0D6313359CF488563D3BA3F8E2185D1FAA3EBA1397C9D0E3DD232180A4DCADB6AF25DB3AC3CC26589C8239E66E81547BC7E2F328F9884764CA37EB5DBE390DFC03A5246B456A7C3684C4377D0EEF9A350680FA9A077E8B2957B489E09AB1AD41316944C2254B5984830F +310 +691C93CAA767EECF976FA5647538830B5E63236A6F0365C1E0F3E327F24FE35EDDBD7360B0F7374837409F7A6311BECC12B7026D4FA1AE204FA3F5FE904B1F420C7A9044AE58E403E7C4848E7DA25DC9EDAC79DD756FAA26B9EA83ACE8A214A2612A22AFA19DAE7DBAC5F8CDE1292A485F98DAC731A29FE01A3966E96BCB9F +310 +B5A4C8830E1B9AF0C54B87FBE221A097036E5D28D1F869F810C06A9BB0AC0612F69AEBAF893C6E7AD59460208BAB3A6B09CA4F6BDDAB8CF0D1F84B72487498395A70DCD754796E271099A567A55CF242BBED64696378BB6CF25EF0FCDB589F3A82F1116D010A9AB9FA4358809EE0C973A2B4229BAA876A70B03AB49CBA7FBE +310 +71DB1832FFD32F9BF2C8E98075CACAFB36921235D0F552B6A67E94E094097A5D7DF681B40623DA535ADA7A9AD8E9A62407D7C9A5AE51D62A17A83A23728DE86BB56115804D3F2675F2C6B87541A0FC497BF0CA86420F558C9859EBE9FAD62747E323E3AADC03FDCDDFE7407B09DA90B44E3185723C5381EAEF589765E2F7A0 +310 +99BA46695BAD60CEF3491B8A171F5F56444F7CE9455312C3498C74173AEA0214EC029833B34B650CBB5A5508D5091665309642791708ECF27CF11DB3D797D6CFE474453BD4BFADB768094B2147814D81C7CBAF8228DCAF5564B5891F5EF6A860EB2E323CB82AB868D8EA048880D63B0DE5341F1B3D53297B928A11E15F25E5 +310 +148990F710747C3509ED14909C552EBE3973246FCE55D00564D8310BC3EBC5085D08D806799B77D6C57FDF5E55837F9E934F09C03C729271B64F12D0A9F9E938107CAF7BF1EC8CF1BB9B42363D33070F4CACB425E605DDB0A34A12BB936DE286B9887A4E2E558F0886498BFF49C311D96C277CF6A9FC0D75AD0ECC5226D7E0 +310 +E3572012E56D7FDE4410CEC7A6D0F997F225A2055B8B92E3956E875AE4993CB3D4C9063AF98FD45E1BAB165640A43439A2C9181A7C355B297C0A0CCFFAE19B6FA3C2BA238A885FBC98B8F6DAF4B94B97304878DF4D8BFF6A4AEDF79E90ED4E68F00CD7299F4E0D83E35601AF0CBEF18C1E870E74758FA91F5131075004DB3C +310 +FCF09AE1DABC11957FD9808C92E8A678CE9DBE40DDA0E0D1D505AAFBCBA208232BFB6FB3704E8985E61ADE53DE74152F5C7DE74B1DEDCD37DC3E8FB30D7EBA8B9EFFC3606BF90B8D438279CB7709FC7C00D327F41817EEA71CD9E49FE9C8C9A81C70915D9F0F15958EC5AA4C3BBFAF46986B90F188BDB24B89DE3C6F29EC3E +310 +6F66D84856EE96A35E657CA41B41EFD8DBFA16AD6E91439EA92B40B21C053249F51AE50EB0B24C770FFAF40DF12C8436366819C48E36547D4E7B72FE2BBF10828583057814A668BDF183F6B2E58DFB151103E56303E63D00F39C27C4661605DB644D19175D02E3F0241E8FC3458D17AAAADB117CE9EEA690D0DB01E634878C +310 +04C2C9310B69FCAB831151E3AD293BEF6E46B0ABCECB50F5939B39C613D41E81FAE8D34CAE3C4566B761D37185FE864AC32FCB71AEF39DAA5BAB88609BB980CD2F07A8F941653B529567726E2B2A58D079DD57E1E5E31426CF184A04D7B03B985F276D47406AF276FE32E3328BA866EB1FD39BEF57863A317634AA5FE46740 +310 +9B3873F5069EF0D71AF00AD189D17BA1974ECDB2D623E9E14086386A6AAB5807825C37B015BFE892AFD154920EC437EB945D958E18622E1E0FE2FA06557CE4BB9BBD05A2D40E774DA2B65473791E314B7D6C886820B2FCFE4AA272B3B8B15E7344A145E8AF919B5454D89D36D413E87211186BF6F645E5EC94DCCE8E1C7990 +310 +22E4EC9BC86D7A0F2AFB1FC4B2CE48F84B3F49ECE65BAD24CADCC07EFF39AB06BE9E6B27A059938EA7208838455383DDBCFCD967DDE4650EF92A14FF933C975DB20BD7FEEBC4487576485963D757D16340D9599FEB362F775F38CA4185A86F74B629C81B133644A3B18FD056E997E0734F9BE26D11C0AAFC669E2AC9FC41D2 +310 +81F8B2E1C35AE27BCE05F3DA295488096688719D974DF1B5D182DB7792288697F8763CFB43562C1CDEE11C4AABD5C22B6E33F6F389CFC3477C5919DC0D533F8A7A1846B7ADB60ABDC26C43D0CFC8910B7C15EE22675BD02702ED39DB77A87A192CA7A543E6205B979B9F5A6B512A3CA799E198B2D5797C0AF8D1D872CA455D +310 +4D431A7879D4DD76110B5FF7F4176B54477A9EB5E4A5D11214FDA585F0382751D8E2582BA5D2075053298FEB8F1537304E32CB22C2E2B693DC0A760B1DFCA751BDC445AFDCBB12820ED85F6D5298933C7EF1211E9E057684056CDA3FEF3BB6052355E162DF27C59E965A8DDB7F9437EB72CDDA3A090DE65A5B2F50326247B7 +310 +EC67B73ACC7047FC9B353D6EE990F772207C6EC52B39DC2F3C0754821DAB559F7C1809C7D0DD5B0499D0442E0A6E391B3D5DB46D11E731E6794EC77523FBDAA242ED67F9FA1FB684255671F63C9BCFE6E7E896D51001A6113EF2298BA494E0B0980D1FA5B9D60796554C02256B1E0345FB7C6186B6A19D2DCA270416262845 +310 +FA4F42DB5D9B0A0B6F07FCA2E56C242522E001E0CEB734AF310FC8BFB57E38E03AACE93B3326A2197891E68452B26A6307FDABFEE0223D3C03C3C73D2D5BC054C8311F12004CAE488E5C29287F8156A2CAA4AD0D7BE6B97264E4139F437CE73ADF52E5134C52B819777C18B323A5924E4F67AFD13B1CDC3A61793A79FAF5C0 +310 +CEB718E441071E797C6DCCB9EFCF7E4A1E9F3DF3C2F9C9E8294E9586868788C972857FB0556D7A26941A7EEB9B580AD78EC40B85DC906B4120A563CA3B87797ED612D3B035962BB75F6515A393F4CB057F564CDF54F2E5A024514E6A1F901DB80C7E70B1FC05E356A7E72FABF4775B3E3FB8F70A2A8E7B6A94542BB3041579 +310 +78CCC999E707A29CC795E67A59CC546A5D47B368954CA7B6E75EC9E1F6FC73CE3B4F71F8CB1A6B15923D61EAAEB14626AAA9D04A26EB9C66CD1BE86CA31A5D8703DE04CD1EBCE4F5CCB62F93909AD11E55799A781A956ED27D3E738F4538CB04ADABC7DAEF20BC35BA6A90BCC1DC61BA05F20D8832FFB9BC9B15E2DB838A0A +310 +FBB7E0C82A562127E0446894F427794C3037186F622BF24DE1B00AA10A23BFA47B2A180D6DA5AD6F7326FEB8C100C2D7142EB2A0B2A9D1008A09BA343D70E054AB69E2A7EDB783CBD92537FAF4A44D1296AC2792729104B3276C276C951D0CF3CF3F1E6B017720A7B8505A5FF9589365979678C36F1BAF759EAF57C60F1FF5 +310 +FE9DCF5F8E764FF25A2D06CF25117A8FED51884C13B2B750DB0E4F5E3D64124FCF11F0AD8F1CC3B3DA4B38ED22BF1CB2585EE6BFEBBA63FBFD44F9537B9B37BDD6B358720F98A8125AED4349CCFEB0E135F19E208A04CA7E2B10711185D72E381F448036EF57C9F874E54A971CA37A639E986AC0226DC5AA00D5B14FEA9192 +310 +234B3DE617814FC221C92F33F1D392F297731B567FD98FD91D989379AF567A65B8ADF177591DB90FBEA99BF4ED11B16E50A0AB1DBF1156D034BBE04D69D08F939D8E92BF525A1DDAFF80ECBC95D8F45D3FDD289FD23F7D8B452F8EBB34EC082DEEE68E18EDDF072060FAD2AB1504DD4879BF67099FC58F6E9DEFBF645D1633 +310 +4A3E9A127C6F1AF6132CF287E433B43A0EE93812B4AA0B194E03EE3FF91EF9C6ED0074A2F6EB18A96A7C9890B1FCDA1F2095E944DB911ED54C60DF16FB74C8CE9BDC7C54C4F14078CF73C2FFF1F1BBCCD7CF64F71407EA1683DBC410D226627F66E509060D5C0AFD611DE681D509DB8DD12FB1265B03C6F5C55FF4C30BD941 +310 +87FF692B4F152982502F193098A789526A038AB529A52BC0DC4FB6285CBAC10A8B8DB75DCD9BDABBB221E27D1F8DA9F5EE5926A1C8AA9BA9BC09239C6A7F12914EA3B59EFF7AAEC3FFCCE56F1C5C2980AD072793527565E774F4631DB178CEEC691B1F367BEA0CF2907E1D6B854D527065979DDEF002D8B2ACEA7CE21AE297 +310 +737EDE1D45B31233B73FEA35BCFDD0B09721FDBAF6432681F2FD10C3E9EFB246FD6E854B344ACC9D8A0EEF876A7314B49B6A499FC650B099D650DBFEC7638ADFD245E2B7839DA5AC5F7D5623FC0ECEEC8653FC9B2BDD1AD4D00A566FBA7186DD3C9CD26512551637498CADB950FEC71ADB9A5524285DE328B8EC7EC75D2345 +310 +AEC6A27C42AF6D9B92155315C80DBFCABBB7DA0FAE425C4FB896B15C9BFAC4FE67DF5A23D30C93DA4D8F36FB15D100050DA6062E22AEC5F4DAC4F6FEEF97AE05DE63C6D38F9E068A20BC5E3B6BCD75320C5090924E7F93640A7735B1A43451C2D91EE62C6238B797349E59890AF3A520DF4A87095F3ABEC2E61F0593416CE4 +310 +6CDCBE0E00E2523FCCD04408588B5B6C9DB6459C786CE378770B54F51DA3A5E1DF2A3349BEAAC234A6CF8993B598B3B25B4B113E353A4D750FA7534749430F3EBF2512E7EA3FD43C6AB9A1F765A58463B306721A15D224FAFE8C6F5E3432D57EE697DA0DD5A9D4866A8BCCAAA9DFF1F06047851408FEC060471D0E3EB86BFA +310 +F46E4B5E60311DC3E3CEA147C75CF971BE74689507154FF2D2E92F15CDB2B9182B11459FD8ACAC5A85F174BC94A7F4EE4C4F5CAFA7C02E37BF0BC77B7DCD0C047BC316F562A01A441AFA7931CC84A28CB9F4AA367EB515778F29BFE61195FA671F4352E5E46E3A64773F1F76EE5EB36D7BCE9BCEAD837A4D77F8DB8C92AEEF +310 +6711920D7C7D0F76B0FD0EB7AB83724CD35BCA7D36DDDF5FBB7FF6F04A91F3E2BB3B8F1A43CD659639507FF6331C5F697BCC782AE57D757A27D97F1AB9E0AEDB43F92F1B2AACDF5FEC8ADBAF9F814E2027003BA2F9E144B1938A7A04050AE5D953B82C45619165C813A10E76DD6906B3C16438064D14CDA713AEC420034613 +310 +E1AC7241904A49FBF87409AFB1FCB9B72FE7933A87D8FBEDACECE4EDCF6A4FE9FB94D5DEB74FAB7CFEAE17EE965DF980DCCA2D04134994F9A2E94D2265DA4FE6AA7B7AC15FACAC2B5ABBCD7DFF542C5314FDAB2E1B9D8B65220B8E2B638BE008E8DCA22678C820C5053664D15E89F2D735B51A84955E81A443545E9FF787BE +310 +0FA700A76D136C27DA179A7C6E8939E01BE756E19CB292798063D8B97F44E8A27BCF3A614FEB8BE974A718E86F7EC99B53CA35FA24F61F2B07266684623A3D4CF073E511F3A10A8FDAFAF0078C577F4DF9D339FE7862E5FA47CF4344209E5BF76D783B1B48E152AD281B15FCB934DCDA49CEC5706B1EE8B460F435324A5CAD +310 +154725E21AB8044B75A557A79F6C807B9340AA3D92503E866F4274412926C8C504E4D5EF8C0E68DD0B028781A6B4054F11CF18941F101C57CCC796773ABC8DED9CD91FE5788806C05E548895354AEAC96546D55B0E94A59F148D061F42AA398D822CDECA4CDE79E13469BDCC44FDC990F366BA5978C15F97ED80CBFD73B0CD +310 +9B8B83A4F6845BDFBFAF034019473FB9A63BD55D3A4A7284757071574029A4D016DCCBE95DD679EF3C4880BF169422F8C89B68A988D2B13793CAED4F74DE7486C72DC94DF46B8E93D8E02EFCB1FF9B3BA10C8AE7F653DF94F4AF466CDDCEF5776687F7C4C14B63E4EED1719DC2EC482D7DBCC7AE518CDE3D5FF86D39000EC3 +310 +673C0044E1D308BF05F74D1B5F033A7D1BE7F74BC55BBE3E4A20F920946CA0271EB17BD2B80E5660ACB8A29A79F5E4BBA49D4D945B6EEF4A7EFEAA65E5555BBB57A7E15D2F83C69F30BBB978D2B39F1F26FC097424D39BB33CA3D87ABF64E307938B685BAD44F71556A30B7E712CA4FE600613C3E554B69ADE949A7CFE214D +310 +F1FFF05CB82151EC6FC31950239F94CF7AD39DC473F6EA356E5EC2C4EFA04383CEFE985A127484366FBEE3C0EC4FEA363E4F6632AE781392FD45D67B63FB8DF70E82734F431FD3443172A0E30A83D60982D55FA6A2CF86DBA8382502ACC6CDEF3B907982EED1160E14863FA242F9757347E1544275CCDCF71ECD5F8621CBEA +310 +326B8BA884AD7F825781923E66971F04010D574C541D8427A438A37EEF8AF88240EED7362C953F5A81DE2D56109CDE2524EA0F5D2F87308C0C47BD97AD605878AB8589E17CA83930CB5E0DCCD75853D68B1AB136594926DE426C367428E9334AFAFF90ECE221BB5DC9E5BB53D2CDEF954EAA9CD814F0E5725F1965DD458E5F +310 +8487683AD86B9D0076BE3EE91EB1CECC5331A67A3F79D8B27587C12EC2A6A70474749F27B4C0BBAFB94B34189E88DC18964BE4121B9137FD516C7755356E50D6714E31ACD222621EBBCD1CFF81D87479056A9DA0E0B8EA19D24CF937DA89F78E8650CCBDC110AAB6C4E46DCBFD0446BA9E2060E81F314AC2031E88135E5476 +310 +AC0160EF5C0DD2EEF1B8B5CB2D198BE9A554A9093B5F7D7E4B5407DDFCA1D9C152FD97F55BFFFDFE802954DFEC8995B983E28AC92F1971E28F531DC407A1280EB125F64A72E617EFB27DFBCEDCDA2D6F2BDADA36873EE46B9BE1782998C63DA7182BC383FB6FD15DA472B175D7E8B4FC88F38D6E07FEAA3FA3CBB8F6B449EC +310 +F14D2175E5C5CCA3A42ABF24CA6C9395AF74535F4DDB38CB84F56614B0FD32D7E19CA5CF988DB4449C40E23DF2B16772594554579094450F56F253CD25EA7F77366FB1CFE79696C428BB64D5A41E986189427E5E4D7E2DAE3D5BB4972B3DC44EAABDDDD63A2264ECFA5C786EB0EE1FDC5BE34FA0F08376869FD1E61EA06CAE +310 +15191135445EE8F0394161C3266A596AA035572BB0C8876180D8B9C77D307DF9DCDF7365ABDA6F3A2366436457A4DFC1F259666569A9E4A79C817BDD5610E5200FCE894A358EC72858D50EF67545DA81C6FACE3D457BAF70367E1E6BDD9A952FB4F56247F58F523B97E640246051A72F79BE42FFA0B3187F63097F91C48B86 +310 +8586F714B0EBD5A00A8412C1236E1298F60C72BE6C96B82B404CADAA304AE9F303176B14BA53FBC2D5E86377E35542019E24D97B96A49B2C0E5006E7795954DEAF5DA58958839043C6C70BD3B1B33B6DC5C31316D8A6923F142E26F6711A2258AF977DDF1F970ECC4F1F2B434B96D81BEB6E89BF3BBB3C7C8CC80505070723 +310 +D6D7D7D3C8CA27CA164A26024FED94B12A86031867241DA53D929636DA600F050BC40CE48B8BA03D69224720DEE2ED2127390BDF5E6EA64527BBD4C4C63FA76BB801FEEC0E61218EC98A8A86CD8313781617877E66692839B9468CF4DB8E50A73986E558E309C0D6F676F921BE02F1185454DC75B111572FF9D27D85EA14C0 +310 +5AD7271225B391C4275659CA4A43759D0BA44639BE4C30A84DB7F67A41399FB95CBF923B1B1672ABC807C1590557FB18D811983FA97F5E609516D62281D38B1281F68FC75528C35E4CD7DF0F7DBB5E5DD69C414EBEA2F4A5B241B996BA77AE6C772E367408C633EA3E438B68563EA8BE7667F3A4C4FDEEA52ABD78A2820F44 +310 +3B7914A15F180018D231E64519C56A12F6CA7C8DAE18F06F6B769DBF92329EF6A5D18FBCE600F36BD8E8198DE5CDAA96181F3A756EBA5501CEE58F497EA4F418A2B82565B9BCC611713C0B708CCA1F398B78C5F7D03B3437CC18F13061F55C7BEDADD5ACB1DB0E36D3CE47FF6EA1A563A57E9649EA5D14D1A50EAA45746338 +310 +1C073777EF1600607BAF6428A7DDC079D47A204EF1E1F1F0589FB054D45E02CE623B3823C317C601E589E22B1E88B448524B86A82828E32345EC18AE17214B42F8C41C6D428016D9BA31DDCB47572561E5A402E5BA4FCE55F78AF7268524AA04130F3A20BA5D1E9F9948EA48FC8F5314FDB35E21898198060034ACE5E3E2BB +310 +CA34092518F275190AF65F45867FF0900AA4B81F25427414C372BF51DC29AA855C5428EE1EEDD6B849AD60F6E73475C2D2523F8A2772C840A478DED18A8C5C91B085F255DC4F54EA7AA8947354FD17ECF8FB3B4A0DE7B483CAF3A1165EE05BBA413E5C1FEF3DE1D6B8F2F3F3251C17D9FCAB48A9AAF63AC773A0E413BBC46A +310 +9ADF84A566FC920E4D8C52C9769EE3301CADEEEDD92B312E02E2A7E35B7F1E7D203FE5A7D75578B06E99D0E46FFADB8FDA17ED8880390DA29094202D6F645F76F6F96409CDA05495A96E84B04A00D1A6C6C81D7F3DE9376E828CCF144EE50E364ACCE7237EA0BFB5607ED1AC3CFE73794E5B61739D14DF1743441B1AC98F00 +310 +ECEDE9E7301FA29755FBEFA68C91EF2B314CF510537EF1ABFC9A762496280B546F5EDAAF8A5B387D469FC9A878A92828C88608453ACEC6094DCA54111E7AD5B2663DFE2DD151B7F123B9F4FEF8EE36AB125FD7AD52A59B1B765B3E3F73E3F73DEA93875004D2AFFE3CDE9493B87A9904DD052028949041A91DC0E1BA47BA71 +310 +4343FD5B25E0A6A09503AFC17C790058A836A324FE31D7893512E28230332F153181C1E018E1124EBE1BA262AA428A518237D1EA7275E48C5C561BD19ED6912EDD8367DA0F31E40EEAE9683DA9257525AEA7B632B97119E17145A90231768A4F3B9120FF32E8319B015E3CBE26F1A754177D8185345817C096B0CE443A955D +310 +13AC15E1FB5DEEA0239EC32A3C92241A237B0B02FFCB4F93CF2B02570C8D192E2F2A68CEEB42F12E6F8CEEFF46C251E22B4341C56FB08CCE550E7A9D6F4D6564B9EA52A83D5BF2C6E03FA19D2775E15A8A7ACF30A13C259EE7F5EF2AC3BA354F1500E1A07FC63FB4686E2F12EC69719F9ECF5FE3F35598DF2CE944008CE78F +310 +0911BA5BE5D0A34E0098FF038669C26030BA9B300303039852A8F6F496341737CA7E0D2E3AAA36DE0A70AA7D9CA0D54D9AD84B18A44C9E625475E1C97B93BEBB38DCE7D227E67A2D00F531436136355F243D1FC0D712C5765754FA22FCFFAE97919161F46D6E61ACB37D83777B385889770B50765B127768443A5C4D3A4E35 +310 +A3151111F146B7CA116F918A049F1C272F2CD7976C69A0068773451659A97E0F4A08FE604C3FF6CE7385DB19F4D3ABC8A0D80DA8A42096AC377DB49382B36E270B6FA7570188B4B7D1DDDDA82ACA487CCA5D38BD3BD039ADBAFA4ACFF27809239B722081E2EB9F145320553D183F28471C388BC8814E5045676767AB58A8E7 +310 +2D1CED2CA731379515D2E533E4CF0B39DFC625F97AC4836831A4DE330E87A8126FA17EBE583D614E71E22A8DBF2825599743E0640037303E8E1B1E8EA4E1ABFA4F62907B5E4E0E5DCFDAB417C36C6848A2B8D15F1E505434C0707E16B1CFC2A1C36A42BBF55734F8F4301DDC2A5110CEE8C0747F69519265012A2174BF4E95 +310 +5ECD4FDE095A3ABC70536B7AD0B9D7892F81287D667C108703C9B66A221E9A0929D030008F77FF6F5D2108EF5706FC87A3069B976F7C9FC3239D13D283CDEA83597461079FEEE049B0F392889898B7D87D31F8D60ED7B56B91823A8E4EDDB36C6172ECEE42BD42B12CD67994FA0F0DFAE9389356F4CD4425A4B8AA55CBF7EC +310 +D585C6A2C2316791E43D5C06841ADBB226A87FD61515FFBB0167B74E56BD7F3E90A57A97FEDCBDF483A0D6699A8C0849CAEB4947FAA90D8E332D9DEBD9F4738C37DA0CAF9CF3DAA68BCB67C420459C7A64498D6E848E5CADE92BB6901F607AA331104A67F7CD650EE169B1DAE94D2C31C2F993632259B6957E246EFE4C5481 +310 +107B07118607700040E5812A2A2A38DA0076875258C753F60E0F2662C748EDD5F3F3686B8FC3BD6FE631ECCAA1E8B1C1E565AD117E54893E79F4672E32F9E46B2A183DFDCF3EECB4D4D077DBEA0DA254D256045109670050129E9B9B1A9E4A11344D61497A992778095151510C4BB7EF2009B63AA4360635312E4CF668B7E0 +310 +D3D85A8688E2BD83B569439892ADB63461930D428E0DE42E4AC57CE48DA5CC1449530D8BD3D6A0F08DF20C8E8F570F2CFFFCEA286E30969B4654D498A58D9DA782E19FE3F002181838925592C4A1EF0B332D88B61A92C644547BED490D3A42CFFAB70E36D961F694F6307F72FF15A1C79D5B1B5CEFD353D9E2B52566DEC8F8 +310 +F09CB3E8359C0F68EBBB7898243E34E12A015B2685AB303C04D3A9E00671FF3DFF0A184E4A2ABEB2B666AF5B3A209C73D8EF29DCDB069C9F391EEE9DD0F74C7BCDE16F8F02E3B8816122BBEB50665775B600549D8BB33A54A6BF940C028118BC6878C79958D6784F9DEAA6E26748386FFAF8D0D0101E2847B6563F5D8DC1D7 +310 +8F787BE00E2C941AE12148D4A81599FE8F68D4DA5CDED75530ADE138240300EE13B0FC13A1687FED6774662C05A2B7DFB186732F0D7A93545D8B0A6390AE5054D9CB582DA846D7A061B3358B45E2B52DDE63E114397EDB7E09233A579155D795BE76102CF277F4DF8B188C4F2879BEAE3C08347124BF9ED23B128259FE107D +310 +31E34A652F090B30B39E0D9AF917B76A2806135621A8A60681F16AF216514BBD02711585B5B1AE823F4B2D0369EA5B6BCB863072727FFC871CA6C9AB79A814D989057E9470A3D238BC87CBB4A0EA49AFE2B86F22E499793CAA9047080450166BDC357524561E258C77CB697F1ABB32562CF87C3B7AA12F911EF19FB3E5C022 +310 +22E887D08202A60A17151F5E053A86B437771088B4FEE14D652C43E8D939995D34545E12E2FF93D4E366EAD25F10CB7DED141563C3D0C447AF06078A91135FD4B9611583CB4BF3BD167F2399CEAB0E0100F8FFC305F00F1711717173138B4B48C83022295DE657EFEDD97F238ECA80F528AFB4F8D67AD4E2594B9A3AA86D74 +310 +87EFC313BA95745C186F0CDD84CC12DC9CB0424B42203D351FD9C0A3AF10CC7F388E0329279087386421F194F4A29464C1DEF7EF8BE515E4A199DCD5B909342598D8FE6A231F71336248D5CEC5454455C7BE383B3BC7B260FED27F703FDC39A170F3827239102F59D4DEE7FEF82EAA1A5E4BA94DCC4CC44E7E2EDE20F24244 +310 +E4454369D2E87C3F823F193FD4FD27E1C23984B01898D15ABC20711A8A558054951A6AE280096BA36CBA439603B7B0B4C45F248C14B2383B4B5CD8ECECE4FF859AD4A6CA2326D020EF090F4041D28DB66E5256B56232CC52829DE8060BAE6BBF37D4B7469B822454FE93210A3E8D15E69FFCF01123222611C51C4FD0A041A0 +310 +CFA2471CF6BE38D2B20FA4C3525B5B8B586759475CF80ADFE67A284AC24651E52B8E683D24C2622642F27E7C3C22783BCF63648BC398BD6CD0D9C97E7E7E3EACB6126DB7A6C1FD9F1031302EE67ED96F22B77C7CA0239BB324207559B105E4693EB26EC46182A92C9C0DBD24F29B31C5C5AC1F84300E0E17CEEAC15F5736FA +310 +4A98971E2F1423BFCD68D4BBD5F86E74B40A369F39507C88FCDB35D2DD8DEBEA4AF999E23CF2816D204200DF6E611781B9884C1AC8888B4DE397320472959434323A5A36B22A8E1F721A270DF3BD65E4A31C11FF048AFB0D8B7B6881423793963A23CFCE935FC189ED36FAE35C46DA3574C979E4394BE52084F3081837BE03 +310 +3396D2EBD80F1F691B273F660D2B32FA27A33B1DE4ADA5F0FA4651511102DFA410DDA86E065272CA314D5249DF91B06BB92807B28EFD54F08F7B525252782CD276DD02E6B0319B13DF87B1F6361AD6B28FC0D711CF445429B9E5A433CD493051C49A9E03DDB1B147D880253514A5DED88009018620EE229101C041950E2D8A +310 +A8E1F5F5438E0C0C0C60EEDEE9E3E0C051948C69F84BB7B2A48A1F3C8EB9E6864687F4F4F6F6E2FA87608ADAF9C5E117B7C1A737E710769DA1D15ECE6A84502AA855398712D5FB51BE92E4EF824969CE18278798AC303C2C7980DD2500ADF8FB1E6D6C2FAAFF9987178923334A244758BAA01A9A1B70FA5097D01E1CC2A58D +310 +AD0EC94CE6430AA9B0C10D75E3C6BAC670EFBADEE1607739CE0FC18A2587E3EC3058562014C64219C69BC269082D5C2F4A659278D585755912176D78A1B641719C2A394CED495A1AC5D583FD2F5EDD93308EA7EAE8A6DD396598BDBD3D4CFED62D18A5BDFDE0DD5C80D1A89BA62697B131AE7CE9A6594138582F1B37D68F17 +310 +49AC7CB67A70695D48A4A056AC1FBD4E82358CEAE38F54B95A9016F9000F9879C0D9D131768635CA798895F27D6F1614F11F2838A83611AA51C9A3DDB539D42979C29F10465655C17BEC3E2760B80DCBF609198C7B171A531905F3EC218D696025975E986C6B4C666666787271F202805577DD5A3EF0CAFAF91B62DC4B2DB4 +310 +217A7606282F31D8DDBC290593BAA93EA6353AFA9939B877978481E15CFC9F2755CDC00C538F63A4BA3E80AE009B73CA0185687D339A507D165B74290D6EE46D5C58148F020C3668ABE9EF2F7549170DC80DB41FFC1D678FF19AEB10C7133832B104B80F691B3138F97A92D26E551F1F110400D45AC71A9B9AC41A1A1B1DAE +310 +ED0B0810638EFFB511D46B121C6FEA0F38CD00E03CFFEB9713FE1F9C263E4DDEC160D0497FA9A132BA608584057FB15380825DE6C7FC3C667EE947D488A09898D8E939C4953BF4EC9836344D2CC6B2971B2A21A572B06096F4982D2CC7232D46E8EA69DC83722E267754D777F97F96D5DA74E1E75178084D0E70F12AD33E5F +310 +71EF2AFA599B2BEBF60A5BE475F444F240CBFE8143C334E7ED9150FEEFEF7EB020C4DBED388DD1D6A167A76F3CBF119B578AE8CFA7736ACAFA4440A1C47185638A0D2F3EB5BDDEFDA958FB13CE4AA4923D5BF840392D45544329525749734866684BF7F8D9D54D892E19BCA9F829A0F8BFCBEEA6CFDFC61D74EA1A645ED7A1 +310 +FF241739F15694BD835B66FEC5677E40FE69BD3F91AE402F036537218A401CB0828604AD189E575015C6F3F6BBC8AC79CF6C70653847254B31551EFCBEB5978B9DB85D58D0FA41A9DFE9C624834AA04949D24B5AE6D299E072D152D12097920F14AA92C31C3B97E28B6C2E6E9C23D63043ECBBC0A60FDF5BD0C33C127EA8A3 +310 +308B8B6AFFEB28B4455BF6E7AF4FC6222728357EB8E46E85053E6A8843AB23295BF838ABDA94658FEF3F832F147046B4ACD6F7D48E8FCC9618582961C898D1C7A253C91BFECBDA6BA18A1FCF70755DCCEE2222F41B76D23CA98D0CB3D95F0CF66D57FFF65E2A90F5DF40FC3187621E981BD0BC1D992787212688976B94A8F0 +310 +C6EF646624B570B78E068826F87CE27041A95C9A4871FF65CC17FCB1639629AD6A9517000D63AC231F3D741CB8430777E7ECF80CE7A3F73C0F162F7E56AA71F4DA80A33CD6ACEE78E2C11FAC03DAFCE929B106F8F6B3ED2DC71FF994BD9CEF4E9A94896EF1B6E2B7B4978168BCF0847A3D2A4F1B0500B926E634B174548E9F +310 +BAD27153FB5FC36799B1E6C7C38A94E1F9E996796D7B485E635D5287A2AE76FBD11A341DB3F8F810385BB7296391973DC6C37C452A9305AEBBE0CDB6C566DB59FE60C8E94B1FD090354BF51439FFD1B48D725228FFA88C84F686F547107A7A235665A4593B7C34D748C1AC8D56DD5DA861EEFBADDECBBD65117E65851F9035 +310 +1AEB65F0EFCFF4BCFEF24CB7A5879699FAC437A7AF9099186CF006BB923A59E37D7A36A29FD8D2CBB914A5E9D0A8FD212FBF796AE9A67958FF1D5D8B85F78F96219D4714EB919929241B6C018AAE0C02069F8D919961EC5DDFBFB7573E3AC8E08BFB7C8534BE6DE045B3CD63DBD71F7638BA2309CAE398EA3A7D8F98BBBC7A +310 +EB367EFA5CFA27A9F8F2F52FE878058E6209C026453F8E7E8A237DFC389E9590F6059B397CFD65183BBF936E86896612A5B5FEE49DAC8455D026218AFEBEC12B3523A45B57B82C9C97E02ACFA1184DB18E48CF615DBF39C3CC6F0B4AE6BBEEA2E39D944E290302FA3DE33FA7E40296E2EF7BF1CD855BBECFAD0FD622BEE974 +310 +6FC4FDFDE545AE6E3BC234CADF83A0FB76DFB145BF3828AE3436368AC24989454F8FF70A177672C711CAA1A76107218CF948CA01F873520E7A2B118EBB161ABAD432932029628B6761590C98AB590C8C8C79798CE9F715BA696E839E9131A4BB68BE923F1747FBFF165331FFDD4D05997ACD168F12CA75348DAC04C7F509FE +310 +83898A8B421181AF492861CE81E4A2DD0A30850CFA95E05F097FF70F9E777310D584A75BA7018922E271DAB1D785671157685B7D383D3E074DDB4F1E44EF04B07BAAC75A062077C54B9752C738C9D804D402E02851F3F89605AF189738C18C021D2139EAF72513824E10DDD3047BACC8521ED7E98B257D1166903B1B08FA6F +310 +918FD7E162913FEC7D0EF4787E29C35FBA8C6E2C9C20E9AB30AE42CA2A01A090E7D010C1B5BF9CEE2A304BF3A987FB40D836979B79E18D70F257DA61E808472DD85B82761825779D6B90CAEB0F23360C6F80A7D7D77545E95B3DFF0CF96A827F9B5BCECD2C9698718417EF80FEEDEE938AFF55859D0D540B7FE09435583A6F +310 +04874A0C7E8CF234DF4879722000167F5872CEC6BF3EF7E5A8CC8121E6A359227C8A29C95212F9F735BC72A887D56B8F309FC525BFB4FD767AAEC4AEFF249CFBBD2DE1AB9969A6155C7D8DABC307E47324C1F916C7BCFF40ABA5644E9FFB9238D19ADADA49D9610F01ABBA57E4DFCBDCCBB2B93C8953206C91DE01B0E2651A +310 +6D6C31721915B31F7B7CBCE55466F6D70402788FA91D73BE4ADCBA99A35F17D6B83383704917D6833F0FA3CD45C926ADB8BC17999A4A0AFBCE2541F7B8CF4C2F5FBA611B3E626D64407CB32C122DFF4EF8674D6EDBB86C8F7C6A16D50FA685E2CCA34F8F7D1D8265BB0042E9D7F1F666F7BE5FAA5184DF58E12122A42EF02F +310 +461B3F369AC746F96528AD208512AB56844CF75B97F352DF7995024FB02855385854F3798670D01CAC771AC3E1889EC25F61A20C1F8CAB46898817F9C47E2CDA1F286BF2F358298709FE567C91133E2638C8B53975E753EA8BFD3578B5F7186B7BF084EBA3F77BAC3132A5779902EC22AF2D2E79F42D324E083386DAEE9810 +310 +D1B44A5DAA54513C7A71E52A4AB9257D975B621308FE4D2141CC3DCFE946C154A3C1DFCCA7629EC69ACFA831634ADDA93C0388D2A9A2DDAFCF957C6995BCE7FBB6DC4EBAE79E63EB08E9A25F52F67076F7093CA545CA3053B5BF576DEAD4E0017143C5F759F32B2D6F145B52B67B48909B7C7FCA6586EE385A2189C16932CB +310 +6DDFD9152AE317C430492A578ED27B72D85D40C7C93C097939E1B50F4D67F05334FE9DC362C30B7FF561B95259138ECFD9274C8D695C31B14D4EAA9F3D7FA8DDF652F8C5DEFA23284C799B7D94416DEE81E05A866302DC70192A5368EA65E1CED8BF107A1E2D3119A71E85DC1A7B0C1E93274CE04DD0F2ABC8AC7C987FDB00 +310 +2B6F81757B43502EF7A0D92E416494FAEEA4C9C090CD9557AA4D532F4996A272B94355C5A0E4974EEA9627476F30809B94D8D8D860062E02204643BEC7D0438AF800FC7E2B26955D595421E83C69E1A07E0E3122285835F014AD538188CF9737CE76D464A353FA55A001AB2526B84E985083693BC76FE211CA1D000679C889 +310 +E3C009832C87E1AC2EDD05C302557422DF0800E316FCAC86978A371F025A6C7DAA9F333E7BD160403A1A06EA75AA9888FF01504B03041400060808003D7AEE4A51464CB48900000043010000360000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F646972656374 +310 +6F72792E786D6C9D8F310EC2300C45AF127987122606C71DD918B841D4B851A43646695A717C52A85029031293A5A76FBF6FACEF7DA7264E43906840EF0FA03836E242F406C6DCEE4EA06AC22492573150D1F66C60C640E8938CB705396EEDD86DE9B5042FE27813D640EA63BB001C722AF6E55CB61E4863F58284D5D3F53D +310 +D715CE1C3985E63FD7F1B7EBDD617E9F1E504B03041400060808003D7AEE4A6760DD5E44070000541C0000340000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F6F626A656374732E786D6CDD59596FDB3810FE2B82F665F741A78FD885E3C2475C1845DAA24617 +310 +FB26D032ED70431DA0A4C4D95FBF438A944545B6951EC062132076287238F3CD3D9ABC3F46D478C22C23497C6B7AB66B1A380E931D890FB76691EFAD9169BC9F1A139624796D9F69C428C2B7265F36A793034B8A542EEDF01E15B4B9BA9AFF6564218EB169841465D9AD99850F3842362AF26487B3477B8772641FF647DBB3 +310 +CB8D3AD90343E943E3AA14311CE7C02AACC7404572E0E9FF8248CE74E2F00DDAB65EB76DFE856D8E105C6794C4598EE2F015578DEBFC335C35AEEB79FDE59D3F185B837EBF67F587BE67CD57F3A5E5DDF4DCC570B118CFEEC6A6319D6C9384560A4871BC032DBE98536FE2F02795F8128536BEC3248E7128D16CDBB0C3922E +310 +C15913130D584F88565348296B6DA1D751F833DB3A81A2B1A4A1AD84539F75EB4DB67F030859172B6519E6569EE50C742DB12FFDC19D38E5AAA617921911CA3123881A946C1962A020D85A2A4823C3BD8593323866428B8A5E9D5730ECEBBED4C6E5BEA094FBAF39159E16803FE23C139C917F303B715FBF0D7802690B12E7 +310 +23296CFE920289F1C4118BE5B39E2F1F96401A7B8A0E602D2026DFD4F31B782D782C582FCDE9C7D5F6B8E1F1A1FDF29425296639B73CE1CCD2EF94066BA605C6D7019412575D772754BE02F49F00F98A1763029A63E4D83FF695EC0CC5D93E611168C7700DCB853FAEC1BFBEFA3671AAC353C3D062E5394CC16D7F12A69A18 +310 +DADD3548A7932730FA84F5A4709B1051B0E97B12733F07433168024B10EFF7DBA3395D43308545388528480FBF13877F35E0A3A403F1A6A1A1B6F0DB4151CA619A7E76D2D507B01946C24A559A8CE7F01DFC147C67CBCDC74DC1F628C4F7D2B197784F629243326D6748035D73F96FEB4FC2233FD0648BE8E9B4B629846B0E +310 +098F1B2D6AD948B518422FC0094FC3A566C4CA3D016FA714C5382932B9DE16A7C284262CD8BE04A50BB7DEF5A7B281F2326900ADB10C927BC848CA3131A7525B5520B46B82828521262DF0506A35D816511AA02829621E6A5F9B62930F8833DC1281AAA0A60C5B79AD22BB23FB7D9141F06A25B9D08094FEAC089716DE8738 +310 +D6C62FC37B862089267140200783B3B4DEA05D50817799E70CD37D40282DA2604F28E4912042E919FA1D25A867AE47FCF29CB05D2B41DDB2944F2A1BE2804B6015482A5B95315FEA94E127C2CB4C91CF5436D076C83AD49CF6CFA40B9E295A0055C65806A41B7F38F767336B7E371B59FDBBDED01AFB73CF5AF4EFC677EE60 +310 +058FE64D3E55B4AAE73B50252F7334FFCB1F8A681B2342E101171BEDD277EF45F6BC7520343AFECD68E00EBCA1359C8D86567F359E5BE3DEC2B5EEDCC560E5790B77B5583A0C6749C1429C39BEE306CA24D3F8708E2BC5DDEB180A65CDF564A7F4D514E67F1C439B394153E27F358856B1ABA520EC1A44F9D1660845E1234F +310 +514108555FABFB348268938FB638F7C6B8ECDA3D57FC78DED877C7FE683C18740C7BE2A61F8E746D3284D079167990A42824797B4A6D20D391E5376517BBE70D4A6CD45FDF3700AFCEAB1553973393642A20113AE0608F785FD1124AAF49DC9AF50E34C93212E34CF485AFEAC5064DD786F24BCFD22D664BB220C239FA1E8B +310 +158D46C30B209AD3003AD89CCF10AED611950BC89EE51C45DE2F43AA17F2BF04198A525AF6C6D730F07C0581EA8ADA2C9433CDAF7802FB0C501EB83B2C461DD7A857ECAB8AA2556B4DEAE3EF267F061E5509FD4278D415DD8B2D7BE08DF9CF08C2D070E0F58637952AAEA1A52ECB79EF470BE856C397E01993C343A7E2B49B +310 +566A655E5988E73882D617E505EBE4B1438826CAB694403232345CA276D31B0B4AD1F3A9AE0F2E134DDFB992B8760DD4AE2486D95827415E49D16AC44217620EC8C75D6FF06C85CD55AA3F1C317F79955D77BF480C8CAEE3001576198265FCD1EAF0D64A5DABA1B2679487104A37E2D39A8347ECF0EED4CC69E4DACA7A55D3 +310 +5EABB8D73CA44630E5453CD2DEF32FF42B025543C79D391FCA42CF29D7D73CB5D930D03EF1A131ADD3FAFC61D3A0022B9D4F7FE118E1E70605B9BAE01DF40552DFD6A73941838294E8DBFAC2F1FF4417A214581BBDC104394B2881413EDE19079C40FE865145870E8545381379198C570629F516A1C3E9A7720E9BA32D55A7 +310 +C30704C36C2AFBB72284412AE4CC5B53AE1BBFC1E8944F2FC540CB7E84D64DC630D32818B935C16273021D9ABD85119818380AEA8D112738368A0F3CE397A7AAFF4FC7383A10954E72557BBAE02225D39C094AE154BC5B80BAAF7C309D7CBFE88A1D03E5F0755BE49530A78593341204F512A1140E26858F12DE23941497E5 +310 +F26CB14783A4D334FFA21D9454AD1CB18318C9D7F09E2DBF387C9ABEFE6CA4B43870755EEA98354A16EFD469514EAE26601852CC14F12A72F1CEF9C212782D15192B024660FC7E1C0DFF701649142571B9E4CCE4CB2D63F300AFAA768E1A1342EBEF7A378E981CC85701C11665D846BBEC111640B58CF0796A09B166005534 +310 +AD1980D208D7051CD3F6AF9786AC8E6A53957AD8E5F088F7000638127FFFC3DDA6BEA136B4045F00AEC4C3D317B53071180CCEA7FF02504B03041400060808003D7AEE4A4C5A99CDE2000000550100003C0000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265 +310 +736F75726365732F322F636E782E786D6C4D90CD6AC33010845FC5087AB42C8506B761ADBC444EBD0455DEB82292D6E8A7B46F5F2955A1A75D663E96D981F39777C327C664292C4C72C1060C86561BB685957C1B5FD870561089F23F8C0D417B5C589399822D52D9BBB4E24D17D75467C3BD8BE2BA61C068CD750F1B1B8CD3 +310 +292D2C990FF49AEB9269C574E7ABCE9A4B1E31518906EB896C3DF61326A2CEB8327510721EC53CCAE78B3C9EE47C3ABEBEC1D44805EF44AEF336648CB43F1D84A1BA869A48C0D4000525DA4EB537AAF1178FD77830555B41CAB176D0B1FCBD57CC7ABDE1F4407E5D05537BB28E470375B642D40F504B03041400060808003D +310 +7AEE4AFF15A4A45D000000800000003A0000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F636E782E786D6C4D8B3B0E80201005AF42B6F75B59F0390B113044D83508C6E30BC6C26AF226F3B8BA6360974DA7271430F523308B2B198F9B +310 +80925DB700539227A2FCCB80A18E5640D320F996A81C9F32D6E9129A0D1EF74FCE750E6D57BC7165FBCA07504B03041400060808003D7AEE4A4FCA4AEB4301000056050000300000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F636E782E786D6CCD94C14E0321 +310 +10865F6543E271D9A5B1A9362C4D3CF8041E8C37969DAE5816363018FBF642DDB61AD3E8A1497B23C347F2FF333FC3571F8329DEC107ED6C4318AD490156B94EDBBE2111D7E51D2956827BE7F01B460A2B0768482E13C17BEFE238953A58CB6872D568BB998A12D1EB36220452282343684850AF30482A23BA0EC286761225 +310 +65D44370D12B48EF510F30BD571E244247C4AC668BB25E94ECF689CD976CB19CDFBFF02A9382B7CE9989D716C1BBF166562B978E36C9A9799501C1A3D713953D1071D4465B6D7995EE050F49AFED270EB763E6C6D168253135AA720A01CB04811C78F5050B5E65C73F7C3F3E3C1F35A453A73D28747E7BB136B0536D3848A3 +310 +2911FFEBC20EFCCBBC6BDF92E5CBCDFDA4E149D8D9ECEE931B52747F2721E549DADE5CE30738483B7FFED36241ADAED1F45ED9993C57BB1598069F37A2F804504B03041400060808003D7AEE4ADEFD15167E000000A30000000B0000006662782F636E782E786D6C4D8CD10AC22018465F45FE7B4B2BCD813ACAF23D467363 +310 +CC69D88C1E3F8D5D74F5C1E13B47B69FC5A3B74BAF290605744700B9F088FD144605791DB000D46A99625CFF6E8042B73805158396638AF9B9A1DE0D5DF695FA29CC1B3C9C05238C72CC2F82E3936DAEB8391A82EFC4304BA921D6DC8AB1AF4A995FAF6CCDEB2F504B03041400060808003D7AEE4AA6D797065F0000008200 +310 +000007000000636E782E786D6C4DCB3B0E80201045D1AD90E9FD7516806B51190811670C8A61F982B1B0BAC9C97B72CA7B1037C6D3332918DA1E04D2CAC69353902EDB8C20262D23F3F59B81A079470595414B17391D1F19B4730A5583A7ED43BBE4025D9592775E5ADFFA01504B03041400060808003D7AEE4AECFD112DA8 +310 +00000026010000130000005B436F6E74656E745F54797065735D2E786D6C7D4F4B0EC22010BD0A61DF525D18634ABB506FE00510A79458060253536F2FD89D5197F3FED3F68B9BD80362B21E25DFD40D6780DADF2C1AC9671AAA3D677DD75E9E0112CB5A4C928F44E12044D22338956A1F003333F8E814E5331A1194BE2B03 +310 +62DB343BA13D122055543278D79E6050F344ECBC6478EDCD76CE8EABAE5449AE4298AC56946789C28AAFBEABC53F3EAF09A84A1441B91F0101CD4780756578C173A578FFDDBD00504B03041400060808003D7AEE4A3DEE336E64000000790000001B0000006175746F6465736B2D64657369676E2D7061636B6167652E786D +310 +6C35CBC10E83200C00D05F21DCA56CA76D41FC96062B120735B69A7DBE268BB7777961F8D5AF396893C2ADB70FE7ADA196782C2DF776D7A97B5933C430F15651E5469C55D70F80A4992A3ADC954792C525AE70A1E4D6AD9816CC044FEFDF01FE3FDE907802504B03041400060808003D7AEE4AF9E59A9CF40000008E010000 +310 +3D0000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F322F636F72652E786D6C8550CB6E833010FC15E4BB01F328101947A9115FD0536F96ED502BC1467E44F9FCDA814AEDA9A75DCDCECCEE0E3E3FD77BF690D629A34780F21264527323 +310 +945E4610FC15F6203B136C8DF1BF6820D36C952348302078B1266C07C48DF65227541B210F9039273DC8F83D362370FC4BAE2C67C14786BBE51BE337B6C81CE53B8FE0109438A44A44377555D20252D1AAA3F55B0BE9D050D85CE804FBA999E1A5AFBB7AA6EFF3504FB8486282BD5A7FB6732B999722EA4BD4C1B283A8F940 +310 +ED0975A776F8C4456212ECBC8D3F1F4BD377918E8B1DFDE31636F1BF5B50DAD7D5E1B62B1C20281EF71A105CA474627945176B4A927C03504B03041400060808003D7AEE4A09DF3B46F9000000960100003B0000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F72 +310 +65736F75726365732F636F72652E786D6C8550CB6E833010FC15E4BB01F32824328E5223BEA0A7DE2CB3A156828DFCA8FAF9B50395DA534FBB9A9D99DD1D7AF95A1FD92758A78C1E10C94B94819666567A1950F037DCA3ECC2A835C6FFA2A14C8B15069460C4E8624DD80E481AED4127549B190E5038071E65F2119B0139F9 +310 +01ABC845F091E1EEF926E45D2C90937CE7311A829A0FA99AA39BBA29B08855BCEA78FDD2627E6A386EAE7CC4FDD84CF8DAD75D3DF1D7E9548FB4486246BD5A7FB64B0BC2C31CF525E970D961D2BC91F64CBA737B7AA7456232EABC8D3F1F4BD3778859702658098E16FBF48F6BD8E6FF5D83D2BEAE0ED75DE11023F1C8E780 +310 +D122A514CB33C25853A2EC1B504B03041400060808003D7AEE4AE16FDFE9F2000000B1010000310000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F636F72652E786D6C8D50CB6EC32010FC158B3B3624F12311266ADDFA0B7AEA0DC1C64189C1E251F5F30BB12B +310 +B5B79C16CDCE30B3C3CEDFF3BDF802E7B5353DA225410518699536538F62B8E00E1567CE9CB5E10F0D1546CCD0A30C23CE2667E3B241D29A0026A3C62AD840E13D0454C87B7AF4C8CB2BCCA214312486BF958B9037314149CB95C759D0F3AF543A100114E23B425B4C5A4C0F1FB43ED1F6541F3F5995999CC5A8D566A55572 +310 +D7170D2E49DAAE26356D70F3D235F8301E5FF1713F10FC4E867AA47420E3F0C6AA2CE6CC07976EDE3EC9D73D2B5F85FF32C7453D91599BB0DF6D86ABC2234E539EC782B32A1798C6A3DD3473D9FC07504B03041400060808003D7AEE4A9AD47DCD53010000DD0200000C0000006662782F636F72652E786D6C8D52CB6E8330 +310 +10FC15E4BB79A72491719412E50B7AEACD310EB502363236CAE777798972685A21196B7667767664727A36B5D70BD349AD7214F921F284E2BA94AACA91B377BC47DE8912A3B5FDD1863CC51A91A30146945446BB7686B85656A80155BA1433C8BA4E58E4F11A2E39EAF8976898CF9C858EEEE1B78C3F5825FCC89FFA28714E +310 +96335596A026EF521844E322CE8AE46D878B435AE0F45C5CF0FE925EF1799F64C9B578BF1E920B090632255636CB746E04B3A2047E186538CC70947E44BB63941D77874F120C9D9474D6C0CEF3D0613B44EFB72709267CA3E7DAF26F3D27954DE2596F62748846606F2C50120CF9C06F0C6F9B210C86FC2CBBD5CB0A0F807A +310 +C1AD3629544AEDD652CF6A27403AF4C68F045315944781DF74E2173AAF352028A62AB0C62C5C6FCE0ED3B79E5A61706F9F9ED2A661F56A6EB2B89EEBA0CD4A0B9DEB5A9BFFB09755973083E161D26F504B03041400060808003D7AEE4A46E1175207010000B201000008000000636F72652E786D6C8D50CB6E842014FD15C2 +310 +1E151F5527C864AAF10BBAEA8E02E39051300293F6EF0BA34DDA5D57979CC73D874BCE9FCB0C1E72B3CAE80EE22483406A6E84D25307BDBBA2068233259B31EE970C02CD16D9C108434AA6CDF8F580B8D14EEA886A23E401326BA58380CFE1D141CB6F726109F32E28EC3D5919BFB3492638D9759438B5FC58F926999302D2 +310 +3CC335CA6A84CB375C9D707DAADA7792462525DE2B71442911D2D555C92D58FABCEE8B970AF56DD9A3F2D20FA819CA115D9AA22EC6FE756C8B81A4D14C89755BF8F3B124F474C0B247CC25E94E51F261CC7C084229018C9EBF20CD481A893FA5FD2AFE515A6957E4C7C2DD6121C5A1D09308C1F182613CCF1B66BC36FD0650 +310 +4B010214001400060808003D7AEE4A0000000000000000000000003700000000000000000000000000000000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F617474726962757465732E62696E504B010214001400060808003D7AEE4A0000000000000000000000 +310 +003500000000000000000000000000550000006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F76657274696365732E62696E504B010214001400060808003D7AEE4AF270F13306000000040000003600000000000000000000000000A80000006662782F3237383530 +310 +3531362D364138362D344639422D393343302D4530433546313143304643442F747269616E676C65732E62696E504B010214001400060808003D7AEE4A88E57597CD3F0000904100004200000000000000000000000000020100006662782F32373835303531362D364138362D344639422D393343302D4530433546313143 +310 +304643442F7265736F75726365732F322F305F67656E657269632E706E67504B010214001400060808003D7AEE4A51464CB4890000004301000036000000000000000000000000002F4100006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F6469726563746F72792E +310 +786D6C504B010214001400060808003D7AEE4A6760DD5E44070000541C000034000000000000000000000000000C4200006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F6F626A656374732E786D6C504B010214001400060808003D7AEE4A4C5A99CDE20000005501 +310 +00003C00000000000000000000000000A24900006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F322F636E782E786D6C504B010214001400060808003D7AEE4AFF15A4A45D000000800000003A00000000000000000000000000DE4A000066 +310 +62782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F636E782E786D6C504B010214001400060808003D7AEE4A4FCA4AEB43010000560500003000000000000000000000000000934B00006662782F32373835303531362D364138362D344639422D39 +310 +3343302D4530433546313143304643442F636E782E786D6C504B010214001400060808003D7AEE4ADEFD15167E000000A30000000B00000000000000000000000000244D00006662782F636E782E786D6C504B010214001400060808003D7AEE4AA6D797065F000000820000000700000000000000000000000000CB4D0000 +310 +636E782E786D6C504B010214001400060808003D7AEE4AECFD112DA80000002601000013000000000000000000000000004F4E00005B436F6E74656E745F54797065735D2E786D6C504B010214001400060808003D7AEE4A3DEE336E64000000790000001B00000000000000000000000000284F00006175746F6465736B2D +310 +64657369676E2D7061636B6167652E786D6C504B010214001400060808003D7AEE4AF9E59A9CF40000008E0100003D00000000000000000000000000C54F00006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F322F636F72652E786D6C504B +310 +010214001400060808003D7AEE4A09DF3B46F9000000960100003B00000000000000000000000000145100006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F7265736F75726365732F636F72652E786D6C504B010214001400060808003D7AEE4AE16FDFE9F2000000 +310 +B10100003100000000000000000000000000665200006662782F32373835303531362D364138362D344639422D393343302D4530433546313143304643442F636F72652E786D6C504B010214001400060808003D7AEE4A9AD47DCD53010000DD0200000C00000000000000000000000000A75300006662782F636F72652E78 +310 +6D6C504B010214001400060808003D7AEE4A46E1175207010000B2010000080000000000000000000000000024550000636F72652E786D6C504B050600000000120012002D060000515600000000 + 0 +CELLSTYLEMAP + 5 +1B4 +102 +{ACAD_REACTORS +330 +1B3 +102 +} +330 +1B3 +100 +AcDbCellStyleMap + 90 + 3 +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 32768 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 512 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 5 + 62 + 0 +340 +193 +144 +0.25 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 1 + 91 + 1 +300 +_TITLE +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 512 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 4 + 62 + 0 +340 +193 +144 +0.18 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 2 + 91 + 1 +300 +_HEADER +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 512 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 4 + 62 + 0 +340 +193 +144 +0.18 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 1 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 3 + 91 + 2 +300 +_DATA +309 +CELLSTYLE_END + 0 +CELLSTYLEMAP + 5 +1B2 +102 +{ACAD_REACTORS +330 +53 +102 +} +330 +53 +100 +AcDbCellStyleMap + 90 + 3 +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 32768 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 5 + 62 + 0 +340 +26 +144 +0.25 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 1 + 91 + 1 +300 +_TITLE +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 5 + 62 + 0 +340 +26 +144 +0.18 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 2 + 91 + 1 +300 +_HEADER +309 +CELLSTYLE_END +300 +CELLSTYLE + 1 +TABLEFORMAT_BEGIN + 90 + 5 +170 + 1 + 91 + 0 + 92 + 0 + 62 + 257 + 93 + 1 +300 +CONTENTFORMAT + 1 +CONTENTFORMAT_BEGIN + 90 + 0 + 91 + 0 + 92 + 4 + 93 + 0 +300 + + 40 +0.0 +140 +1.0 + 94 + 2 + 62 + 0 +340 +26 +144 +0.18 +309 +CONTENTFORMAT_END +171 + 0 + 94 + 6 + 95 + 1 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 2 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 4 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 8 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 16 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END + 95 + 32 +302 +GRIDFORMAT + 1 +GRIDFORMAT_BEGIN + 90 + 0 + 91 + 1 + 62 + 0 + 92 + -2 +340 +0 + 93 + 0 + 40 +0.045 +309 +GRIDFORMAT_END +309 +TABLEFORMAT_END + 1 +CELLSTYLE_BEGIN + 90 + 3 + 91 + 2 +300 +_DATA +309 +CELLSTYLE_END + 0 +DMBASEELEMENT + 5 +195 +102 +{ACAD_XDICTIONARY +360 +199 +102 +} +102 +{ACAD_REACTORS +330 +192 +102 +} +330 +192 +100 +AcMapDMBaseElement + 70 + 1 + 1 +Map Base + 70 + 1 +330 +192 +100 +AcMapDMBaseElement + 70 + 2 + 1 + + 70 + 2 + 1 + + 70 + 1 + 40 +1.797693134862314E+99 + 70 + 1 + 70 + 1 + 70 + 1 + 70 + 1 +360 +198 +100 +AcMapDMBaseElement + 70 + 1 + 0 +DMDEFAULTSTYLE + 5 +196 +102 +{ACAD_REACTORS +330 +192 +102 +} +330 +192 +100 +AcMapDMDefaultStyle + 70 + 1 + 90 + 1 + 1 +Default +100 +AcMapDMDefaultStyle + 70 + 1 +280 + 100 + 90 + 0 +1001 +AcMapDMDisplayStyleRegapp +1070 + 2 +1071 + 1 +1000 +Default +1000 + + 0 +DICTIONARY + 5 +199 +330 +195 +100 +AcDbDictionary +280 + 1 +281 + 1 + 3 +AcMapDMSurrogateStyleSets +360 +19A + 0 +DMSTYLEREFERENCE + 5 +198 +330 +195 +100 +AcMapDMStyleReference + 70 + 1 + 70 + 0 +340 +196 +330 +192 + 0 +DMSURROGATESTYLESETS + 5 +19A +102 +{ACAD_REACTORS +330 +199 +102 +} +330 +199 +100 +AcMapDMSurrogateStyleSets + 70 + 1 + 1 +Map Base + 70 + 1 + 40 +1.797693134862314E+99 + 70 + 1 + 70 + 1 + 70 + 1 + 70 + 1 +330 +198 + 70 + 0 + 0 +ENDSEC + 0 +SECTION + 2 +ACDSDATA + 70 + 2 + 71 + 8 + 0 +ACDSSCHEMA + 90 + 0 + 1 +AcDb_Thumbnail_Schema + 2 +AcDbDs::ID +280 + 10 + 91 + 8 + 2 +Thumbnail_Data +280 + 15 + 91 + 0 +101 +ACDSRECORD + 95 + 0 + 90 + 1 + 2 +AcDbDs::TreatedAsObjectData +280 + 1 +291 + 1 +101 +ACDSRECORD + 95 + 0 + 90 + 2 + 2 +AcDbDs::Legacy +280 + 1 +291 + 1 +101 +ACDSRECORD + 1 +AcDbDs::ID + 90 + 3 + 2 +AcDs:Indexable +280 + 1 +291 + 1 +101 +ACDSRECORD + 1 +AcDbDs::ID + 90 + 4 + 2 +AcDbDs::HandleAttribute +280 + 7 +282 + 1 + 0 +ACDSSCHEMA + 90 + 1 + 1 +AcDbDs::TreatedAsObjectDataSchema + 2 +AcDbDs::TreatedAsObjectData +280 + 1 + 91 + 0 + 0 +ACDSSCHEMA + 90 + 2 + 1 +AcDbDs::LegacySchema + 2 +AcDbDs::Legacy +280 + 1 + 91 + 0 + 0 +ACDSSCHEMA + 90 + 3 + 1 +AcDbDs::IndexedPropertySchema + 2 +AcDs:Indexable +280 + 1 + 91 + 0 + 0 +ACDSSCHEMA + 90 + 4 + 1 +AcDbDs::HandleAttributeSchema + 2 +AcDbDs::HandleAttribute +280 + 7 + 91 + 1 +284 + 1 + 0 +ACDSRECORD + 90 + 0 + 2 +AcDbDs::ID +280 + 10 +320 +14 + 2 +Thumbnail_Data +280 + 15 + 94 + 3608 +310 +89504E470D0A1A0A0000000D49484452000001000000005408030000005AC4190100000300504C5445000000FFFFFF0000000000000000000000000000000000000000000000000000000000330000660000990000CC0000FF0033000033330033660033990033CC0033FF0066000066330066660066990066CC0066FF0099 +310 +000099330099660099990099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF0000FF3300FF6600FF9900FFCC00FFFF3300003300333300663300993300CC3300FF3333003333333333663333993333CC3333FF3366003366333366663366993366CC3366FF3399003399333399663399993399CC3399FF33CC00 +310 +33CC3333CC6633CC9933CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF6600006600336600666600996600CC6600FF6633006633336633666633996633CC6633FF6666006666336666666666996666CC6666FF6699006699336699666699996699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066 +310 +FF3366FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF9933009933339933669933999933CC9933FF9966009966339966669966999966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC3399CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFFCC0000CC00 +310 +33CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFFCCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0000FF0033FF0066FF0099FF00CCFF00FFFF3300FF3333 +310 +FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33FFCC66FFCC99FFCCCCFFCCFFFFFF00FFFF33FFFF66FFFF99FFFFCCFFFFFF0000000D0D0D1A1A1A2828283535354343435050505D5D5D6B6B6B787878868686939393A1A1A1AEAEAEBB +310 +BBBBC9C9C9D6D6D6E4E4E4F1F1F1FFFFFF0000000000000000000000000000000000000000000000000000000000003AE5ACE9000002774944415478DAE5DC5D9283200C00608F93AB7A29EEC443DEB755BBEB5A4190FCCBCB4E9D9D917C45B490384DCA0DC39DC86CB72C0A204E8F06C0D0A7B3D7217CF0F037288056CF09 +310 +320D0F9FCD00E4AC32FCC1CC104859A51FCF0238E906989905F8014E67FF07019C77C10E0073574A377F29806B81042AA77F08004EF60118BB527BF67D0200EACD3C5D02A072E2F000573FFDA203A88DBB1B7D018DF86303A0FAE3972E40DB2A445880C6852F418049743E6E5DF88A0AD0BCF01713A063DD372440CFBAAF24 +310 +80D44369D7BA773C80CE6D8F7000BDDB1ED100BAB77D4401D87F99DFD8F50B057067D72F10C0BD4DDF380037377D6501AABD048DF8A300DCCF7988013090F310026024E72300C058CA8F30C044BF473398F2E31E6034E5C939C078C69B6F00828C376900D28D6A8A8C3FC70034099F7E0188123EBD0290E5FB3A05A0CBF7F5 +310 +094098EFEC118034DD5D1C603C618D36DDDD1F0071BABF3700F26A0F6700F4D51EBE0018AA5D3C01B0143B3902E029767203C055EBE60580ADD64D1EA0180B68C4EF0380B3D4D303006BA9A70300DE52574580B61A4EEE4A67CD11800D5D61AF7456BD04F0B22BFC95DEA601240AFD752741AC76853BFCA5785EF92E801500 +310 +648F5EEEFD01E5C0B004C0FAF023FE0285CA378BE7002813BD5500B69F7EDFB1EB3F09E23700F27FFB396FAFEC5000280980F0F03703F0F90C0237FF6DE0E7BF37B6D801C800F3FB2D3733C8360300EB8104698684F00B905E6DD7D1B4B6ED6FFD0B6C896A7B5F810980E5488279469C4B6D0FF0FAE70E80F4690780BC3613 +310 +00EF432F8072F83B8042A8FF2284B3F80F02DB314B00B5F82F018A478B00962E81F731DC2EFFAB49709918D26182F03809FE004073C0F4110743380000000049454E44AE426082D0E19D1778EC234069096939AD34FE5639AD7AC10D04400AF82D89D129D09899E7173E23E0B1CD046280FB2EC6BA7E4FB1E18680DD89500E +310 +741725D18AF8ACFBCB732BEA60AAFC8652E1BB6210849AF7626EA1F416A94160299B1A4D8F8719135096285B0E474B1B32CDE18A80DC42C58900920D5927A07ED4BAB68143D1939C664BF499F36C8512592DC9B514D03FB595070821AD2CEBE615BE804384A8935CA77B309BA147D67C0079115351406FE0340240EE07821E +310 +0F508810A422B215067568559F5A0D960A9213995B468C5E5B99E002B4C83E8FC7A56CC29E068812AAE1418B1A832DA1904BA2C54CB05933AF0685258EB20222470D5E0AE6F28F8DF592D0522DD00275DECBC2AAC179A6650DE80E924D36CE5A814C034C64824009F8A21AD4FCA8F497C652618843A6F75135B8C24030970A +310 +33C72DEC6458D28055066EFB217BC2A05A087C00B50E1E472C3941C5D37F24FF72BE60CE0404472D2585B3767311CF5A88A5BF7DEBA8E14468C1A0D3264E6990118000BD6AAA35302D23F0CFD502E2F286B8E85136C9D622B954CB8D94717DC45C2D90D21F38B3409E09B5E5BD506AFF3A18D857D92339754FA0D6CC4B04EC +310 +6C8941DE0B9A1F1A05F2129734306F91CF1690BA8D916D9E336702B5F1779CEDBC2379F283363BEB822FFB3D60D70ADE2D612E14B476AB290292EBAE2BB8C8D771EB7E6FDA1DA2FD31AAD8914E72FEA9F6C62DF900A8CDAAA6DE173E503201FC207130E403F26E689980BAE657DD60D512EA1EA9DA5F7703FA2023607F3598 +310 +29683B5B8244007B244293C7E750FA4FDD803AF8771646C43088521844A11B3075893A61C676880475A1F79D30A8D4C8729269A81C1EF7340C3B19C8AC730D2061F0C609A2F53018EFEB610CD3C627DEFEC7615D64F867582A86369940BCD8DAFB7E188489827C886C2C92ED8441796D749A4441CBB309081D813012603B11 +310 +5A903F88662E1A3FF0BDD4A12D300F9A62AE18FA16D517403937DA19A8EBAC9CACBFB134A66D7A9BF7C0D1C32038594A98F7041B6B88DCEFE959D40069A795F93038F432178E4068CE227E540BEC2780B96D2164ADBEDADDCA20A9050C39C17A34B23A317ECE9DEEF6C78FCC42E938DBD10060E1ACF6B63A035F1020D88EC1 +310 +44A81DFA28651D061EC4EF5AC29FBDF3E361A61C8680A49E9D5D383DF7321440533BF00D02ECF403782F17C360029C80A1273EA4C2D05A2BBD6B228742BD1AB690087117D0CBE04A40914E2020B453763704984A8523B905003D0523D583B25BA0CC213F10FA070818EFF8C30978CB09E6EE6AD780DE430F38DC43C3561894 +310 +7D80EA04878620ED05B40E290EA7841011BE31CB1FE4014DBF450288C163EF8E4DFD000CAA0F40B44C405D172004083D21EE04E7D380CC9D749FA277452C100022015A53ECDA09C6729C7018C8AC0DB585092798B644B65521A59A97DA635A763CDD52A5FFD35862987082E9464AD06F8A14C25A62F75979C0EB4B131A50EE +310 +24856AD7E2ED6EC8FA5F49F2FFFCF07426604A84B89B58E88875B5D17B68EC1E2A02015BEE2839DF4B2C7E74700EBFD4806F6EA9F90FF9FCFFD2F323874E0000000049454E44AE42608200323DBD6A855E83889709780758371C2B06A8DD447DF2C4C8B0545B84993F6DDFDE7EEC5A0BB911D01613A32478CAF4F87CD6F68D +310 +07432B93BBEE7D5A2104C727E48E39FE551511B96F50B9C07492FA78FD0423CDA3F3392EC361CAB3B63062E4FDAFBBF5350F733BAD932062CC5A13207F5CCE77412349CC4310C1326B2DB394FDF80300D00FCEFD04CE79B056254089C09A804AC1FF900044FE606FA85CB4955A7F98F34B5A784B8078844B3D58CD5F1E7923 +310 +06807C04238787BF4040DDACD70F01A683107FB22EABDE5560905F41FF895E40CD5A931D0250E68EEA81B473909E4195D526ED0F14079D463AEA895321D43CC0ABE701450225B536A2CE0940FF5940CFDE96B07ED35508901B7DEA5B2307944D91A4F7041289F440F632A96B1260F6499C80A126363FA5065C5724A0B909F9 +310 +973E869AE0916E30CDC0998A22946E8300BC96CBDEF257E92408648780D10D32724084809504D5C3E9CDFCB37FB7671D602CDD997483AC1B20B10F5A12604EB0C38C00CFCEB312A01A74B1105249501CA0277B2DE400DF6789216B3E618E391060EDAC099087D7939963F57403F6D002B5E99FCC42A829780FE500B64EAC1D +310 +099D4840F15A8300733AE0D56E300FF1ECBD66677583DD1038EAB97A2CD019F44EF78593D7B69AF4E7F610D8132DBE4C80D1DEC607794D90A63FB383F969B06F7AC047E1B26CB4FE9D215D075C7749C7970868D2EF81ADA3F309023AFA11ED2DFC07C767F0C1A14F6C890000000049454E44AE4260821B8C822A79F1B93860 +310 +BC17104C60288AE7BD80D334A0997672232B46FA4D203C6E2F0120EF71B91600D4E0952F5212A4AB35E0B91880751C999337325FAD011100610EF357E51F1C10F76FAB9B1FB454EE6802AB7243F3390513006963E12100ECA3C12100600800695FD9BAF0E30068BDF59AEC18ED517AFECBB0A3E4D44357A71EB8685763D59F +310 +D475DFA001B34F9D8D003C47725C75080631ECCB3289E26F00C0DE807D6B0EC791AB3D75B81B80DECCF6CAB25C7A37FCBCC15A6B6C927F44030C0F9C5EF9D0D58D65D07C14E1F1D2B63F02C03A0D780F68DE877900366E87BCB270E979FB6FF101BF0A803B847F4DD0E27F1000877DDEEB359917D8F4E8EDED082C4B8C3C3F +310 +26F488983EEEFF46E903E0E91E71E8F390BDB40432B193FC8E539DC67B9956C3F71DDC6734E0DC382E6BC02B1615643A916B2100633CC30C00CFC7E3717CDF2BBCA2F2FE482E1200D228FA4A0072AB0D98C0591E3D2A5798800500C5A89600905AAD1380C7486100988DBB0D402B50D47DC028006E4E03DC621F300EC0A80F +310 +98D78027D1E03F07C08A38203F19477878F02585FCA0FB0F9676D4FE3F6E682E5BCCC767B60000000049454E44AE426082426082 + 0 +ENDSEC + 0 +EOF diff --git a/src/ACadSharp.Tests/CadDocumentTests.cs b/src/ACadSharp.Tests/CadDocumentTests.cs index 9be73b12d..54ff8a9b7 100644 --- a/src/ACadSharp.Tests/CadDocumentTests.cs +++ b/src/ACadSharp.Tests/CadDocumentTests.cs @@ -3,9 +3,7 @@ using ACadSharp.Objects; using ACadSharp.Tables; using ACadSharp.Tests.Common; -using ACadSharp.Tests.TestModels; using System; -using System.Collections.Generic; using System.Diagnostics; using System.Linq; using Xunit; @@ -445,4 +443,19 @@ public void SetCurrentTest() doc.SetCurrent(new MultiLeaderStyle(multiLeaderStyleName)); Assert.True(doc.MLeaderStyles.ContainsKey(multiLeaderStyleName)); } + + [Fact] + public void TryGetCadObjectTypeMismatch() + { + CadDocument doc = new CadDocument(); + + Line line = new Line(); + doc.Entities.Add(line); + + Assert.True(doc.TryGetCadObject(line.Handle, out Line found)); + Assert.Equal(line, found); + + Assert.False(doc.TryGetCadObject(line.Handle, out Circle circle)); + Assert.Null(circle); + } } \ No newline at end of file diff --git a/src/ACadSharp.Tests/Entities/HatchTests.cs b/src/ACadSharp.Tests/Entities/HatchTests.cs index 15389bfcf..bb3e6be00 100644 --- a/src/ACadSharp.Tests/Entities/HatchTests.cs +++ b/src/ACadSharp.Tests/Entities/HatchTests.cs @@ -44,6 +44,36 @@ public void BoundaryPathToEntityTest() Assert.Equal(l.End.Convert(), line.EndPoint); } + [Fact] + public void BoundaryPathSplineToEntityTest() + { + var s = new Hatch.BoundaryPath.Spline + { + Degree = 2, + IsRational = false, + }; + //Non-rational edges may store 0 as weight + s.ControlPoints.Add(new XYZ(0, 0, 0)); + s.ControlPoints.Add(new XYZ(5, 5, 0)); + s.ControlPoints.Add(new XYZ(10, 0, 0)); + s.Knots.AddRange(new double[] { 0, 0, 0, 1, 1, 1 }); + + Spline spline = (Spline)s.ToEntity(); + + Assert.False(spline.IsClosed); + Assert.Equal(new double[] { 1, 1, 1 }, spline.Weights); + Assert.Equal(new XYZ(5, 2.5, 0), spline.PointOnSpline(0.5)); + + s.IsRational = true; + s.ControlPoints[0] = new XYZ(0, 0, 1); + s.ControlPoints[1] = new XYZ(5, 5, 0.5); + s.ControlPoints[2] = new XYZ(10, 0, 1); + + spline = (Spline)s.ToEntity(); + + Assert.Equal(new double[] { 1, 0.5, 1 }, spline.Weights); + } + [Fact] public void CreateHatch() { diff --git a/src/ACadSharp.Tests/Entities/SeqendTests.cs b/src/ACadSharp.Tests/Entities/SeqendTests.cs index b913b9cb2..a597ef199 100644 --- a/src/ACadSharp.Tests/Entities/SeqendTests.cs +++ b/src/ACadSharp.Tests/Entities/SeqendTests.cs @@ -87,4 +87,53 @@ public void OnSeqendRemovedTest() Assert.False(doc.TryGetCadObject(holder.Handle, out Seqend inner)); Assert.Null(inner); } + + [Fact] + public void RemoveOneOfManyKeepsSeqendTest() + { + CadDocument doc = new CadDocument(); + + Polyline2D polyline = new Polyline2D(); + Vertex2D first = new Vertex2D(); + polyline.Vertices.Add(first); + polyline.Vertices.Add(new Vertex2D()); + + doc.Entities.Add(polyline); + ulong handle = polyline.Vertices.Seqend.Handle; + + Assert.True(polyline.Vertices.Remove(first)); + + Assert.NotEmpty(polyline.Vertices); + Assert.Equal(handle, polyline.Vertices.Seqend.Handle); + Assert.True(doc.TryGetCadObject(handle, out Seqend inner)); + Assert.NotNull(inner); + } + + [Fact] + public void RemoveLastUnregistersSeqendTest() + { + CadDocument doc = new CadDocument(); + + Polyline2D polyline = new Polyline2D(); + Vertex2D vertex = new Vertex2D(); + polyline.Vertices.Add(vertex); + Seqend holder = polyline.Vertices.Seqend; + + doc.Entities.Add(polyline); + + Assert.True(polyline.Vertices.Remove(vertex)); + + Assert.Null(polyline.Vertices.Seqend); + Assert.True(holder.Handle == 0); + } + + [Fact] + public void RemoveMissingItemReturnsFalseTest() + { + Polyline2D polyline = new Polyline2D(); + polyline.Vertices.Add(new Vertex2D()); + + Assert.False(polyline.Vertices.Remove(new Vertex2D())); + Assert.NotNull(polyline.Vertices.Seqend); + } } diff --git a/src/ACadSharp.Tests/IO/DWG/DwgWriterTests.cs b/src/ACadSharp.Tests/IO/DWG/DwgWriterTests.cs index c13901c5e..80a1cd1b7 100644 --- a/src/ACadSharp.Tests/IO/DWG/DwgWriterTests.cs +++ b/src/ACadSharp.Tests/IO/DWG/DwgWriterTests.cs @@ -42,6 +42,37 @@ public void WriteEmptyTest(ACadVersion version) } } + [Theory] + [MemberData(nameof(Versions))] + public void WriteHeaderPlotStyleModeTest(ACadVersion version) + { + //PSTYLEMODE is stored in the header flags from R2000 + if (!this.isSupportedVersion(version) || version < ACadVersion.AC1015) + { + return; + } + + foreach (short mode in new short[] { 0, 1 }) + { + CadDocument doc = new CadDocument(); + doc.Header.Version = version; + doc.Header.PlotStyleMode = mode; + + MemoryStream stream = new MemoryStream(); + using (var wr = new DwgWriter(stream, doc)) + { + wr.Write(); + } + + stream = new MemoryStream(stream.ToArray()); + using (var re = new DwgReader(stream, this.onNotification)) + { + CadHeader header = re.ReadHeader(); + Assert.Equal(mode, header.PlotStyleMode); + } + } + } + [Theory] [MemberData(nameof(Versions))] public void WriteHeaderTest(ACadVersion version) diff --git a/src/ACadSharp.Tests/IO/DXF/DxfAcdsDataSectionTests.cs b/src/ACadSharp.Tests/IO/DXF/DxfAcdsDataSectionTests.cs index 9314edd0a..6b22deedc 100644 --- a/src/ACadSharp.Tests/IO/DXF/DxfAcdsDataSectionTests.cs +++ b/src/ACadSharp.Tests/IO/DXF/DxfAcdsDataSectionTests.cs @@ -9,13 +9,16 @@ namespace ACadSharp.Tests.IO.DXF; public class DxfAcdsDataSectionTests { - [Fact] - public void ReadAcdsDataAttachesAcisPayloadToOwnerEntity() + [Theory] + [InlineData("414349532042696E61727946696C65")] + [InlineData("41434953204269", "6E61727946696C65")] + public void ReadAcdsDataAttachesAcisPayloadToOwnerEntity(params string[] chunks) { // Minimal R2013+ style layout: the REGION entity carries no geometry codes, // the SAB payload lives in the ACDSDATA section and points back to the // entity through the AcDbDs::ID handle at group code 320. - // The payload here is just the "ACIS BinaryFile" signature (15 bytes). + // The payload here is just the "ACIS BinaryFile" signature (15 bytes), + // split over one 310 line per chunk. string dxf = string.Join("\n", "0", "SECTION", "2", "ENTITIES", @@ -47,7 +50,7 @@ public void ReadAcdsDataAttachesAcisPayloadToOwnerEntity() "2", "ASM_Data", "280", "15", "94", "15", - "310", "414349532042696E61727946696C65", + string.Join("\n", chunks.Select(c => $"310\n{c}")), "0", "ENDSEC", "0", "EOF"); diff --git a/src/ACadSharp.Tests/IO/DXF/DxfWriterSingleObjectTests.cs b/src/ACadSharp.Tests/IO/DXF/DxfWriterSingleObjectTests.cs index 0cb984d96..0fd724e8e 100644 --- a/src/ACadSharp.Tests/IO/DXF/DxfWriterSingleObjectTests.cs +++ b/src/ACadSharp.Tests/IO/DXF/DxfWriterSingleObjectTests.cs @@ -107,7 +107,7 @@ public void WriteHatchNormalizesBoundaryAngles(double startDegrees, double endDe Assert.False(ellipse.CounterClockWise); } - protected void writeDxfFile(SingleCaseGenerator data, ACadVersion version) + protected virtual void writeDxfFile(SingleCaseGenerator data, ACadVersion version) { Assert.True(data.HasExecuted, $"The writer has failed during it's execution."); diff --git a/src/ACadSharp.Tests/IO/DimensionObjectContextDataTests.cs b/src/ACadSharp.Tests/IO/DimensionObjectContextDataTests.cs new file mode 100644 index 000000000..233b78fde --- /dev/null +++ b/src/ACadSharp.Tests/IO/DimensionObjectContextDataTests.cs @@ -0,0 +1,161 @@ +using ACadSharp.Entities; +using ACadSharp.IO; +using ACadSharp.Objects; +using ACadSharp.Tables; +using CSMath; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Xunit; +using Xunit.Abstractions; + +namespace ACadSharp.Tests.IO; + +public class DimensionObjectContextDataTests : IOTestsBase +{ + private const string _fileName = "annotative/annotative_dimensions_AC1032"; + + public DimensionObjectContextDataTests(ITestOutputHelper output) : base(output) + { + } + + [Fact] + public void DwgAndDxfMatch() + { + var dwg = contextData(DwgReader.Read(path("dwg"), this.onNotification)); + var dxf = contextData(DxfReader.Read(path("dxf"), this.onNotification)); + + Assert.Equal(dxf.Count, dwg.Count); + + foreach (DimensionObjectContextData d in dwg.Values) + { + DimensionObjectContextData x = dxf[d.Handle]; + + Assert.Equal(x.GetType(), d.GetType()); + Assert.Equal(x.Scale.Name, d.Scale.Name); + Assert.Equal(x.Block.Name, d.Block.Name); + Assert.Equal(round(x.TextLocation), round(d.TextLocation)); + Assert.Equal(x.IsDefaultTextLocation, d.IsDefaultTextLocation); + Assert.Equal(x.TextRotation, d.TextRotation); + Assert.Equal(x.OverrideFlags, d.OverrideFlags); + Assert.Equal(x.TextOutsideExtensions, d.TextOutsideExtensions); + Assert.Equal(x.SuppressOutsideExtensions, d.SuppressOutsideExtensions); + Assert.Equal(x.TextInsideExtensions, d.TextInsideExtensions); + Assert.Equal(x.FlipFirstArrow, d.FlipFirstArrow); + Assert.Equal(x.FlipSecondArrow, d.FlipSecondArrow); + + switch (d) + { + case AlignedDimensionObjectContextData a: + Assert.Equal(round(((AlignedDimensionObjectContextData)x).DimensionLinePoint), round(a.DimensionLinePoint)); + break; + case AngularDimensionObjectContextData a: + Assert.Equal(round(((AngularDimensionObjectContextData)x).ArcPoint), round(a.ArcPoint)); + break; + case DiametricDimensionObjectContextData a: + Assert.Equal(round(((DiametricDimensionObjectContextData)x).FirstArcPoint), round(a.FirstArcPoint)); + Assert.Equal(round(((DiametricDimensionObjectContextData)x).DefinitionPoint), round(a.DefinitionPoint)); + break; + case OrdinateDimensionObjectContextData a: + Assert.Equal(round(((OrdinateDimensionObjectContextData)x).DefinitionPoint), round(a.DefinitionPoint)); + Assert.Equal(round(((OrdinateDimensionObjectContextData)x).LeaderEndpoint), round(a.LeaderEndpoint)); + break; + case RadialDimensionObjectContextData a: + Assert.Equal(round(((RadialDimensionObjectContextData)x).FirstArcPoint), round(a.FirstArcPoint)); + break; + } + } + } + + [Fact] + public void ReadDwg() + { + var all = contextData(DwgReader.Read(path("dwg"), this.onNotification)).Values.ToList(); + + //7 annotative dimensions, each with a 1:1 and a 1:20 representation + //the jogged radial dimension (LARGE_RADIAL_DIMENSION) is not read as an entity, so its 2 are not reached + Assert.Equal(14, all.Count); + Assert.Equal(4, all.OfType().Count()); + Assert.Equal(4, all.OfType().Count()); + Assert.Equal(2, all.OfType().Count()); + Assert.Equal(2, all.OfType().Count()); + Assert.Equal(2, all.OfType().Count()); + Assert.All(all, d => Assert.NotNull(d.Block)); + Assert.Equal(14, all.Select(d => d.Block.Name).Distinct().Count()); + + var diametric = all.OfType().First(); + Assert.Equal(new XY(240, 30), round(diametric.TextLocation)); + Assert.False(diametric.IsDefaultTextLocation); + Assert.Equal(new XYZ(224, 18, 0), round(diametric.FirstArcPoint)); + Assert.Equal(new XYZ(176, -18, 0), round(diametric.DefinitionPoint)); + + var ordinate = all.OfType().First(); + Assert.True(ordinate.IsDefaultTextLocation); + Assert.Equal(new XYZ(120, -40, 0), round(ordinate.LeaderEndpoint)); + } + + [Fact] + public void ReadOverrides() + { + //The 1:20 representation of some dimensions has overridden variables + foreach (CadDocument doc in new[] { DwgReader.Read(path("dwg"), this.onNotification), DxfReader.Read(path("dxf"), this.onNotification) }) + { + var all = contextData(doc).Values.ToList(); + + var tix = Assert.Single(all, d => d.TextInsideExtensions); + Assert.IsType(tix); + Assert.Equal(8, tix.OverrideFlags); + + var tofl = Assert.Single(all, d => d.TextOutsideExtensions); + Assert.IsType(tofl); + Assert.Equal(1, tofl.OverrideFlags); + + Assert.IsType(Assert.Single(all, d => d.OverrideFlags == 4)); + Assert.IsType(Assert.Single(all, d => d.OverrideFlags == 16)); + Assert.IsType(Assert.Single(all, d => d.FlipSecondArrow)); + } + + var dxf = contextData(DxfReader.Read(path("dxf"), this.onNotification)).Values; + Assert.Equal(TextArrowFitType.BestFit, Assert.Single(dxf, d => d.OverrideFlags == 4).DimensionTextArrowFit); + Assert.Equal(TextMovement.FreeTextPosition, Assert.Single(dxf, d => d.OverrideFlags == 16).TextMovement); + } + + private static Dictionary contextData(CadDocument doc) + { + var result = new Dictionary(); + foreach (Entity e in doc.Entities) + { + collect(e.XDictionary, result); + } + return result; + } + + private static void collect(CadDictionary dictionary, Dictionary result) + { + if (dictionary == null) + { + return; + } + + foreach (NonGraphicalObject item in dictionary) + { + if (item is DimensionObjectContextData data) + { + result[data.Handle] = data; + } + else if (item is CadDictionary sub) + { + collect(sub, result); + } + } + } + + private static string path(string ext) + { + return Path.Combine(TestVariables.SamplesFolder, $"{_fileName}.{ext}"); + } + + private static XY round(XY p) => new XY(System.Math.Round(p.X, 6), System.Math.Round(p.Y, 6)); + + private static XYZ round(XYZ p) => new XYZ(System.Math.Round(p.X, 6), System.Math.Round(p.Y, 6), System.Math.Round(p.Z, 6)); +} diff --git a/src/ACadSharp.Tests/IO/IOTestsBase.cs b/src/ACadSharp.Tests/IO/IOTestsBase.cs index b336d8b9c..c7388158a 100644 --- a/src/ACadSharp.Tests/IO/IOTestsBase.cs +++ b/src/ACadSharp.Tests/IO/IOTestsBase.cs @@ -156,7 +156,7 @@ protected bool isSupportedVersion(ACadVersion version) } } - protected void onNotification(object sender, NotificationEventArgs e) + protected virtual void onNotification(object sender, NotificationEventArgs e) { if (e.NotificationType == NotificationType.Error) { diff --git a/src/ACadSharp.Tests/IO/LocalSampleTests.cs b/src/ACadSharp.Tests/IO/LocalSampleTests.cs index 7ea867432..2343c5f47 100644 --- a/src/ACadSharp.Tests/IO/LocalSampleTests.cs +++ b/src/ACadSharp.Tests/IO/LocalSampleTests.cs @@ -54,7 +54,6 @@ public void ReadUserDxf(FileModel test) if (string.IsNullOrEmpty(test.Path)) return; - CadDocument doc = DxfReader.Read(test.Path, this.onNotification); if (doc.Header.Version < ACadVersion.AC1012) diff --git a/src/ACadSharp.Tests/IO/WriterSingleObjectTests.cs b/src/ACadSharp.Tests/IO/WriterSingleObjectTests.cs index bd3e8fcb8..6b1263608 100644 --- a/src/ACadSharp.Tests/IO/WriterSingleObjectTests.cs +++ b/src/ACadSharp.Tests/IO/WriterSingleObjectTests.cs @@ -9,7 +9,6 @@ using CSMath; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using Xunit; @@ -36,6 +35,7 @@ static WriterSingleObjectTests() Data.Add(new(nameof(SingleCaseGenerator.AddViewport))); Data.Add(new(nameof(SingleCaseGenerator.SingleMLeader))); Data.Add(new(nameof(SingleCaseGenerator.SingleMLine))); + Data.Add(new(nameof(SingleCaseGenerator.DrawBoundingBox))); Data.Add(new(nameof(SingleCaseGenerator.EllipseSegments))); Data.Add(new(nameof(SingleCaseGenerator.EntityColorByLayer))); Data.Add(new(nameof(SingleCaseGenerator.EntityColorTrueColor))); @@ -51,6 +51,7 @@ static WriterSingleObjectTests() Data.Add(new(nameof(SingleCaseGenerator.SingleLongMText))); Data.Add(new(nameof(SingleCaseGenerator.SingleMTextRotation))); Data.Add(new(nameof(SingleCaseGenerator.SingleMTextSpecialCharacter))); + Data.Add(new(nameof(SingleCaseGenerator.MTextBackgroundFillAndTextFrame))); Data.Add(new(nameof(SingleCaseGenerator.TextWithChineseCharacters))); Data.Add(new(nameof(SingleCaseGenerator.CreateGroup))); Data.Add(new(nameof(SingleCaseGenerator.SingleMTextMultiline))); @@ -88,11 +89,13 @@ static WriterSingleObjectTests() Data.Add(new(nameof(SingleCaseGenerator.DimensionRadius))); Data.Add(new(nameof(SingleCaseGenerator.Dimensions))); Data.Add(new(nameof(SingleCaseGenerator.DimensionWithLineType))); + Data.Add(new(nameof(SingleCaseGenerator.DimensionStyleArrowBlock))); Data.Add(new(nameof(SingleCaseGenerator.GeoData))); Data.Add(new(nameof(SingleCaseGenerator.LineTypeInBlock))); Data.Add(new(nameof(SingleCaseGenerator.XData))); Data.Add(new(nameof(SingleCaseGenerator.XRef))); Data.Add(new(nameof(SingleCaseGenerator.SPlineCreation))); + Data.Add(new(nameof(SingleCaseGenerator.SurfaceEntities))); Data.Add(new(nameof(SingleCaseGenerator.TextAlignment))); Data.Add(new(nameof(SingleCaseGenerator.InvalidEntities))); Data.Add(new(nameof(SingleCaseGenerator.CreateXRecords))); @@ -101,6 +104,7 @@ static WriterSingleObjectTests() Data.Add(new(nameof(SingleCaseGenerator.SingleMeshWithTextureCoordinates))); Data.Add(new(nameof(SingleCaseGenerator.SingleMaterial))); Data.Add(new(nameof(SingleCaseGenerator.LeaderWithArrowHead))); + Data.Add(new(nameof(SingleCaseGenerator.SortedXRecords))); } public WriterSingleObjectTests(ITestOutputHelper output) : base(output) @@ -1483,6 +1487,47 @@ public void DimensionWithLineType() }; } + public void DimensionStyleArrowBlock() + { + BlockRecord tick = new BlockRecord("CUSTOM_TICK"); + tick.Entities.Add(new Line(new XYZ(-0.5, -0.5, 0), new XYZ(0.5, 0.5, 0))); + this.Document.BlockRecords.Add(tick); + + DimensionStyle style = new DimensionStyle("arrow_block_style"); + style.ArrowBlock = tick; + + DimensionLinear dim = new DimensionLinear + { + FirstPoint = new XYZ(0, 0, 0), + SecondPoint = new XYZ(10, 0, 0), + Offset = 0.5, + Style = style, + }; + + this.Document.Entities.Add(dim); + + this.AssertRoundtrip = (doc) => + { + DimensionStyle result = doc.GetCadObject(style.Handle); + + Assert.NotNull(result); + Assert.Equal(tick.Name, result.ArrowBlock?.Name); + Assert.Null(result.LeaderArrow); + }; + } + + public void DrawBoundingBox() + { + Line l = new Line(XYZ.Zero, new XYZ(10, 10, 0)); + this.drawBoundingBox(l); + + Point p = new Point(new XYZ(20, 20, 0)); + this.drawBoundingBox(p); + + Arc arc = new Arc(XYZ.Zero, 5, 0, Math.PI / 2); + this.drawBoundingBox(arc); + } + public void EllipseSegments() { XYZ center = new XYZ(5, 5, 0); @@ -1884,7 +1929,7 @@ public void LayerTrueColor() this.AssertRoundtrip = (doc) => { - if(this.Document.Header.Version <= ACadVersion.AC1015 || this.Format == CadFileFormat.DWG) + if (this.Document.Header.Version <= ACadVersion.AC1015 || this.Format == CadFileFormat.DWG) { //Not supported in R2000 and earlier, will be converted to index color return; @@ -2256,7 +2301,7 @@ public void SingleMaterial() this.AssertRoundtrip = (doc) => { - if(this.Format == CadFileFormat.DXF) + if (this.Format == CadFileFormat.DXF) { return; } @@ -2500,6 +2545,61 @@ public void SingleMTextSpecialCharacter() }; } + public void MTextBackgroundFillAndTextFrame() + { + List mtexts = new List(); + foreach (BackgroundFillFlags flags in new[] + { + BackgroundFillFlags.TextFrame, + BackgroundFillFlags.UseBackgroundFillColor, + BackgroundFillFlags.UseBackgroundFillColor | BackgroundFillFlags.UseDrawingWindowColor, + BackgroundFillFlags.UseBackgroundFillColor | BackgroundFillFlags.TextFrame, + }) + { + MText mtext = new MText($"Background {flags}") + { + InsertPoint = new XYZ(0, -10 * mtexts.Count, 0), + Height = 2.5, + BackgroundFillFlags = flags, + BackgroundScale = 2.0, + BackgroundColor = flags.HasFlag(BackgroundFillFlags.TextFrame) ? new Color(255, 128, 0) : new Color(2), + }; + + mtexts.Add(mtext); + this.Document.Entities.Add(mtext); + } + + this.AssertRoundtrip = (doc) => + { + foreach (MText mtext in mtexts) + { + MText result = doc.GetCadObject(mtext.Handle); + + Assert.NotNull(result); + + if (doc.Header.Version < ACadVersion.AC1018) + { + //Background fill is not supported before R2004 + Assert.Equal(BackgroundFillFlags.None, result.BackgroundFillFlags); + continue; + } + + Assert.Equal(mtext.BackgroundFillFlags, result.BackgroundFillFlags); + + if (this.Format == CadFileFormat.DWG + && doc.Header.Version < ACadVersion.AC1032 + && !mtext.BackgroundFillFlags.HasFlag(BackgroundFillFlags.UseBackgroundFillColor)) + { + //The DWG format stores the values of a text frame only in R2018+ + continue; + } + + Assert.Equal(mtext.BackgroundScale, result.BackgroundScale); + Assert.Equal(mtext.BackgroundColor, result.BackgroundColor); + } + }; + } + public void SinglePdfUnderlay() { var definition = new PdfUnderlayDefinition(); @@ -2624,6 +2724,40 @@ public void SingleWipeout() }; } + public void SortedXRecords() + { + Layer layer = this.Document.Layers[Layer.DefaultName]; + + XRecord xrecord = new XRecord("MOREDWG_ORDER"); + xrecord.CreateEntry(300, "before"); + xrecord.CreateEntry(330, layer); + xrecord.CreateEntry(294, false); + xrecord.CreateEntry(90, 7); + + CadDictionary dictionary = new CadDictionary("MOREDWG_TEST"); + dictionary.Add(xrecord); + this.Document.RootDictionary.Add(dictionary); + + MemoryStream ms = new MemoryStream(); + DwgWriter.Write(ms, this.Document); + using MemoryStream readStream = new MemoryStream(ms.ToArray()); + CadDocument rt = DwgReader.Read(readStream); + + this.AssertRoundtrip = (doc) => + { + Assert.True(rt.RootDictionary.TryGetEntry("MOREDWG_TEST", out CadDictionary rtDictionary)); + Assert.True(rtDictionary.TryGetEntry("MOREDWG_ORDER", out XRecord result)); + + int[] codes = result.Entries.Select(e => e.Code).ToArray(); + Assert.Equal(new[] { 300, 330, 294, 90 }, codes); + + Assert.Equal("before", result.Entries.ElementAt(0).Value); + Assert.Equal(Layer.DefaultName, ((Layer)result.Entries.ElementAt(1).Value).Name); + Assert.False(System.Convert.ToBoolean(result.Entries.ElementAt(2).Value)); + Assert.Equal(7, System.Convert.ToInt32(result.Entries.ElementAt(3).Value)); + }; + } + public void SPlineCreation() { Spline spline = new Spline(); @@ -2676,6 +2810,27 @@ public void SPlineCreation() }; } + public void SurfaceEntities() + { + Line line = new Line(XYZ.Zero, new XYZ(10, 10, 0)); + this.Document.Entities.Add(line); + + //Surfaces are not written yet, the writers skip them + this.Document.Entities.Add(new Surface()); + this.Document.Entities.Add(new ExtrudedSurface()); + this.Document.Entities.Add(new LoftedSurface()); + this.Document.Entities.Add(new NurbSurface()); + this.Document.Entities.Add(new PlaneSurface()); + this.Document.Entities.Add(new RevolvedSurface()); + this.Document.Entities.Add(new SweptSurface()); + + this.AssertRoundtrip = (doc) => + { + Assert.NotNull(doc.GetCadObject(line.Handle)); + Assert.Empty(doc.Entities.OfType()); + }; + } + public void TextAlignment() { XYZ insert = new XYZ(0, 0, 0); @@ -2833,5 +2988,34 @@ public void XRef() Assert.Equal(this.Document.ModelSpace.Entities.Count, doc.ModelSpace.Entities.Count); }; } + + private void drawBoundingBox(Entity entity) + { + this.Document.Entities.Add(entity); + + var box = entity.GetBoundingBox(); + if (box.Extent == BoundingBoxExtent.Infinite) + { + return; + } + + var corners = new List + { + box.Min, + new XYZ(box.Max.X, box.Min.Y, box.Min.Z), + new XYZ(box.Max.X, box.Max.Y, box.Min.Z), + new XYZ(box.Min.X, box.Max.Y, box.Min.Z), + new XYZ(box.Min.X, box.Min.Y, box.Max.Z), + new XYZ(box.Max.X, box.Min.Y, box.Max.Z), + box.Max, + new XYZ(box.Min.X, box.Max.Y, box.Max.Z) + }; + + var pline = new Polyline3D(corners); + + pline.IsClosed = true; + pline.Color = Color.Green; + this.Document.Entities.Add(pline); + } } } \ No newline at end of file diff --git a/src/ACadSharp.Tests/Tables/Collections/LineTypesTableTests.cs b/src/ACadSharp.Tests/Tables/Collections/LineTypesTableTests.cs index 79ddd0b1f..ef8318488 100644 --- a/src/ACadSharp.Tests/Tables/Collections/LineTypesTableTests.cs +++ b/src/ACadSharp.Tests/Tables/Collections/LineTypesTableTests.cs @@ -1,5 +1,4 @@ -using ACadSharp.Entities; -using ACadSharp.Tables; +using ACadSharp.Tables; using ACadSharp.Tables.Collections; namespace ACadSharp.Tests.Tables.Collections; diff --git a/src/ACadSharp/ACadSharp.csproj b/src/ACadSharp/ACadSharp.csproj index 6645cf5e8..5fcbe30af 100644 --- a/src/ACadSharp/ACadSharp.csproj +++ b/src/ACadSharp/ACadSharp.csproj @@ -17,7 +17,7 @@ true README.md - 3.8.6 + 3.8.23 ../nupkg True ../ACadSharp.snk diff --git a/src/ACadSharp/CadDocument.cs b/src/ACadSharp/CadDocument.cs index 10fd3e442..9cd5e4330 100644 --- a/src/ACadSharp/CadDocument.cs +++ b/src/ACadSharp/CadDocument.cs @@ -3,7 +3,6 @@ using ACadSharp.Header; using ACadSharp.Objects; using ACadSharp.Objects.Collections; -using ACadSharp.Prototype1b; using ACadSharp.Tables; using ACadSharp.Tables.Collections; using CSUtilities.Extensions; @@ -491,9 +490,9 @@ public bool TryGetCadObject(ulong handle, out T cadObject) if (handle == this.Handle) return false; - if (this._cadObjects.TryGetValue(handle, out IHandledCadObject obj)) + if (this._cadObjects.TryGetValue(handle, out IHandledCadObject obj) && obj is T) { - cadObject = obj as T; + cadObject = (T)obj; return true; } diff --git a/src/ACadSharp/CadObject.cs b/src/ACadSharp/CadObject.cs index 1cec0ae82..461375f03 100644 --- a/src/ACadSharp/CadObject.cs +++ b/src/ACadSharp/CadObject.cs @@ -6,7 +6,6 @@ using ACadSharp.Tables; using ACadSharp.Tables.Collections; using ACadSharp.XData; -using CSMath; using CSMath.Extensions; using System; using System.Collections.Generic; diff --git a/src/ACadSharp/DataStorage/AcdsRecordColumn.cs b/src/ACadSharp/DataStorage/AcdsRecordColumn.cs index 24ed16769..063bc6ff3 100644 --- a/src/ACadSharp/DataStorage/AcdsRecordColumn.cs +++ b/src/ACadSharp/DataStorage/AcdsRecordColumn.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.IO; namespace ACadSharp.DataStorage; @@ -8,10 +8,12 @@ internal class AcdsRecordColumn public string Name { get; set; } = string.Empty; - public KeyValuePair CodeValuePair { get; set; } + public ulong Handle { get; set; } + + public MemoryStream Data { get; set; } public override string ToString() { - return $"{this.Name} : {this.DataType} : {this.CodeValuePair}"; + return $"{this.Name} : {this.DataType}"; } } \ No newline at end of file diff --git a/src/ACadSharp/DataStorage/AcdsSchema.cs b/src/ACadSharp/DataStorage/AcdsSchema.cs index 9738f40a6..04517c164 100644 --- a/src/ACadSharp/DataStorage/AcdsSchema.cs +++ b/src/ACadSharp/DataStorage/AcdsSchema.cs @@ -8,7 +8,7 @@ internal class AcdsSchema public uint Index { get; set; } - public List Indexes { get; } = new(); + public List Indices { get; } = new(); public string Name { get; set; } @@ -18,4 +18,4 @@ public override string ToString() { return $"{this.Index} : {this.Name}"; } -} \ No newline at end of file +} diff --git a/src/ACadSharp/DataStorage/AcdsSchemaRecord.cs b/src/ACadSharp/DataStorage/AcdsSchemaRecord.cs index d62fc9fc3..7db8df30a 100644 --- a/src/ACadSharp/DataStorage/AcdsSchemaRecord.cs +++ b/src/ACadSharp/DataStorage/AcdsSchemaRecord.cs @@ -2,13 +2,32 @@ internal class AcdsSchemaRecord { + public SchemaRecordFlags Flags { get; set; } + public int Id { get; set; } public int Index { get; set; } public string Name { get; set; } - public short Value280 { get; set; } + public uint NameIndex { get; set; } + + public uint Type { get; set; } + + public uint TypeSize { get; set; } + + public uint Unknown1 { get; set; } + + public uint Unknown2 { get; set; } public short Value291 { get; set; } -} + + public System.Collections.Generic.List Values { get; } = new System.Collections.Generic.List(); + + public static readonly uint[] TypeSizes = new uint[] { 0, 0, 2, 1, 2, 4, 8, 1, 2, 4, 8, 4, 8, 0, 0, 0 }; + + public override string ToString() + { + return $"{this.Id} | {this.Name}"; + } +} \ No newline at end of file diff --git a/src/ACadSharp/DataStorage/Blob01.cs b/src/ACadSharp/DataStorage/Blob01.cs new file mode 100644 index 000000000..4d34c7de8 --- /dev/null +++ b/src/ACadSharp/DataStorage/Blob01.cs @@ -0,0 +1,16 @@ +namespace ACadSharp.DataStorage; + +internal class Blob01 : FileSegment +{ + public byte[] Data { get; set; } + + public uint PageCount { get; set; } + + public ulong PageDataSize { get; set; } + + public uint PageIndex { get; set; } + + public ulong PageStartOffset { get; set; } + + public ulong TotalDataSize { get; set; } +} diff --git a/src/ACadSharp/DataStorage/DataField.cs b/src/ACadSharp/DataStorage/DataField.cs new file mode 100644 index 000000000..0c19a11ab --- /dev/null +++ b/src/ACadSharp/DataStorage/DataField.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System.IO; + +namespace ACadSharp.DataStorage; + +internal class DataField : FileSegment +{ + public List DataEntries { get; set; } = new(); + + public class DataBlobReference + { + public uint LastPageSize { get; set; } + + public uint PageCount { get; set; } + + public uint PageSize { get; set; } + + public uint RecordSize { get; set; } + + public ulong TotalDataSize { get; set; } + + public uint Unknown1 { get; set; } + + public uint Unknown2 { get; set; } + + public List Blobs { get; set; } = new(); + } + + public class DataEntry + { + public DataBlobReference BlobReference { get; set; } + + public byte[] Data { get; set; } + + public uint DataSize { get; set; } + + public DataHeader Header { get; set; } + + public byte[] GetData() + { + if (this.Data != null) + { + return this.Data; + } + else if (this.BlobReference != null) + { + MemoryStream stream = new MemoryStream(); + foreach (Blob01 blob in this.BlobReference.Blobs) + { + stream.Write(blob.Data, 0, blob.Data.Length); + } + + return stream.ToArray(); + } + else + { + return null; + } + } + } + + public class DataHeader + { + public ulong Handle { get; set; } + + public uint LocalOffset { get; set; } + + public uint Size { get; set; } + + public override string ToString() + { + return $"Handle {this.Handle} | LocalOffset {this.LocalOffset}"; + } + } +} \ No newline at end of file diff --git a/src/ACadSharp/DataStorage/DataIndexSegment.cs b/src/ACadSharp/DataStorage/DataIndexSegment.cs new file mode 100644 index 000000000..e4a4d9721 --- /dev/null +++ b/src/ACadSharp/DataStorage/DataIndexSegment.cs @@ -0,0 +1,35 @@ +using System.Collections.Generic; + +namespace ACadSharp.DataStorage; + +internal class DataIndexSegment : FileSegment +{ + public List Entries { get; set; } = new(); + + public class Entry + { + public uint SchemaIndex { get; set; } + + public uint LocalOffset { get; set; } + + public uint SegmentIndex { get; set; } + + public override string ToString() + { + return $"SchemaIndex {this.SchemaIndex} | SegmentIndex {this.SegmentIndex} | LocalOffset: {this.LocalOffset}"; + } + } + + public List GetEntriesBySchemaIndex(uint segmentIndex) + { + List result = new(); + foreach (Entry entry in this.Entries) + { + if (entry.SegmentIndex == segmentIndex) + { + result.Add(entry); + } + } + return result; + } +} \ No newline at end of file diff --git a/src/ACadSharp/DataStorage/FileHeader.cs b/src/ACadSharp/DataStorage/FileHeader.cs new file mode 100644 index 000000000..1a6949a4a --- /dev/null +++ b/src/ACadSharp/DataStorage/FileHeader.cs @@ -0,0 +1,32 @@ +namespace ACadSharp.DataStorage; + +internal class FileHeader +{ + public int DataIndexSegmentIndex { get; set; } + + public int DataStorageRevision { get; set; } + + public int FileHeaderSize { get; set; } + + public uint FileSignature { get; set; } + + public int FileSize { get; set; } + + public int PreviousSaveIndex { get; set; } + + public int SchemaIndexSegmentIndex { get; set; } + + public int SearchSegmentIndex { get; set; } + + public int SegmentIndexEntryCount { get; set; } + + public int SegmentIndexOffset { get; set; } + + public int SegmentIndexUnknown { get; set; } + + public int Unknown1 { get; set; } = 2; + + public int Unknown2 { get; set; } = 0; + + public int Version { get; set; } = 2; +} \ No newline at end of file diff --git a/src/ACadSharp/DataStorage/FileSegment.cs b/src/ACadSharp/DataStorage/FileSegment.cs new file mode 100644 index 000000000..4e5c6a812 --- /dev/null +++ b/src/ACadSharp/DataStorage/FileSegment.cs @@ -0,0 +1,11 @@ +namespace ACadSharp.DataStorage; + +internal class FileSegment +{ + public FileSegmentHeader Header { get; set; } + + public override string ToString() + { + return $"{this.Header.Name}"; + } +} diff --git a/src/ACadSharp/DataStorage/FileSegmentHeader.cs b/src/ACadSharp/DataStorage/FileSegmentHeader.cs new file mode 100644 index 000000000..c8bcb094f --- /dev/null +++ b/src/ACadSharp/DataStorage/FileSegmentHeader.cs @@ -0,0 +1,35 @@ +namespace ACadSharp.DataStorage; + +internal class FileSegmentHeader +{ + public int DataStorageRevision { get; set; } + + public int IsBlob { get; set; } + + public string Name { get; set; } + + public int ObjectDataAlignmentOffset { get; set; } + + public uint SegmentIndex { get; set; } + + public uint SegmentSize { get; set; } + + public short Signature { get; set; } + + public int SystemDataAlignmentOffset { get; set; } + + public int Unknown2 { get; set; } + + public int Unknown3 { get; set; } + + /// + /// The size of the segment header. The is always 6 characters + /// long and the AlignmentBytes is always 8 bytes long. + /// + public const uint SIZE = 48; + + public override string ToString() + { + return this.Name; + } +} diff --git a/src/ACadSharp/DataStorage/FileSegmentIndex.cs b/src/ACadSharp/DataStorage/FileSegmentIndex.cs new file mode 100644 index 000000000..a9bb95c78 --- /dev/null +++ b/src/ACadSharp/DataStorage/FileSegmentIndex.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; + +namespace ACadSharp.DataStorage; + +internal class FileSegmentIndex : FileSegment +{ + public List Entries { get; } = new(); + + public void AddEntry(ulong offset, uint size) + { + this.Entries.Add(new Entry { Offset = offset, Size = size }); + } + + public class Entry + { + public ulong Offset { get; set; } + + public uint Size { get; set; } + + public override string ToString() + { + return $"Offset: {this.Offset} | Size: {this.Size}"; + } + } +} diff --git a/src/ACadSharp/DataStorage/SchemaData.cs b/src/ACadSharp/DataStorage/SchemaData.cs new file mode 100644 index 000000000..c26d8d1ba --- /dev/null +++ b/src/ACadSharp/DataStorage/SchemaData.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace ACadSharp.DataStorage; + +internal class SchemaData : FileSegment +{ + public List Schemes { get; } = new(); +} diff --git a/src/ACadSharp/DataStorage/SchemaIndex.cs b/src/ACadSharp/DataStorage/SchemaIndex.cs new file mode 100644 index 000000000..5a3a744ee --- /dev/null +++ b/src/ACadSharp/DataStorage/SchemaIndex.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; +using System.Linq; + +namespace ACadSharp.DataStorage; + +internal class SchemaIndex : FileSegment +{ + public List PropertyPointers { get; set; } = new(); + + public List SchemaNames { get; set; } = new(); + + public List SchemaPointers { get; set; } = new(); + + public IEnumerable GetAllPointers() + { + return this.PropertyPointers.Concat(this.SchemaPointers); + } + + public IEnumerable GetSchemaIndexes() + { + return this.SchemaPointers.Select(p => p.SegmentIndex).Distinct(); + } + + public class Pointer + { + public uint Index { get; set; } + + public uint LocalOffset { get; set; } + + public uint SegmentIndex { get; set; } + + public override string ToString() + { + return $"Index: {this.Index} | SegmentIndex: {this.SegmentIndex} | LocalOffset: {this.LocalOffset}"; + } + } +} diff --git a/src/ACadSharp/DataStorage/SchemaRecordFlags.cs b/src/ACadSharp/DataStorage/SchemaRecordFlags.cs new file mode 100644 index 000000000..d3b707789 --- /dev/null +++ b/src/ACadSharp/DataStorage/SchemaRecordFlags.cs @@ -0,0 +1,15 @@ +using System; + +namespace ACadSharp.DataStorage; + +[Flags] +public enum SchemaRecordFlags +{ + None = 0, + + Unknown0 = 1, + + NoType = 2, + + Unknown1 = 8, +} \ No newline at end of file diff --git a/src/ACadSharp/DxfFileToken.cs b/src/ACadSharp/DxfFileToken.cs index 950098c27..c4202469e 100644 --- a/src/ACadSharp/DxfFileToken.cs +++ b/src/ACadSharp/DxfFileToken.cs @@ -14,12 +14,18 @@ public static class DxfFileToken public const string AcmPartRef = "ACMPARTREF"; + public const string AlignedDimensionObjectContextData = "ACDB_ALDIMOBJECTCONTEXTDATA_CLASS"; + + public const string AngularDimensionObjectContextData = "ACDB_ANGDIMOBJECTCONTEXTDATA_CLASS"; + public const string BeginSection = "SECTION"; public const string BlkRefObjectContextData = "ACDB_BLKREFOBJECTCONTEXTDATA_CLASS"; public const string BlkRefToken = "{BLKREFS"; + public const string DiametricDimensionObjectContextData = "ACDB_DMDIMOBJECTCONTEXTDATA_CLASS"; + public const string Block = "BLOCK"; public const string BlocksSection = "BLOCKS"; @@ -68,6 +74,8 @@ public static class DxfFileToken public const string EntityEllipse = "ELLIPSE"; + public const string EntityExtrudedSurface = "EXTRUDEDSURFACE"; + public const string EntityHatch = "HATCH"; public const string EntityHelix = "HELIX"; @@ -82,6 +90,8 @@ public static class DxfFileToken public const string EntityLine = "LINE"; + public const string EntityLoftedSurface = "LOFTEDSURFACE"; + public const string EntityLwPolyline = "LWPOLYLINE"; public const string EntityMesh = "MESH"; @@ -92,12 +102,16 @@ public static class DxfFileToken public const string EntityMultiLeader = "MULTILEADER"; + public const string EntityNurbSurface = "NURBSURFACE"; + public const string EntityOle2Frame = "OLE2FRAME"; public const string EntityOleFrame = "OLEFRAME"; public const string EntityPdfUnderlay = "PDFUNDERLAY"; + public const string EntityPlaneSurface = "PLANESURFACE"; + public const string EntityPoint = "POINT"; public const string EntityPolyFaceMesh = "PFACE"; @@ -110,6 +124,10 @@ public static class DxfFileToken public const string EntityRegion = "REGION"; + public const string EntityRevolvedSurface = "REVOLVEDSURFACE"; + + public const string EntityRText = "RTEXT"; + public const string EntitySection = "SECTION"; public const string EntitySeqend = "SEQEND"; @@ -124,6 +142,8 @@ public static class DxfFileToken public const string EntitySurface = "SURFACE"; + public const string EntitySweptSurface = "SWEPTSURFACE"; + public const string EntityTable = "ACAD_TABLE"; public const string EntityText = "TEXT"; @@ -166,6 +186,12 @@ public static class DxfFileToken public const string MTextAttributeObjectContextData = "ACDB_MTEXTATTRIBUTEOBJECTCONTEXTDATA_CLASS"; + public const string OrdinateDimensionObjectContextData = "ACDB_ORDDIMOBJECTCONTEXTDATA_CLASS"; + + public const string RadialDimensionLargeObjectContextData = "ACDB_RADIMLRGOBJECTCONTEXTDATA_CLASS"; + + public const string RadialDimensionObjectContextData = "ACDB_RADIMOBJECTCONTEXTDATA_CLASS"; + public const string ObjectAecCleanupGroupDef = "AEC_CLEANUP_GROUP_DEF"; public const string ObjectAecWallStyle = "AEC_WALL_STYLE"; diff --git a/src/ACadSharp/DxfProperty.cs b/src/ACadSharp/DxfProperty.cs index fd8c48a21..f8f335c56 100644 --- a/src/ACadSharp/DxfProperty.cs +++ b/src/ACadSharp/DxfProperty.cs @@ -49,7 +49,7 @@ public DxfProperty(int code, PropertyInfo property) : this(property) /// DxfProperty instance. /// /// The DxfProperty instance from which to copy property information. Cannot be null. - public DxfProperty(DxfProperty value) : this(value.AssignedCode, value._property) + public DxfProperty(DxfProperty value) : base(value) { } diff --git a/src/ACadSharp/DxfPropertyBase.cs b/src/ACadSharp/DxfPropertyBase.cs index a9ed4c199..f73a62a47 100644 --- a/src/ACadSharp/DxfPropertyBase.cs +++ b/src/ACadSharp/DxfPropertyBase.cs @@ -149,6 +149,13 @@ protected DxfPropertyBase(PropertyInfo property) this._property = property; } + protected DxfPropertyBase(DxfPropertyBase other) + { + this._attributeData = other._attributeData; + this._property = other._property; + this._assignedCode = other._assignedCode; + } + /// /// Set the value for the property using the AssignedCode /// @@ -205,9 +212,11 @@ public void SetValue(int code, TCadObject obj, object value) switch (code) { case 62: + case 63: this._property.SetValue(obj, new Color((short)value)); break; case 420: + case 421: byte[] b = LittleEndianConverter.Instance.GetBytes((int)value); // true color this._property.SetValue(obj, new Color(b[2], b[1], b[0])); @@ -295,6 +304,7 @@ internal void SetValue(int code, object obj, object value) switch (code) { case 62: + case 63: this._property.SetValue(obj, new Color((short)value)); break; case 90: @@ -303,6 +313,7 @@ internal void SetValue(int code, object obj, object value) this._property.SetValue(obj, new Color(b[2], b[1], b[0])); break; case 420: + case 421: b = LittleEndianConverter.Instance.GetBytes((int)value); // true color this._property.SetValue(obj, new Color(b[2], b[1], b[0])); diff --git a/src/ACadSharp/DxfSubclassMarker.cs b/src/ACadSharp/DxfSubclassMarker.cs index 8c340cb0d..e5d40ca9d 100644 --- a/src/ACadSharp/DxfSubclassMarker.cs +++ b/src/ACadSharp/DxfSubclassMarker.cs @@ -18,6 +18,10 @@ public static class DxfSubclassMarker public const string Angular3PointDimension = "AcDb3PointAngularDimension"; + public const string AlignedDimensionObjectContextData = "AcDbAlignedDimensionObjectContextData"; + + public const string AngularDimensionObjectContextData = "AcDbAngularDimensionObjectContextData"; + public const string AnnotScaleObjectContextData = "AcDbAnnotScaleObjectContextData"; public const string ApplicationId = "AcDbRegAppTableRecord"; @@ -144,6 +148,8 @@ public static class DxfSubclassMarker public const string EvalGraphExpr = "AcDbEvalExpr"; + public const string ExtrudedSurface = "AcDbExtrudedSurface"; + public const string Face3d = "AcDbFace"; public const string Field = "AcDbField"; @@ -182,6 +188,8 @@ public static class DxfSubclassMarker public const string LinkedTableData = "AcDbLinkedTableData"; + public const string LoftedSurface = "AcDbLoftedSurface"; + public const string LwPolyline = "AcDbPolyline"; public const string Material = "AcDbMaterial"; @@ -198,6 +206,10 @@ public static class DxfSubclassMarker public const string ModelerGeometry = "AcDbModelerGeometry"; + public const string DiametricDimensionObjectContextData = "AcDbDiametricDimensionObjectContextData"; + + public const string DimensionObjectContextData = "AcDbDimensionObjectContextData"; + public const string MText = "AcDbMText"; public const string MTextAttributeObjectContextData = "AcDbMTextAttributeObjectContextData"; @@ -206,10 +218,18 @@ public static class DxfSubclassMarker public const string MultiLeaderObjectContextData = "AcDbMLeaderObjectContextData"; + public const string NurbSurface = "AcDbNurbSurface"; + public const string ObjectContextData = "AcDbObjectContextData"; public const string Ole2Frame = "AcDbOle2Frame"; + public const string OrdinateDimensionObjectContextData = "AcDbOrdinateDimensionObjectContextData"; + + public const string RadialDimensionLargeObjectContextData = "AcDbRadialDimensionLargeObjectContextData"; + + public const string RadialDimensionObjectContextData = "AcDbRadialDimensionObjectContextData"; + public const string OrdinateDimension = "AcDbOrdinateDimension"; public const string PartList = "AcmPartList"; @@ -220,6 +240,8 @@ public static class DxfSubclassMarker public const string PdfReference = "AcDbPdfReference"; + public const string PlaneSurface = "AcDbPlaneSurface"; + public const string PlotSettings = "AcDbPlotSettings"; public const string Point = "AcDbPoint"; @@ -258,6 +280,8 @@ public static class DxfSubclassMarker public const string Ray = "AcDbRay"; + public const string RevolvedSurface = "AcDbRevolvedSurface"; + public const string Scale = "AcDbScale"; public const string Shape = "AcDbShape"; @@ -272,6 +296,10 @@ public static class DxfSubclassMarker public const string Spline = "AcDbSpline"; + public const string Surface = "AcDbSurface"; + + public const string SweptSurface = "AcDbSweptSurface"; + public const string Table = "AcDbSymbolTable"; public const string TableContent = "AcDbTableContent"; diff --git a/src/ACadSharp/Entities/ExtrudedSurface.cs b/src/ACadSharp/Entities/ExtrudedSurface.cs new file mode 100644 index 000000000..01f4c1095 --- /dev/null +++ b/src/ACadSharp/Entities/ExtrudedSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents an entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntityExtrudedSurface)] +[DxfSubClass(DxfSubclassMarker.ExtrudedSurface)] +public class ExtrudedSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntityExtrudedSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.ExtrudedSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.ExtrudedSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntityExtrudedSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = ProxyFlags.None, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/LoftedSurface.cs b/src/ACadSharp/Entities/LoftedSurface.cs new file mode 100644 index 000000000..b179f884e --- /dev/null +++ b/src/ACadSharp/Entities/LoftedSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntityLoftedSurface)] +[DxfSubClass(DxfSubclassMarker.LoftedSurface)] +public class LoftedSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntityLoftedSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.LoftedSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.LoftedSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntityLoftedSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = ProxyFlags.None, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/NurbSurface.cs b/src/ACadSharp/Entities/NurbSurface.cs new file mode 100644 index 000000000..282ac6ca1 --- /dev/null +++ b/src/ACadSharp/Entities/NurbSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntityNurbSurface)] +[DxfSubClass(DxfSubclassMarker.NurbSurface)] +public class NurbSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntityNurbSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.NurbSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.NurbSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntityNurbSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = (ProxyFlags)4095, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/PlaneSurface.cs b/src/ACadSharp/Entities/PlaneSurface.cs new file mode 100644 index 000000000..89166b973 --- /dev/null +++ b/src/ACadSharp/Entities/PlaneSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntityPlaneSurface)] +[DxfSubClass(DxfSubclassMarker.PlaneSurface)] +public class PlaneSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntityPlaneSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.PlaneSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.PlaneSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntityPlaneSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = (ProxyFlags)4095, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/ProxyEntity.cs b/src/ACadSharp/Entities/ProxyEntity.cs index e02b1baf0..b837c48c0 100644 --- a/src/ACadSharp/Entities/ProxyEntity.cs +++ b/src/ACadSharp/Entities/ProxyEntity.cs @@ -1,6 +1,7 @@ using ACadSharp.Attributes; using ACadSharp.Classes; using CSMath; +using System.IO; namespace ACadSharp.Entities { @@ -64,6 +65,10 @@ public class ProxyEntity : Entity, IProxy //An object ID(multiple entries can appear) (optional) //94 0 (indicates end of object ID section) + /// + /// No DxfCodeValue: the DXF reader has no handler for code 311 on an entity. + public Stream Data { get; set; } + /// public ACadVersion Version { get; set; } diff --git a/src/ACadSharp/Entities/RevolvedSurface.cs b/src/ACadSharp/Entities/RevolvedSurface.cs new file mode 100644 index 000000000..a5767c5ad --- /dev/null +++ b/src/ACadSharp/Entities/RevolvedSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntityRevolvedSurface)] +[DxfSubClass(DxfSubclassMarker.RevolvedSurface)] +public class RevolvedSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntityRevolvedSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.RevolvedSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.RevolvedSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntityRevolvedSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = ProxyFlags.None, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/Surface.cs b/src/ACadSharp/Entities/Surface.cs new file mode 100644 index 000000000..ab810989d --- /dev/null +++ b/src/ACadSharp/Entities/Surface.cs @@ -0,0 +1,52 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntitySurface)] +[DxfSubClass(DxfSubclassMarker.Surface)] +public class Surface : ModelerGeometry, IDxfClassDefined +{ + /// + public override ObjectType ObjectType => ObjectType.UNLISTED; + + /// + public override string ObjectName => DxfFileToken.EntitySurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.Surface; + + /// + /// Number of U isolines. + /// + [DxfCodeValue(71)] + public short UIsolines { get; set; } + + /// + /// Number of V isolines. + /// + [DxfCodeValue(72)] + public short VIsolines { get; set; } + + /// + public virtual DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.Surface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntitySurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = (ProxyFlags)4095, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/Entities/SweptSurface.cs b/src/ACadSharp/Entities/SweptSurface.cs new file mode 100644 index 000000000..329240388 --- /dev/null +++ b/src/ACadSharp/Entities/SweptSurface.cs @@ -0,0 +1,37 @@ +using ACadSharp.Attributes; +using ACadSharp.Classes; + +namespace ACadSharp.Entities; + +/// +/// Represents a entity. +/// +/// +/// Object name
+/// Dxf class name +///
+[DxfName(DxfFileToken.EntitySweptSurface)] +[DxfSubClass(DxfSubclassMarker.SweptSurface)] +public class SweptSurface : Surface +{ + /// + public override string ObjectName => DxfFileToken.EntitySweptSurface; + + /// + public override string SubclassMarker => DxfSubclassMarker.SweptSurface; + + /// + public override DxfClass GetDxfClass() + { + return new DxfClass + { + CppClassName = DxfSubclassMarker.SweptSurface, + DwgVersion = (ACadVersion)26, + DxfName = DxfFileToken.EntitySweptSurface, + ItemClassId = 498, + MaintenanceVersion = 0, + ProxyFlags = ProxyFlags.None, + WasZombie = false, + }; + } +} diff --git a/src/ACadSharp/IO/CadDocumentBuilder.cs b/src/ACadSharp/IO/CadDocumentBuilder.cs index 2021dbaed..f078f7c4c 100644 --- a/src/ACadSharp/IO/CadDocumentBuilder.cs +++ b/src/ACadSharp/IO/CadDocumentBuilder.cs @@ -113,8 +113,8 @@ public void BuildDataStorage() continue; } - ulong handle = (ulong)idColumn.CodeValuePair.Value; - byte[] bytes = (byte[])dataColumn.CodeValuePair.Value; + ulong handle = (ulong)idColumn.Handle; + byte[] bytes = dataColumn.Data.ToArray(); if (!this.DocumentToBuild.TryGetCadObject(handle, out var geometry)) { diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.Objects.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.Objects.cs index 9fa9399f6..5a24d49b4 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.Objects.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.Objects.cs @@ -1,6 +1,7 @@ using ACadSharp.IO.Templates; using ACadSharp.Objects; using ACadSharp.Objects.Evaluations; +using ACadSharp.Tables; using System; using System.Collections.Generic; @@ -29,12 +30,75 @@ private void readAnnotScaleObjectContextData(CadAnnotScaleObjectContextDataTempl template.ScaleHandle = this.handleReference(); } - private CadTemplate readDimensionObjectContextData() + private CadTemplate readDimensionObjectContextData(DimensionObjectContextData contextData) { - var template = new CadDimensionObjectContextDataTemplate(new DimensionObjectContextData()); + var template = new CadDimensionObjectContextDataTemplate(contextData); this.readAnnotScaleObjectContextData(template); - //Handle stream: 340 scale (above), then 2 the dimension block for this scale; data fields are not needed + + //2RD 10 Text location + contextData.TextLocation = this._objectReader.Read2RawDouble(); + //B 294 Default text location + contextData.IsDefaultTextLocation = this._objectReader.ReadBit(); + //BD 140 Text rotation + contextData.TextRotation = this._objectReader.ReadBitDouble(); + //H 2 Dimension block for this scale template.BlockHandle = this.handleReference(); + //B 293 Unknown + contextData.Unknown293 = this._objectReader.ReadBit(); + //B 298 DIMTOFL + contextData.TextOutsideExtensions = this._objectReader.ReadBit(); + //B 291 DIMSOXD + contextData.SuppressOutsideExtensions = this._objectReader.ReadBit(); + //B 70 DIMATFIT is overridden, the DXF value is not stored + this._objectReader.ReadBit(); + //B 292 DIMTIX + contextData.TextInsideExtensions = this._objectReader.ReadBit(); + //B 71 DIMTMOVE is overridden, the DXF value is not stored + this._objectReader.ReadBit(); + //RC 280 Override flags + contextData.OverrideFlags = this._objectReader.ReadByte(); + //B 295 Unknown + contextData.Unknown295 = this._objectReader.ReadBit(); + //B 296 Flip second arrow + contextData.FlipSecondArrow = this._objectReader.ReadBit(); + //B 297 Flip first arrow + contextData.FlipFirstArrow = this._objectReader.ReadBit(); + + switch (contextData) + { + case AlignedDimensionObjectContextData aligned: + //3BD 11 Dimension line point + aligned.DimensionLinePoint = this._objectReader.Read3BitDouble(); + break; + case AngularDimensionObjectContextData angular: + //3BD 11 Arc point + angular.ArcPoint = this._objectReader.Read3BitDouble(); + break; + case DiametricDimensionObjectContextData diametric: + //3BD 11 First arc point + diametric.FirstArcPoint = this._objectReader.Read3BitDouble(); + //3BD 12 Definition point + diametric.DefinitionPoint = this._objectReader.Read3BitDouble(); + break; + case OrdinateDimensionObjectContextData ordinate: + //3BD 11 Definition point + ordinate.DefinitionPoint = this._objectReader.Read3BitDouble(); + //3BD 12 Leader end point + ordinate.LeaderEndpoint = this._objectReader.Read3BitDouble(); + break; + case RadialDimensionObjectContextData radial: + //3BD 11 First arc point + radial.FirstArcPoint = this._objectReader.Read3BitDouble(); + if (radial is RadialDimensionLargeObjectContextData large) + { + //3BD 12 Override center + large.OverrideCenter = this._objectReader.Read3BitDouble(); + //3BD 13 Jog point + large.JogPoint = this._objectReader.Read3BitDouble(); + } + break; + } + return template; } diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs index db4c8b17f..4d7280839 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgObjectReader.cs @@ -72,6 +72,8 @@ internal partial class DwgObjectReader : DwgSectionIO /// private IDwgStreamReader _handlesReader; + private long _handleSectionOffset = -1; + private IDwgStreamReader _mergedReaders; private long _objectInitialPos = 0; @@ -234,7 +236,7 @@ private ObjectType getEntityType(long offset) ulong handleSize = this._crcReader.ReadModularChar(); //Find the handles offset - ulong handleSectionOffset = (ulong)this._crcReader.PositionInBits() + sizeInBits - handleSize; + this._handleSectionOffset = (long)((ulong)this._crcReader.PositionInBits() + sizeInBits - handleSize); //Create a handler section reader this._objectReader = DwgStreamReaderBase.GetStreamHandler(this._version, HugeMemoryStream.Clone(this._memoryStream), this._reader.Encoding); @@ -246,11 +248,11 @@ private ObjectType getEntityType(long offset) //Create a handler section reader this._handlesReader = DwgStreamReaderBase.GetStreamHandler(this._version, HugeMemoryStream.Clone(this._memoryStream), this._reader.Encoding); - this._handlesReader.SetPositionInBits((long)handleSectionOffset); + this._handlesReader.SetPositionInBits(this._handleSectionOffset); //Create a text section reader this._textReader = DwgStreamReaderBase.GetStreamHandler(this._version, HugeMemoryStream.Clone(this._memoryStream), this._reader.Encoding); - this._textReader.SetPositionByFlag((long)handleSectionOffset - 1); + this._textReader.SetPositionByFlag(this._handleSectionOffset - 1); this._mergedReaders = new DwgMergedReader(this._objectReader, this._textReader, this._handlesReader); } @@ -1181,8 +1183,18 @@ private void readCommonProxyData(IProxy proxy) //Common: //Databits X databits, however many there are to the handles + //The retained data has no length of its own, it runs up to the handle section + if (this._handleSectionOffset > 0) + { + long dataBits = this._handleSectionOffset - this._objectReader.PositionInBits(); + if (dataBits > 0) + { + int dataBytes = (int)((dataBits + 7L) / 8L); + byte[] data = this._objectReader.ReadBytes(dataBytes); - //TODO: Investigate how to read the data in proxies, it can contain data, strings and handles + proxy.Data = new MemoryStream(data, writable: false); + } + } } private CadTemplate readDbColor() @@ -2718,8 +2730,7 @@ private CadTemplate readLayer() //Handle refs H Layer control (soft pointer), [Reactors (soft pointer)] and xdicobjhandle //(hard owner) are read with the common data; this one is the //External reference block handle (hard pointer): the xref a dependent layer comes from - template.LayerControlHandle = this.handleReference(); - layer.XrefBlockHandle = template.LayerControlHandle; + layer.XrefBlockHandle = this.handleReference(); //R2000+: if (this.R2000Plus) @@ -5580,6 +5591,17 @@ private CadTemplate readSolid3D() return template; } + private CadTemplate readSurface(CadEntityTemplate template) + where T : Surface, new() + { + this.readModelerGeometry(template); + + //The AcDbSurface data (isoline counts) and the surface subclass data + //(sweep, loft and revolve parameters) that follow are not decoded yet; + //the object data is length delimited, so the unread tail is skipped + return template; + } + private CadTemplate readSortentsTable() { SortEntitiesTable sortTable = new SortEntitiesTable(); @@ -6050,6 +6072,27 @@ private CadTemplate readUnlistedType(short classNumber) case "SORTENTSTABLE": template = this.readSortentsTable(); break; + case DxfFileToken.EntitySurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntityExtrudedSurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntityLoftedSurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntityNurbSurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntityPlaneSurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntityRevolvedSurface: + template = this.readSurface(new CadEntityTemplate()); + break; + case DxfFileToken.EntitySweptSurface: + template = this.readSurface(new CadEntityTemplate()); + break; case "RASTERVARIABLES": template = this.readRasterVariables(); break; @@ -6184,11 +6227,27 @@ private CadTemplate readUnlistedType(short classNumber) case DxfFileToken.ObjectWipeoutVariables: template = this.readWipeoutVariables(); break; - } - - if (template == null && c.DxfName.EndsWith("DIMOBJECTCONTEXTDATA_CLASS")) - { - template = this.readDimensionObjectContextData(); + case DxfFileToken.EntityRText: + template = this.readRText(c); + break; + case DxfFileToken.AlignedDimensionObjectContextData: + template = this.readDimensionObjectContextData(new AlignedDimensionObjectContextData()); + break; + case DxfFileToken.AngularDimensionObjectContextData: + template = this.readDimensionObjectContextData(new AngularDimensionObjectContextData()); + break; + case DxfFileToken.DiametricDimensionObjectContextData: + template = this.readDimensionObjectContextData(new DiametricDimensionObjectContextData()); + break; + case DxfFileToken.OrdinateDimensionObjectContextData: + template = this.readDimensionObjectContextData(new OrdinateDimensionObjectContextData()); + break; + case DxfFileToken.RadialDimensionObjectContextData: + template = this.readDimensionObjectContextData(new RadialDimensionObjectContextData()); + break; + case DxfFileToken.RadialDimensionLargeObjectContextData: + template = this.readDimensionObjectContextData(new RadialDimensionLargeObjectContextData()); + break; } if (template == null && c.IsAnEntity) @@ -6877,7 +6936,7 @@ private CadTemplate readXRecord() //numbers all follow the normal DXF convention for group codes. var code = this._objectReader.ReadShort(); var groupCode = GroupCodeValue.TransformValue(code); - + XRecord.Entry entry; switch (groupCode) { case GroupCodeValueType.String: @@ -6914,7 +6973,8 @@ private CadTemplate readXRecord() string hex = this._objectReader.ReadTextUnicode(); if (ulong.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out ulong result)) { - template.AddHandleReference(code, result); + entry = xRecord.CreateEntry(code, result); + template.AddHandleReference(entry); } else { @@ -6930,7 +6990,9 @@ private CadTemplate readXRecord() break; case GroupCodeValueType.ObjectId: case GroupCodeValueType.ExtendedDataHandle: - template.AddHandleReference(code, this._objectReader.ReadRawULong()); + var handle = this._objectReader.ReadRawULong(); + entry = xRecord.CreateEntry(code, handle); + template.AddHandleReference(entry); break; default: this.notify($"Unidentified GroupCodeValueType {code} for XRecord [{xRecord.Handle}]", NotificationType.Warning); @@ -7299,24 +7361,29 @@ private CadTemplate readUnknownEntity(DxfClass dxfClass) this.readCommonEntityData(template); - if (dxfClass?.DxfName == "RTEXT") + return template; + } + + private CadTemplate readRText(DxfClass dxfClass) + { + CadTemplate template = this.readUnknownEntity(dxfClass); + UnknownEntity entity = (UnknownEntity)template.CadObject; + + try { - try - { - var rt = new UnknownEntity.RemoteText(); - rt.InsertPoint = this._objectReader.Read3BitDouble(); - rt.Normal = this._objectReader.Read3BitDouble(); - rt.Rotation = this._objectReader.ReadBitDouble(); - rt.Height = this._objectReader.ReadBitDouble(); - rt.Flags = this._objectReader.ReadBitShort(); - rt.Contents = this._textReader.ReadVariableText(); - rt.StyleHandle = this.handleReference(); - entity.RText = rt; - } - catch (System.Exception ex) - { - this._builder.Notify($"RTEXT could not be read: {ex.Message}", NotificationType.Warning); - } + var rt = new UnknownEntity.RemoteText(); + rt.InsertPoint = this._objectReader.Read3BitDouble(); + rt.Normal = this._objectReader.Read3BitDouble(); + rt.Rotation = this._objectReader.ReadBitDouble(); + rt.Height = this._objectReader.ReadBitDouble(); + rt.Flags = this._objectReader.ReadBitShort(); + rt.Contents = this._textReader.ReadVariableText(); + rt.StyleHandle = this.handleReference(); + entity.RText = rt; + } + catch (System.Exception ex) + { + this._builder.Notify($"RTEXT could not be read: {ex.Message}", NotificationType.Warning); } return template; diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader.cs index 6a5933269..8e2d2a5f9 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader.cs @@ -1,743 +1,570 @@ -using ACadSharp.Prototype1b; -using ACadSharp.Prototype1b.Segments; +using ACadSharp.DataStorage; using System; using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.Linq; using System.Text; -namespace ACadSharp.IO.DWG.DwgStreamReaders -{ - internal class DwgPrototype1bReader : DwgSectionIO - { - public static readonly uint[] TYPE_SIZES = new uint[] { 0, 0, 2, 1, 2, 4, 8, 1, 2, 4, 8, 4, 8, 0, 0, 0 }; - private readonly IDwgStreamReader _reader; - private readonly Prototype1b.DataStorage _storage = new Prototype1b.DataStorage(); - private readonly DwgDocumentBuilder _builder; +namespace ACadSharp.IO.DWG.DwgStreamReaders; - public override string SectionName => DwgSectionDefinition.AcDsPrototype; - - public DwgPrototype1bReader(ACadVersion version, DwgDocumentBuilder builder, IDwgStreamReader reader) : base(version) - { - this._reader = reader; - this._builder = builder; - } - - public Prototype1b.DataStorage Read() - { - try - { - this._storage.FileHeader = this.readFileHeader(); +internal class DwgPrototype1bReader : DwgSectionIO +{ + public override string SectionName => DwgSectionDefinition.AcDsPrototype; - // Indices for reading values - this._storage.IndexPointers = new DataStoragePointers(); - this._storage.IndexPointers.SegmentIndex = this.readSegmentIndex(); - this._storage.IndexPointers.DataIndex = this.readDataIndex(); - this._storage.IndexPointers.SchemaIndex = this.readSchemaIndex(); - this._storage.IndexPointers.FreeSpace = this.readFreeSpace(); // Index to empty spaces (padding or so) within the file + private readonly DwgDocumentBuilder _builder; - // Probably the file state before the last save - this._storage.PreviousSave = this.readPreviousSave(); + private readonly IDwgStreamReader _reader; - // Schema data lookup - this._storage.SchemaSearch = this.readSchemaSearch(); - foreach (SchemaSearchEntry search in this._storage.SchemaSearch.Entries) - { - search.SchemaName = this._storage.IndexPointers.SchemaIndex.SchemaNames[search.SchemaNameIndex]; - } + private DataIndexSegment _dataIndex; - this._storage.SchemaFields = []; - this._storage.DataFields = []; - this._storage.Blobs = []; + private FileHeader _fileHeader; - // From this point on it should be possible to read storage entries sequentially - // The issue is that sometimes there seemingly are empty padding sections (which should be - // referenced by the FreeSpace entry) that are missing from the FreeSpace definition or are larger - // than specified in the FreeSpace definition. + private FileSegmentIndex _fileSegmentIndex; - this.ReadSegments(); - } - catch (Exception ex) - { - if (!this._builder.Configuration.Failsafe) - throw; + private SchemaIndex _schemaIndex; - this.notify("An error occurred while reading the Prototype1b", NotificationType.Error, ex); - } + public DwgPrototype1bReader(ACadVersion version, DwgDocumentBuilder builder, IDwgStreamReader reader) : base(version) + { + this._reader = reader; + this._builder = builder; + } - return this._storage; - } + public void Read() + { + CadFileDataStorage storage = new(); - internal IPrototype1bSegment ReadSegmentAt(ulong offset) + try { - long pos = this._reader.Position; - this._reader.Position = (long)offset; - IPrototype1bSegment segment = this.ReadSegment(); - this._reader.Position = pos; - return segment; - } + this._fileHeader = this.readFileHeader(); + this._fileSegmentIndex = this.readFileSegmentIndex(); + this._schemaIndex = this.readSchemaIndex(); - private SegmentIndex readSegmentIndex() - { - return (SegmentIndex)this.ReadSegmentAt((ulong)this._storage.FileHeader.SegmentIndexOffset); - } + var schemes = this.readSchemaDataEntries(); + storage.Schemes.AddRange(schemes.SelectMany(s => s.Schemes)); - private DataIndex readDataIndex() - { - return (DataIndex)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.DataIndexSegmentIndex].Offset); - } - - private SchemaSearch readSchemaSearch() - { - return (SchemaSearch)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.SearchSegmentIndex].Offset); - } + this._dataIndex = this.readDataIndex(); + this.readDataFields(storage); - private FreeSpace readFreeSpace() - { - if (this._storage.FileHeader.FreeSpaceSegmentIndex == 0) return null; - return (FreeSpace)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.FreeSpaceSegmentIndex].Offset); + this._builder.DataStorage = storage; } - - private PreviousSave readPreviousSave() + catch (Exception ex) { - if (this._storage.FileHeader.PreviousSaveIndex == 0) return null; - return (PreviousSave)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.PreviousSaveIndex].Offset); - } + if (!this._builder.Configuration.Failsafe) + throw; - private SchemaIndex readSchemaIndex() - { - return (SchemaIndex)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.SchemaIndexSegmentIndex].Offset); + this.notify("An error occurred while reading the Prototype1b", NotificationType.Error, ex); } + } - internal void ReadSegments() - { - foreach (KeyValuePair entry in this._storage.IndexPointers.SegmentIndex.Pointers) - { - if (entry.Value.Size == 0) continue; - this._reader.Position = (long)entry.Value.Offset; + private void processDataValue(CadFileDataStorage storage, DataField.DataEntry data, DataIndexSegment.Entry shemaIndex) + { + AcdsRecord record = new(); + record.Index = shemaIndex.SchemaIndex; - IPrototype1bSegment segment = this.ReadSegment(); - switch (segment) - { - // Those entries have already been parsed (as they were directly referenced in the header - // and there should probably not be any additional entries of the same type) - case SegmentIndex segidx: - case DataIndex datidx: - case SchemaIndex schidx: - case SchemaSearch search: - case FreeSpace freesp: - case PreviousSave prvsav: - break; - - // Add entries which are types that can appear multiple times to a collection of them - case SchemaData schdat: - this._storage.SchemaFields.Add(schdat); - break; - case DataField data: - this._storage.DataFields.Add(data); - break; - case Blob01 blob: - this._storage.Blobs.Add(blob); - break; - default: - break; - } - } - } + var schema = storage.Schemes.FirstOrDefault(s => s.Index == shemaIndex.SchemaIndex); - internal IPrototype1bSegment ReadSegment() + foreach (var item in schema.EmbeddedRecords) { - IPrototype1bSegment segment; - long segmentStartPosition = this._reader.Position; - SegmentHeader header = this.readSubItemHeader(); - segment = this.ReadSegmentData(header); + AcdsRecordColumn column = new AcdsRecordColumn(); + column.Name = item.Name; + column.DataType = (short)item.Type; - // Blob01 entries do not specify how large they are (The headers SegmentSize only has the size of the header without any blob data, blobs are aligned to the next 128 byte boundary) - if (header.IsBlob != 1) + switch (item.Name) { - // Skip to the end of this sub item - long readSize = this._reader.Position - segmentStartPosition; - long paddingDataSize = header.SegmentSize - readSize; - byte[] _padding = this._reader.ReadBytes((int)paddingDataSize); // Should be filled with only 0x70 values (TODO: Sometimes there are some other strange padding bytes) + case CadFileDataStorage.Id: + column.Handle = data.Header.Handle; + break; + case CadFileDataStorage.AsmData: + column.Data = new MemoryStream(); + column.Data.Write(data.GetData(), 0, data.GetData().Length); + break; + default: + break; } - return segment; + record.Columns.Add(item.Name, column); } - private SegmentHeader readSubItemHeader() - { - return new() - { - Signature = this._reader.ReadShort(), - Name = Encoding.ASCII.GetString(this._reader.ReadBytes(6)), - SegmentIndex = this._reader.ReadUInt(), - IsBlob = this._reader.ReadInt(), - SegmentSize = this._reader.ReadUInt(), // Multiple of 0x40 bytes (AutoCAD uses 0x80), padded wth 0x70 values - Unknown1 = this._reader.ReadInt(), - DataStorageRevision = this._reader.ReadInt(), - Unknown2 = this._reader.ReadInt(), - SystemDataAlignmentOffset = this._reader.ReadInt(), - ObjectDataAlignmentOffset = this._reader.ReadInt(), - AlignmentBytes = this._reader.ReadBytes(8) // Align to next 16 byte boundary - }; - } + storage.Records.Add(record); + } - internal IPrototype1bSegment ReadSegmentData(SegmentHeader header) => header.Name switch - { - "segidx" => this.readSegmentIndexValue(header), - "datidx" => this.readDataIndexValue(header), - "schidx" => this.readSchemaIndexValue(header), - "search" => this.readSchemaSearchValue(header), - "freesp" => this.readFreeSpaceValue(header), - "prvsav" => this.readPreviousSaveValue(header), - "schdat" => this.readSchemaDataValue(header), - "_data_" => this.readDataValue(header), - "blob01" => this.readBlob01(header), - _ => throw new InvalidDataException($"Unknown segment type \"{header.Name}\""), - }; - - private FileHeader readFileHeader() + private AcdsSchema readAcdsSchema() + { + AcdsSchema schema = new(); + + ushort indexCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + for (int i = 0; i < indexCount; i++) { - uint fileSignature = this._reader.ReadUInt(); - short fileHeaderSize = this._reader.ReadShort(); - return new() - { - FileSignature = fileSignature, - FileHeaderSize = fileHeaderSize, - UnknownFlag = this._reader.ReadShort(), - Unknown1 = this._reader.ReadInt(), - Version = this._reader.ReadInt(), - Unknown2 = this._reader.ReadInt(), - DataStorageRevision = this._reader.ReadInt(), - SegmentIndexOffset = this._reader.ReadInt(), - SegmentIndexUnknown = this._reader.ReadInt(), - SegmentIndexEntryCount = this._reader.ReadInt(), - SchemaIndexSegmentIndex = this._reader.ReadInt(), - DataIndexSegmentIndex = this._reader.ReadInt(), - SearchSegmentIndex = this._reader.ReadInt(), - PreviousSaveIndex = this._reader.ReadInt(), - FileSize = this._reader.ReadInt(), - Unknown3 = this._reader.ReadInt(), - FreeSpaceSegmentIndex = this._reader.ReadInt(), - FreeSpaceEntryCount = this._reader.ReadInt(), - Unknown5 = this._reader.ReadInt(), - - UnknownRemaining = this._reader.ReadBytes(fileHeaderSize - 72) - }; + schema.Indices.Add(this._reader.ReadRawULong()); } - private Schema readSchema() + ushort propCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + for (int i = 0; i < propCount; i++) { - Schema schema = new(); + schema.EmbeddedRecords.Add(this.readAcdsSchemaRecord()); + } - ushort indexCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); - schema.Indices = new ulong[indexCount]; - for (int i = 0; i < indexCount; i++) - { - schema.Indices[i] = this._reader.ReadRawULong(); - } + return schema; + } - ushort propCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); - schema.Properties = new SchemaProperty[propCount]; - for (int i = 0; i < propCount; i++) - { - schema.Properties[i] = this.readSchemaProperty(); - } + private AcdsSchemaRecord readAcdsSchemaRecord() + { + AcdsSchemaRecord record = new(); - return schema; - } + record.Flags = (SchemaRecordFlags)this._reader.ReadInt(); + record.NameIndex = this._reader.ReadUInt(); - private SchemaProperty readSchemaProperty() + // Get type size + if ((record.Flags & SchemaRecordFlags.NoType) == 0) { - SchemaProperty prop = new() + record.Type = this._reader.ReadUInt(); + if (record.Type == 0xE) { - PropertyFlags = this._reader.ReadUInt(), // 1 = Unknown / 2 = NoType / 8 = Unknown - NameIndex = this._reader.ReadUInt() - }; - - // Get type size - if (!((prop.PropertyFlags & (1 << 1)) != 0)) - { - prop.Type = this._reader.ReadUInt(); // 0 - 15 - if (prop.Type == 0xe) - { - prop.TypeSize = this._reader.ReadUInt(); - } - else - { - prop.TypeSize = TYPE_SIZES[prop.Type.Value]; - } - } - - // Read unknown fields - if (prop.PropertyFlags == 1) - { - prop.Unknown1 = this._reader.ReadUInt(); + record.TypeSize = this._reader.ReadUInt(); } - else if (prop.PropertyFlags == 8) + else { - prop.Unknown2 = this._reader.ReadUInt(); + record.TypeSize = AcdsSchemaRecord.TypeSizes[record.Type]; } - - // Read values - prop.PropertyValueCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); - prop.Values = new byte[prop.PropertyValueCount, prop.TypeSize]; - if (prop.TypeSize != 0) - { - for (int i = 0; i < prop.PropertyValueCount; i++) - { - byte[] propertyValue = this._reader.ReadBytes((int)prop.TypeSize); - for (int j = 0; j < propertyValue.Length; j++) - { - prop.Values[0, j] = propertyValue[j]; - } - } - } - - return prop; } - private SegmentIndex readSegmentIndexValue(SegmentHeader header) + // Read unknown fields + if (record.Flags == SchemaRecordFlags.Unknown0) { - SegmentIndex index = new() - { - Header = header, - Pointers = [] - }; - for (int j = 0; j < this._storage.FileHeader.SegmentIndexEntryCount; j++) - { - index.Pointers[j] = new SegmentIndexEntry - { - Offset = this._reader.ReadRawULong(), - Size = this._reader.ReadUInt() - }; - } - - // TODO: Sometimes additional bytes (that are not padding bytes) follow here until the segment size - // They actually seem to be garbage data and can be ignored. Often times there are seemingly - // random bytes without any pattern and sometimes there are bytes representing 2-Byte strings. - // Garbage string examples are e.g.: - // --> "nslation\0" followed by the bytes [0, 0, 7, 0, 176, 4] - // --> "k\\auto" - // --> "op> "utocad" - // --> "atio" - - return index; + record.Unknown1 = this._reader.ReadUInt(); } - - private DataIndex readDataIndexValue(SegmentHeader header) + else if (record.Flags == SchemaRecordFlags.Unknown1) { - DataIndex index = new() - { - Header = header - }; - int entryCount = this._reader.ReadInt(); - index.Unknown1 = this._reader.ReadInt(); - - index.Entries = []; - for (int j = 0; j < entryCount; j++) - { - uint dataSegmentIndex = this._reader.ReadUInt(); - uint dataSegmentOffset = this._reader.ReadUInt(); - uint schemaIndex = this._reader.ReadUInt(); - - // Segment index values of 0 can be ignored (stub entries) - if (dataSegmentIndex == 0) continue; - - // Get or create a data index entry - if (!index.Entries.TryGetValue(dataSegmentIndex, out DataIndexEntry entry)) - { - entry = new DataIndexEntry - { - DataSegmentIndex = dataSegmentIndex, - Pointers = [] - }; - } - - // Add the current pointer to the list of pointers - entry.Pointers.Add(new DataIndexEntryPointer - { - Offset = dataSegmentOffset, - SchemaIndex = schemaIndex - }); - index.Entries[dataSegmentIndex] = entry; - } + record.Unknown2 = this._reader.ReadUInt(); + } - return index; + // Read values + var valuesCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + if (record.TypeSize == 0) + { + return record; } - private SchemaIndex readSchemaIndexValue(SegmentHeader header) + for (int i = 0; i < valuesCount; i++) { - SchemaIndex schemaIndex = new() - { - Header = header - }; - uint unknownPropertyCount = this._reader.ReadUInt(); - schemaIndex.SchemaPointer = new SchemaPropertyPointer[unknownPropertyCount]; - schemaIndex.Unknown1 = this._reader.ReadUInt(); + record.Values.Add(this._reader.ReadBytes((int)record.TypeSize)); + } - for (int i = 0; i < unknownPropertyCount; i++) - { - schemaIndex.SchemaPointer[i] = new SchemaPropertyPointer - { - Index = this._reader.ReadUInt(), - SchemaIndex = this._reader.ReadUInt(), - Offset = this._reader.ReadUInt(), - }; - } + return record; + } - schemaIndex.UnknownMagic = this._reader.ReadRawLong(); - uint propertyEntryCount = this._reader.ReadUInt(); - uint unknownCount = this._reader.ReadUInt(); // 0; 8 + private void readDataFields(CadFileDataStorage storage) + { + foreach (var index in this._dataIndex.Entries.Select(e => e.SegmentIndex).Distinct()) + { + this._reader.Position = (long)this._fileSegmentIndex.Entries[(int)index].Offset; - schemaIndex.UnknownPropertyEntryPointer = new SchemaPropertyPointer[propertyEntryCount]; - for (int i = 0; i < propertyEntryCount; i++) - { - schemaIndex.UnknownPropertyEntryPointer[i] = new SchemaPropertyPointer - { - SchemaIndex = this._reader.ReadUInt(), - Offset = this._reader.ReadUInt(), - Index = this._reader.ReadUInt(), - }; - } + var field = new DataField(); - schemaIndex.SchemaUnknownPropertyPointer = new SchemaPropertyPointer[unknownCount]; - for (int i = 0; i < unknownCount; i++) - { - schemaIndex.SchemaUnknownPropertyPointer[i] = new SchemaPropertyPointer - { - Index = this._reader.ReadUInt(), - SchemaIndex = this._reader.ReadUInt(), - Offset = this._reader.ReadUInt(), - }; - } + var headerStartPosition = this._reader.Position; - schemaIndex.UnknownIndex1 = this._reader.ReadUInt(); + this.readDataStorageFileSegment(field); - // Align to the next 16 byte boundary - long boundary = this._reader.Position % 16; - if (boundary != 0) + if (field.Header.SegmentSize == 0) { - byte[] _ = this._reader.ReadBytes((int)(16 - boundary)); + continue; } - // Read labels (NULL terminated strings) - uint stringCount = this._reader.ReadUInt(); - schemaIndex.SchemaNames = new string[stringCount]; - for (int i = 0; i < stringCount; i++) + var headerEndPosition = this._reader.Position; + List shemaIndexes = this._dataIndex.GetEntriesBySchemaIndex(index); + if (shemaIndexes.Count == 0) { - schemaIndex.SchemaNames[i] = this.readNullTerminatedString(); + continue; } - return schemaIndex; - } - - private DataField readDataValue(SegmentHeader header) - { - DataField dataField = new() - { - Header = header, - Entries = [] - }; - - // Read headers - List headers = []; - uint headerEndPosition = (uint)this._reader.Position; - if (!this._storage.IndexPointers.DataIndex.Entries.TryGetValue(header.SegmentIndex, out DataIndexEntry entry)) + List headers = new(); + foreach (var e in shemaIndexes) { - return dataField; - } + this._reader.Position = headerEndPosition + e.LocalOffset; + DataField.DataHeader entry = new(); - // As entries can be out of order, keep updating the max position to resume correctly after reading all entries - long maxPos = 0; - foreach (DataIndexEntryPointer pointer in entry.Pointers) - { - this._reader.Position = headerEndPosition + pointer.Offset; - headers.Add(new DataHeader - { - EntrySize = this._reader.ReadUInt(), - Unknown1 = this._reader.ReadUInt(), - Handle = this._reader.ReadRawULong(), - DataOffset = this._reader.ReadUInt(), - SchemaIndex = pointer.SchemaIndex - }); - maxPos = Math.Max(maxPos, this._reader.Position); - } - this._reader.Position = maxPos; + entry.Size = this._reader.ReadUInt(); + var unknown1 = this._reader.ReadUInt(); + entry.Handle = this._reader.ReadRawULong(); + entry.LocalOffset = this._reader.ReadUInt(); - // Sort headers to get ascending offset values to prevent wrong offset calculations (TODO: Is this ok or should the order maybe be preserved?) - headers = headers.OrderBy(x => x.DataOffset).ToList(); + headers.Add(entry); + } - // Get the position to the beginning of the data content section and skip padding and unreferenced DataHeader entries - uint headerStartPosition = headerEndPosition - SegmentHeader.SIZE; - uint dataRefPosition = headerStartPosition + (uint)(header.ObjectDataAlignmentOffset << 4); + var dataRefPosition = headerStartPosition + ((long)field.Header.ObjectDataAlignmentOffset << 4); if (dataRefPosition != this._reader.Position) { - byte[] data = this._reader.ReadBytes((int)(dataRefPosition - this._reader.Position)); // Many unreferenced / seemingly dangling DataHeader entries might be defined here, they would // also have valid file data in the next step, where file contents are being read. This can be a lot of entries, e.g. // 10 - 20 valid DataHeader entries have been seen + byte[] data = this._reader.ReadBytes((int)(dataRefPosition - this._reader.Position)); } - // Read data associated with headers for (int i = 0; i < headers.Count; i++) { - DataValue value = new(); - DataHeader dataHeader = headers[i]; - uint recordStreamOffset = dataRefPosition + dataHeader.DataOffset; - uint maxRecordSize = i + 1 < headers.Count ? (headers[i + 1].DataOffset - dataHeader.DataOffset) : (header.SegmentSize - (uint)(header.ObjectDataAlignmentOffset << 4) - dataHeader.DataOffset); - + DataField.DataHeader dataHeader = headers[i]; + var recordStreamOffset = dataRefPosition + dataHeader.LocalOffset; this._reader.Position = recordStreamOffset; + + uint maxRecordSize = i + 1 < headers.Count ? + (headers[i + 1].LocalOffset - dataHeader.LocalOffset) + : (field.Header.SegmentSize - (uint)(field.Header.ObjectDataAlignmentOffset << 4) - dataHeader.LocalOffset); + + DataField.DataEntry value = new(); + value.Header = dataHeader; value.DataSize = this._reader.ReadUInt(); if ((value.DataSize + 4) <= maxRecordSize) { value.Data = this._reader.ReadBytes((int)value.DataSize); - - //// Example how to detect the actual file type based on the file byte signature - //byte[] FILE_MAGIC_PNG = [137, 80, 78, 71, 13, 10, 26, 10]; - //byte[] FILE_MAGIC_ACIS_BINARY = Encoding.ASCII.GetBytes("ACIS BinaryFile"); - //byte[] FILE_MAGIC_ASM_BINARY = Encoding.ASCII.GetBytes("ASM BinaryFile"); - - //if (value.Data.Length >= FILE_MAGIC_PNG.Length && value.Data.AsSpan(0, FILE_MAGIC_PNG.Length).SequenceEqual(FILE_MAGIC_PNG)) { - // // The bytes represent a PNG file - //} - //else if (value.Data.Length >= FILE_MAGIC_ACIS_BINARY.Length && value.Data.AsSpan(0, FILE_MAGIC_ACIS_BINARY.Length).SequenceEqual(FILE_MAGIC_ACIS_BINARY)) { - // // The bytes represent an ACIS binary file - //} - //else if (value.Data.Length >= FILE_MAGIC_ASM_BINARY.Length && value.Data.AsSpan(0, FILE_MAGIC_ASM_BINARY.Length).SequenceEqual(FILE_MAGIC_ASM_BINARY)) { - // // The bytes represent an ACIS / ASM binary file - //} - //else { - // // The bytes represent a file other than a PNG and ACIS file - //} } else if (value.DataSize == 0xbb106bb1) { - value.BlobReference = new DataBlobReference() + var totalDataSize = this._reader.ReadRawULong(); + var pageCount = this._reader.ReadUInt(); + var recordSize = this._reader.ReadUInt(); + var pageSize = this._reader.ReadUInt(); + var lastPageSize = this._reader.ReadUInt(); + var unknown1 = this._reader.ReadUInt(); + var unknown2 = this._reader.ReadUInt(); + + value.BlobReference = new DataField.DataBlobReference() { - TotalDataSize = this._reader.ReadRawULong(), - PageCount = this._reader.ReadUInt(), - RecordSize = this._reader.ReadUInt(), - PageSize = this._reader.ReadUInt(), - LastPageSize = this._reader.ReadUInt(), - Unknown1 = this._reader.ReadUInt(), - Unknown2 = this._reader.ReadUInt(), - SegmentPointers = [] + TotalDataSize = totalDataSize, + PageCount = pageCount, + RecordSize = recordSize, + PageSize = pageSize, + LastPageSize = lastPageSize, + Unknown1 = unknown1, + Unknown2 = unknown2 }; + for (int j = 0; j < value.BlobReference.PageCount; j++) { - value.BlobReference.SegmentPointers.Add(( - this._reader.ReadUInt(), // segment index - this._reader.ReadUInt() // size - )); + var segmentIndex = this._reader.ReadUInt(); + var size = this._reader.ReadUInt(); + var nextPagePosition = this._reader.Position; + + this._reader.Position = (long)this._fileSegmentIndex.Entries[(int)segmentIndex].Offset; + + Blob01 blob = new(); + this.readDataStorageFileSegment(blob); + + blob.TotalDataSize = this._reader.ReadRawULong(); + blob.PageStartOffset = this._reader.ReadRawULong(); + blob.PageIndex = this._reader.ReadUInt(); + blob.PageCount = this._reader.ReadUInt(); + blob.PageDataSize = this._reader.ReadRawULong(); + + blob.Data = this._reader.ReadBytes((int)blob.PageDataSize); + value.BlobReference.Blobs.Add(blob); + + this._reader.Position = nextPagePosition; } } - else - { - Debugger.Break(); // This should not be possible - value.DataSize = 0; - } - dataField.Entries.Add(new DataEntry - { - Header = dataHeader, - Value = value - }); + field.DataEntries.Add(value); + this.processDataValue(storage, value, shemaIndexes[i]); } - - return dataField; } + } + + private DataIndexSegment readDataIndex() + { + this._reader.Position = (long)this._fileSegmentIndex.Entries[(int)this._fileHeader.DataIndexSegmentIndex].Offset; + + DataIndexSegment dataIndex = new(); - private string readNullTerminatedString() + this.readDataStorageFileSegment(dataIndex); + + //UInt32 Unknown property count + int entryCount = this._reader.ReadInt(); + //UInt32 Unknown (0) + var unknown1 = this._reader.ReadInt(); + for (int i = 0; i < entryCount; i++) { - byte b; - List bytes = []; - while ((b = this._reader.ReadByte()) != 0) + //UInt32 Segment index (0 means stub entry and can be ignored). + uint segmentIndex = this._reader.ReadUInt(); + //UInt32 Local offset. This is a local offset in the stream, relative to the file segment’s + //stream start position.This points to a data file segment, see paragraph 24.2.2.3. + uint localOffset = this._reader.ReadUInt(); + //UInt32 Schema index + uint schemaIndex = this._reader.ReadUInt(); + + if (segmentIndex == 0) { - bytes.Add(b); + continue; } - return Encoding.UTF8.GetString(bytes.ToArray()); // TODO: Is this ASCII only or UTF-8 ? - } - private Blob01 readBlob01(SegmentHeader header) - { - Blob01 blob = new() + dataIndex.Entries.Add(new DataIndexSegment.Entry { - Header = header, - TotalDataSize = this._reader.ReadRawULong(), - PageStartOffset = this._reader.ReadRawULong(), - PageIndex = this._reader.ReadUInt(), - PageCount = this._reader.ReadUInt(), - PageDataSize = this._reader.ReadRawULong() - }; - blob.Data = this._reader.ReadBytes((int)blob.PageDataSize); - - // Align to the next 128 byte boundary - long boundary = this._reader.Position % 128; - if (boundary != 0) - { - byte[] _ = this._reader.ReadBytes((int)(128 - boundary)); - } + SegmentIndex = segmentIndex, + LocalOffset = localOffset, + SchemaIndex = schemaIndex, + }); + } - return blob; + return dataIndex; + } + + private void readDataStorageFileSegment(FileSegment segment) + { + var pos = this._reader.Position; + segment.Header = this.readSubItemHeader(); + } + + private FileHeader readFileHeader() + { + FileHeader fileHeader = new(); + + //UInt32 File signature + fileHeader.FileSignature = this._reader.ReadUInt(); + //Int32 File header size + fileHeader.FileHeaderSize = this._reader.ReadInt(); + //Int32 Unknown 1 (always 2?) + fileHeader.Unknown1 = this._reader.ReadInt(); + //Int32 Version(always 2 ?) + fileHeader.Version = this._reader.ReadInt(); + //Int32 Unknown 2 (always 0?) + fileHeader.Unknown2 = this._reader.ReadInt(); + //Int32 Data storage revision + fileHeader.DataStorageRevision = this._reader.ReadInt(); + //Int32 Segment index offset (the stream off set from the data store’s stream start + //position). See paragraph 24.2.2.1 for the segment index file segment. + fileHeader.SegmentIndexOffset = this._reader.ReadInt(); + //Int32 Segment index unknown + fileHeader.SegmentIndexUnknown = this._reader.ReadInt(); + //Int32 Segment index entry count + fileHeader.SegmentIndexEntryCount = this._reader.ReadInt(); + //Int32 Schema index segment index. This is the index into the segment index entry + //array(see paragraph 24.2.2.1) for the schema index file segment(see paragraph 24.2.2.4). + fileHeader.SchemaIndexSegmentIndex = this._reader.ReadInt(); + //Int32 Data index segment index. This is the index into the segment index entry array + //(see paragraph 24.2.2.1) for the data index file segment(see paragraph 24.2.2.2). + fileHeader.DataIndexSegmentIndex = this._reader.ReadInt(); + //Int32 Search segment index + fileHeader.SearchSegmentIndex = this._reader.ReadInt(); + //Int32 Previous save index + fileHeader.PreviousSaveIndex = this._reader.ReadInt(); + //Int32 File size + fileHeader.FileSize = this._reader.ReadInt(); + + return fileHeader; + } + + private FileSegmentIndex readFileSegmentIndex() + { + this._reader.Position = this._fileHeader.SegmentIndexOffset; + + FileSegmentIndex segmentIndex = new(); + + this.readDataStorageFileSegment(segmentIndex); + + for (int i = 0; i < this._fileHeader.SegmentIndexEntryCount; i++) + { + var offset = this._reader.ReadRawULong(); + var size = this._reader.ReadUInt(); + segmentIndex.AddEntry(offset, size); } - private SchemaData readSchemaDataValue(SegmentHeader header) + return segmentIndex; + } + + private string readNullTerminatedString() + { + byte b; + List bytes = []; + while ((b = this._reader.ReadByte()) != 0) { - // Read unknown schema properties - List unknownProps = []; - foreach (SchemaPropertyPointer pointer in this._storage.IndexPointers.SchemaIndex.SchemaUnknownPropertyPointer) - { - if (pointer.SchemaIndex != header.SegmentIndex) continue; - unknownProps.Add(new SchemaUnknownProperty - { - DataSize = this._reader.ReadUInt(), - UnknownFlags = this._reader.ReadUInt() - }); - } + bytes.Add(b); + } + return this._reader.Encoding.GetString(bytes.ToArray()); + } - // Read schemas - List schemaValues = []; - foreach (SchemaPropertyPointer pointer in this._storage.IndexPointers.SchemaIndex.SchemaPointer) - { - if (pointer.SchemaIndex != header.SegmentIndex) continue; - Schema schema = this.readSchema(); - schema.Index = pointer.Index; - schema.Name = this._storage.IndexPointers.SchemaIndex.SchemaNames[pointer.Index]; - schemaValues.Add(schema); - } + private SchemaData readSchemaData(long offset) + { + this._reader.Position = offset; - // Align to the next 16 byte boundary - long boundary = this._reader.Position % 16; - if (boundary != 0) - { - byte[] _ = this._reader.ReadBytes((int)(16 - boundary)); - } + var schemaData = new SchemaData(); - // Read schema property names - uint propertyNameCount = this._reader.ReadUInt(); - string[] propertyNames = new string[propertyNameCount]; - for (int i = 0; i < propertyNameCount; i++) - { - propertyNames[i] = this.readNullTerminatedString(); - } + this.readDataStorageFileSegment(schemaData); - // Assign schema Property names - foreach (Schema schema in schemaValues) - { - foreach (SchemaProperty property in schema.Properties) - { - property.Name = propertyNames[property.NameIndex]; - } - } + long start = this._reader.Position; - return new SchemaData - { - Header = header, - SchemaUnknownProperties = unknownProps, - Values = schemaValues, - }; + // Begin repeat schema unknown properties in the associated schema index file + //segment(paragraph 24.2.2.4), where the property’s segment index is equal to + //this file segment’s segment index(found in the header). + var unknownPropertyCount = this._schemaIndex.PropertyPointers.Count(p => p.SegmentIndex == schemaData.Header.SegmentIndex); + for (int i = 0; i < unknownPropertyCount; i++) + { + var dataSize = this._reader.ReadUInt(); + var unknownFlags = this._reader.ReadUInt(); } - private FreeSpace readFreeSpaceValue(SegmentHeader header) + // Read schemas + foreach (var pointer in this._schemaIndex.SchemaPointers.Where(p => p.SegmentIndex == schemaData.Header.SegmentIndex)) { - FreeSpace space = new() - { - Header = header, - Unknown = this._reader.ReadRawULong(), - FreeSpaces = new FreeSpaceArea[this._storage.FileHeader.FreeSpaceEntryCount] - }; - for (int i = 0; i < space.FreeSpaces.Length; i++) - { // TODO: Sometimes when there is an additional freespace definition, it might not match the `FreeSpaceEntryCount` count - ulong position = this._reader.ReadRawULong(); - uint size = this._reader.ReadUInt(); - space.FreeSpaces[i] = new FreeSpaceArea - { - Position = position, - Size = size - }; - } - return space; + AcdsSchema schema = this.readAcdsSchema(); + + schema.Index = pointer.Index; + schema.Name = this._schemaIndex.SchemaNames[(int)pointer.Index]; + schemaData.Schemes.Add(schema); } - private PreviousSave readPreviousSaveValue(SegmentHeader header) => new() + // Align to the next 16 byte boundary + long boundary = this._reader.Position % 16; + if (boundary != 0) { - Header = header, - FileHeader = this.readFileHeader() - }; + byte[] _ = this._reader.ReadBytes((int)(16 - boundary)); + } - private SchemaSearch readSchemaSearchValue(SegmentHeader header) + // Read schema property names + uint propertyNameCount = this._reader.ReadUInt(); + string[] propertyNames = new string[propertyNameCount]; + for (int i = 0; i < propertyNameCount; i++) { - SchemaSearch schemaSearch = new() - { - Header = header - }; - int schemaCount = this._reader.ReadInt(); - schemaSearch.Entries = []; - for (int j = 0; j < schemaCount; j++) + propertyNames[i] = this.readNullTerminatedString(); + } + + // Assign schema Property names + foreach (AcdsSchema schema in schemaData.Schemes) + { + foreach (AcdsSchemaRecord property in schema.EmbeddedRecords) { - schemaSearch.Entries.Add(this.readSchemaSearchEntry()); + property.Name = propertyNames[(int)property.NameIndex]; } - return schemaSearch; } - private SchemaSearchEntry readSchemaSearchEntry() + return schemaData; + } + + private List readSchemaDataEntries() + { + List schemes = new(); + foreach (var index in this._schemaIndex.GetSchemaIndexes()) { - SchemaSearchEntry search = new() - { - SchemaNameIndex = this._reader.ReadUInt() - }; + var schema = this.readSchemaData((long)this._fileSegmentIndex.Entries[(int)index].Offset); + schemes.Add(schema); + } - ulong sortedIndexCount = this._reader.ReadRawULong(); - search.SortedIndices = new ulong[sortedIndexCount]; - for (ulong i = 0; i < sortedIndexCount; i++) - { - search.SortedIndices[i] = this._reader.ReadRawULong(); - } + return schemes; + } - uint idIndexesCount = this._reader.ReadUInt(); - SearchEntryObject[][] idEntryObjects = new SearchEntryObject[idIndexesCount][]; + private SchemaIndex readSchemaIndex() + { + var startOffset = (long)this._fileSegmentIndex.Entries[(int)this._fileHeader.SchemaIndexSegmentIndex].Offset; + this._reader.Position = startOffset; - // TODO: Find out what it would mean if there were multiple index lists. Never happened in test files so far - if (idIndexesCount > 1) - { - Debugger.Break(); - } + var schema = new SchemaIndex(); - if (idIndexesCount > 0) - { - search.Unknown1 = this._reader.ReadUInt(); + this.readDataStorageFileSegment(schema); - for (uint i = 0; i < idIndexesCount; i++) - { - uint idIndexCount = this._reader.ReadUInt(); + //UInt32 Unknown property count + uint propertyCount = this._reader.ReadUInt(); + //UInt32 Unknown (0) + var unknown0 = this._reader.ReadUInt(); + for (int i = 0; i < propertyCount; i++) + { + //UInt32 Index (starting at 0) + var index = this._reader.ReadUInt(); + //UInt32 Segment index into the segment index file segment entry table (paragraph + //24.2.2.1) of the schema data file segment (paragraph 24.2.2.6) + var schemaIndex = this._reader.ReadUInt(); + //UInt32 Local offset of the unknown schema property. This is a local offset in the + //stream, relative to the schema data file segment’s stream start position. + var offset = this._reader.ReadUInt(); + schema.SchemaPointers.Add(new SchemaIndex.Pointer + { + Index = index, + SegmentIndex = schemaIndex, + LocalOffset = offset, + }); + } - SearchEntryObject[] entryObjects = new SearchEntryObject[idIndexCount]; - for (uint j = 0; j < idIndexCount; j++) - { - ulong handle = this._reader.ReadRawULong(); - - ulong indexCount = this._reader.ReadRawULong(); - ulong[] indices = new ulong[indexCount]; - for (ulong k = 0; k < indexCount; k++) - { - indices[k] = this._reader.ReadRawULong(); - } - - entryObjects[j] = new SearchEntryObject - { - Handle = handle, - Indices = indices - }; - } - idEntryObjects[i] = entryObjects; - } - } - search.IdEntryObjects = idEntryObjects; + //Int64 Unknown (0x0af10c) + var unknown1 = this._reader.ReadRawULong(); + //UInt32 Property entry count + uint propertyEntryCount = this._reader.ReadUInt(); + //UInt32 Unknown (0) + uint unknownCount = this._reader.ReadUInt(); + for (int i = 0; i < propertyEntryCount; i++) + { + //UInt32 Segment index into the segment index file segment entry table (paragraph + //24.2.2.1) of the schema data file segment(paragraph 24.2.2.6). + var schemaIndex = this._reader.ReadUInt(); + //UInt32 Local offset of the schema property. This is a local offset in the stream, relative + //to the schema data file segment’s stream start position. + var offset = this._reader.ReadUInt(); + //UInt32 Index + var index = this._reader.ReadUInt(); + schema.PropertyPointers.Add(new SchemaIndex.Pointer + { + SegmentIndex = schemaIndex, + LocalOffset = offset, + Index = index, + }); + } - return search; + //Begin repeat schema unknown properties in the associated schema index file + //segment(paragraph 24.2.2.4), where the property’s segment index is equal to + //this file segment’s segment index(found in the header). + + //Begin repeat schema entries in the associated schema index file segment + //(paragraph 24.2.2.4), where the property’s segment index is equal to this file + //segment’s segment index(found in the header). + + //A schema, see paragraph 24.2.2.6.1. The stream position is the file segment’s + //start position + the schema entry’s local offset. + var propertyNamesOffset = (long)schema.Header.SystemDataAlignmentOffset << 4; + if (propertyNamesOffset != 0) + { + this._reader.Position = (long)(startOffset + propertyNamesOffset); + //Uint32 Property name count + var nproperties = this._reader.ReadUInt(); + for (int i = 0; i < nproperties; i++) + { + //AnsiString Property name (zero byte delimited). These names are referred to by the + //schema’s schema property’s name index(paragraph 24.2.2.6.1.1).Name + //strings can be shared between multiple schema properties this way.See + //paragraph 24.2.2.6.1 for details about the schema. + schema.SchemaNames.Add(this.readNullTerminatedString()); + } } + + return schema; + } + + private FileSegmentHeader readSubItemHeader() + { + var header = new FileSegmentHeader(); + + //Int16 Signature (always 0xd5ac?) + header.Signature = this._reader.ReadShort(); + //byte[6] Name (6 bytes). Names for the several file segments are: + header.Name = Encoding.ASCII.GetString(this._reader.ReadBytes(6)); + //Int32 Segment index + header.SegmentIndex = this._reader.ReadUInt(); + //Int32 Unknown 1 (0 or 1? 1 in blob01 segment). + header.IsBlob = this._reader.ReadInt(); + //Int32 Segment size (multiple of 0x40 bytes (AutoCAD uses 0x80), padded with 0x70 values). + header.SegmentSize = this._reader.ReadUInt(); + //Int32 Unknown 2 (always 0?) + header.Unknown2 = this._reader.ReadInt(); + //Int32 Data storage revision + header.DataStorageRevision = this._reader.ReadInt(); + //Int32 Unknown 3 (always 0?) + header.Unknown3 = this._reader.ReadInt(); + //Int32 System data alignment offset (calculate the stream position by shifting left 4 + //bits and adding to the file segment’s stream start position). This offset is used + //for schema index and schema data segments.So the name “system data” seems + //to refer to schema index/schema data. + header.SystemDataAlignmentOffset = this._reader.ReadInt(); + //Int32 Object data alignment offset (calculate the stream position by shifting left 4 + //bits and adding to the file segment’s stream start position). This offset is used + //for the data segment. + header.ObjectDataAlignmentOffset = this._reader.ReadInt(); + //byte[8] 8 alignment bytes (always 8 x 0x55?). + var alignmentBytes = this._reader.ReadBytes(8); + + return header; } -} +} \ No newline at end of file diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader_obsolete.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader_obsolete.cs new file mode 100644 index 000000000..4f38b1163 --- /dev/null +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgPrototype1bReader_obsolete.cs @@ -0,0 +1,746 @@ +using ACadSharp.Prototype1b; +using ACadSharp.Prototype1b.Segments; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; + +namespace ACadSharp.IO.DWG.DwgStreamReaders; + +[Obsolete] +internal class DwgPrototype1bReader_obsolete : DwgSectionIO +{ + public override string SectionName => DwgSectionDefinition.AcDsPrototype; + + public static readonly uint[] TYPE_SIZES = new uint[] { 0, 0, 2, 1, 2, 4, 8, 1, 2, 4, 8, 4, 8, 0, 0, 0 }; + + private readonly DwgDocumentBuilder _builder; + + private readonly IDwgStreamReader _reader; + + private readonly Prototype1b.DataStorage _storage = new Prototype1b.DataStorage(); + + public DwgPrototype1bReader_obsolete(ACadVersion version, DwgDocumentBuilder builder, IDwgStreamReader reader) : base(version) + { + this._reader = reader; + this._builder = builder; + } + + public Prototype1b.DataStorage Read() + { + try + { + this._storage.FileHeader = this.readFileHeader(); + + // Indices for reading values + this._storage.IndexPointers = new DataStoragePointers(); + this._storage.IndexPointers.SegmentIndex = this.readSegmentIndex(); + this._storage.IndexPointers.DataIndex = this.readDataIndex(); + this._storage.IndexPointers.SchemaIndex = this.readSchemaIndex(); + this._storage.IndexPointers.FreeSpace = this.readFreeSpace(); // Index to empty spaces (padding or so) within the file + + // Probably the file state before the last save + this._storage.PreviousSave = this.readPreviousSave(); + + // Schema data lookup + this._storage.SchemaSearch = this.readSchemaSearch(); + foreach (SchemaSearchEntry search in this._storage.SchemaSearch.Entries) + { + search.SchemaName = this._storage.IndexPointers.SchemaIndex.SchemaNames[search.SchemaNameIndex]; + } + + this._storage.SchemaFields = []; + this._storage.DataFields = []; + this._storage.Blobs = []; + + // From this point on it should be possible to read storage entries sequentially + // The issue is that sometimes there seemingly are empty padding sections (which should be + // referenced by the FreeSpace entry) that are missing from the FreeSpace definition or are larger + // than specified in the FreeSpace definition. + + this.ReadSegments(); + } + catch (Exception ex) + { + if (!this._builder.Configuration.Failsafe) + throw; + + this.notify("An error occurred while reading the Prototype1b", NotificationType.Error, ex); + } + + return this._storage; + } + + internal IPrototype1bSegment ReadSegment() + { + IPrototype1bSegment segment; + long segmentStartPosition = this._reader.Position; + SegmentHeader header = this.readSubItemHeader(); + segment = this.ReadSegmentData(header); + + // Blob01 entries do not specify how large they are (The headers SegmentSize only has the size of the header without any blob data, blobs are aligned to the next 128 byte boundary) + if (header.IsBlob != 1) + { + // Skip to the end of this sub item + long readSize = this._reader.Position - segmentStartPosition; + long paddingDataSize = header.SegmentSize - readSize; + byte[] _padding = this._reader.ReadBytes((int)paddingDataSize); // Should be filled with only 0x70 values (TODO: Sometimes there are some other strange padding bytes) + } + + return segment; + } + + internal IPrototype1bSegment ReadSegmentAt(ulong offset) + { + long pos = this._reader.Position; + this._reader.Position = (long)offset; + IPrototype1bSegment segment = this.ReadSegment(); + this._reader.Position = pos; + return segment; + } + + internal IPrototype1bSegment ReadSegmentData(SegmentHeader header) => header.Name switch + { + "segidx" => this.readSegmentIndexValue(header), + "datidx" => this.readDataIndexValue(header), + "schidx" => this.readSchemaIndexValue(header), + "search" => this.readSchemaSearchValue(header), + "freesp" => this.readFreeSpaceValue(header), + "prvsav" => this.readPreviousSaveValue(header), + "schdat" => this.readSchemaDataValue(header), + "_data_" => this.readDataValue(header), + "blob01" => this.readBlob01(header), + _ => throw new InvalidDataException($"Unknown segment type \"{header.Name}\""), + }; + + internal void ReadSegments() + { + foreach (KeyValuePair entry in this._storage.IndexPointers.SegmentIndex.Pointers) + { + if (entry.Value.Size == 0) continue; + this._reader.Position = (long)entry.Value.Offset; + + IPrototype1bSegment segment = this.ReadSegment(); + switch (segment) + { + // Those entries have already been parsed (as they were directly referenced in the header + // and there should probably not be any additional entries of the same type) + case SegmentIndex segidx: + case DataIndex datidx: + case SchemaIndex schidx: + case SchemaSearch search: + case FreeSpace freesp: + case PreviousSave prvsav: + break; + + // Add entries which are types that can appear multiple times to a collection of them + case SchemaData schdat: + this._storage.SchemaFields.Add(schdat); + break; + case DataField data: + this._storage.DataFields.Add(data); + break; + case Blob01 blob: + this._storage.Blobs.Add(blob); + break; + default: + break; + } + } + } + + private Blob01 readBlob01(SegmentHeader header) + { + Blob01 blob = new() + { + Header = header, + TotalDataSize = this._reader.ReadRawULong(), + PageStartOffset = this._reader.ReadRawULong(), + PageIndex = this._reader.ReadUInt(), + PageCount = this._reader.ReadUInt(), + PageDataSize = this._reader.ReadRawULong() + }; + blob.Data = this._reader.ReadBytes((int)blob.PageDataSize); + + // Align to the next 128 byte boundary + long boundary = this._reader.Position % 128; + if (boundary != 0) + { + byte[] _ = this._reader.ReadBytes((int)(128 - boundary)); + } + + return blob; + } + + private DataIndex readDataIndex() + { + return (DataIndex)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.DataIndexSegmentIndex].Offset); + } + + private DataIndex readDataIndexValue(SegmentHeader header) + { + DataIndex index = new() + { + Header = header + }; + int entryCount = this._reader.ReadInt(); + index.Unknown1 = this._reader.ReadInt(); + + index.Entries = []; + for (int j = 0; j < entryCount; j++) + { + uint dataSegmentIndex = this._reader.ReadUInt(); + uint dataSegmentOffset = this._reader.ReadUInt(); + uint schemaIndex = this._reader.ReadUInt(); + + // Segment index values of 0 can be ignored (stub entries) + if (dataSegmentIndex == 0) continue; + + // Get or create a data index entry + if (!index.Entries.TryGetValue(dataSegmentIndex, out DataIndexEntry entry)) + { + entry = new DataIndexEntry + { + DataSegmentIndex = dataSegmentIndex, + Pointers = [] + }; + } + + // Add the current pointer to the list of pointers + entry.Pointers.Add(new DataIndexEntryPointer + { + Offset = dataSegmentOffset, + SchemaIndex = schemaIndex + }); + index.Entries[dataSegmentIndex] = entry; + } + + return index; + } + + private DataField readDataValue(SegmentHeader header) + { + DataField dataField = new() + { + Header = header, + Entries = [] + }; + + // Read headers + List headers = []; + uint headerEndPosition = (uint)this._reader.Position; + if (!this._storage.IndexPointers.DataIndex.Entries.TryGetValue(header.SegmentIndex, out DataIndexEntry entry)) + { + return dataField; + } + + // As entries can be out of order, keep updating the max position to resume correctly after reading all entries + long maxPos = 0; + foreach (DataIndexEntryPointer pointer in entry.Pointers) + { + this._reader.Position = headerEndPosition + pointer.Offset; + headers.Add(new DataHeader + { + EntrySize = this._reader.ReadUInt(), + Unknown1 = this._reader.ReadUInt(), + Handle = this._reader.ReadRawULong(), + DataOffset = this._reader.ReadUInt(), + SchemaIndex = pointer.SchemaIndex + }); + maxPos = Math.Max(maxPos, this._reader.Position); + } + this._reader.Position = maxPos; + + // Sort headers to get ascending offset values to prevent wrong offset calculations (TODO: Is this ok or should the order maybe be preserved?) + headers = headers.OrderBy(x => x.DataOffset).ToList(); + + // Get the position to the beginning of the data content section and skip padding and unreferenced DataHeader entries + uint headerStartPosition = headerEndPosition - SegmentHeader.SIZE; + uint dataRefPosition = headerStartPosition + (uint)(header.ObjectDataAlignmentOffset << 4); + if (dataRefPosition != this._reader.Position) + { + byte[] data = this._reader.ReadBytes((int)(dataRefPosition - this._reader.Position)); + // Many unreferenced / seemingly dangling DataHeader entries might be defined here, they would + // also have valid file data in the next step, where file contents are being read. This can be a lot of entries, e.g. + // 10 - 20 valid DataHeader entries have been seen + } + + // Read data associated with headers + for (int i = 0; i < headers.Count; i++) + { + DataValue value = new(); + DataHeader dataHeader = headers[i]; + uint recordStreamOffset = dataRefPosition + dataHeader.DataOffset; + uint maxRecordSize = i + 1 < headers.Count ? (headers[i + 1].DataOffset - dataHeader.DataOffset) : (header.SegmentSize - (uint)(header.ObjectDataAlignmentOffset << 4) - dataHeader.DataOffset); + + this._reader.Position = recordStreamOffset; + value.DataSize = this._reader.ReadUInt(); + if ((value.DataSize + 4) <= maxRecordSize) + { + value.Data = this._reader.ReadBytes((int)value.DataSize); + + //// Example how to detect the actual file type based on the file byte signature + //byte[] FILE_MAGIC_PNG = [137, 80, 78, 71, 13, 10, 26, 10]; + //byte[] FILE_MAGIC_ACIS_BINARY = Encoding.ASCII.GetBytes("ACIS BinaryFile"); + //byte[] FILE_MAGIC_ASM_BINARY = Encoding.ASCII.GetBytes("ASM BinaryFile"); + + //if (value.Data.Length >= FILE_MAGIC_PNG.Length && value.Data.AsSpan(0, FILE_MAGIC_PNG.Length).SequenceEqual(FILE_MAGIC_PNG)) { + // // The bytes represent a PNG file + //} + //else if (value.Data.Length >= FILE_MAGIC_ACIS_BINARY.Length && value.Data.AsSpan(0, FILE_MAGIC_ACIS_BINARY.Length).SequenceEqual(FILE_MAGIC_ACIS_BINARY)) { + // // The bytes represent an ACIS binary file + //} + //else if (value.Data.Length >= FILE_MAGIC_ASM_BINARY.Length && value.Data.AsSpan(0, FILE_MAGIC_ASM_BINARY.Length).SequenceEqual(FILE_MAGIC_ASM_BINARY)) { + // // The bytes represent an ACIS / ASM binary file + //} + //else { + // // The bytes represent a file other than a PNG and ACIS file + //} + } + else if (value.DataSize == 0xbb106bb1) + { + value.BlobReference = new DataBlobReference() + { + TotalDataSize = this._reader.ReadRawULong(), + PageCount = this._reader.ReadUInt(), + RecordSize = this._reader.ReadUInt(), + PageSize = this._reader.ReadUInt(), + LastPageSize = this._reader.ReadUInt(), + Unknown1 = this._reader.ReadUInt(), + Unknown2 = this._reader.ReadUInt(), + SegmentPointers = [] + }; + for (int j = 0; j < value.BlobReference.PageCount; j++) + { + value.BlobReference.SegmentPointers.Add(( + this._reader.ReadUInt(), // segment index + this._reader.ReadUInt() // size + )); + } + } + else + { + Debugger.Break(); // This should not be possible + value.DataSize = 0; + } + + dataField.Entries.Add(new DataEntry + { + Header = dataHeader, + Value = value + }); + } + + return dataField; + } + + private FileHeader readFileHeader() + { + uint fileSignature = this._reader.ReadUInt(); + short fileHeaderSize = this._reader.ReadShort(); + return new() + { + FileSignature = fileSignature, + FileHeaderSize = fileHeaderSize, + UnknownFlag = this._reader.ReadShort(), + Unknown1 = this._reader.ReadInt(), + Version = this._reader.ReadInt(), + Unknown2 = this._reader.ReadInt(), + DataStorageRevision = this._reader.ReadInt(), + SegmentIndexOffset = this._reader.ReadInt(), + SegmentIndexUnknown = this._reader.ReadInt(), + SegmentIndexEntryCount = this._reader.ReadInt(), + SchemaIndexSegmentIndex = this._reader.ReadInt(), + DataIndexSegmentIndex = this._reader.ReadInt(), + SearchSegmentIndex = this._reader.ReadInt(), + PreviousSaveIndex = this._reader.ReadInt(), + FileSize = this._reader.ReadInt(), + Unknown3 = this._reader.ReadInt(), + FreeSpaceSegmentIndex = this._reader.ReadInt(), + FreeSpaceEntryCount = this._reader.ReadInt(), + Unknown5 = this._reader.ReadInt(), + + UnknownRemaining = this._reader.ReadBytes(fileHeaderSize - 72) + }; + } + + private FreeSpace readFreeSpace() + { + if (this._storage.FileHeader.FreeSpaceSegmentIndex == 0) return null; + return (FreeSpace)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.FreeSpaceSegmentIndex].Offset); + } + + private FreeSpace readFreeSpaceValue(SegmentHeader header) + { + FreeSpace space = new() + { + Header = header, + Unknown = this._reader.ReadRawULong(), + FreeSpaces = new FreeSpaceArea[this._storage.FileHeader.FreeSpaceEntryCount] + }; + for (int i = 0; i < space.FreeSpaces.Length; i++) + { // TODO: Sometimes when there is an additional freespace definition, it might not match the `FreeSpaceEntryCount` count + ulong position = this._reader.ReadRawULong(); + uint size = this._reader.ReadUInt(); + space.FreeSpaces[i] = new FreeSpaceArea + { + Position = position, + Size = size + }; + } + return space; + } + + private string readNullTerminatedString() + { + byte b; + List bytes = []; + while ((b = this._reader.ReadByte()) != 0) + { + bytes.Add(b); + } + return Encoding.UTF8.GetString(bytes.ToArray()); // TODO: Is this ASCII only or UTF-8 ? + } + + private PreviousSave readPreviousSave() + { + if (this._storage.FileHeader.PreviousSaveIndex == 0) return null; + return (PreviousSave)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.PreviousSaveIndex].Offset); + } + + private PreviousSave readPreviousSaveValue(SegmentHeader header) => new() + { + Header = header, + FileHeader = this.readFileHeader() + }; + + private Schema readSchema() + { + Schema schema = new(); + + ushort indexCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + schema.Indices = new ulong[indexCount]; + for (int i = 0; i < indexCount; i++) + { + schema.Indices[i] = this._reader.ReadRawULong(); + } + + ushort propCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + schema.Properties = new SchemaProperty[propCount]; + for (int i = 0; i < propCount; i++) + { + schema.Properties[i] = this.readSchemaProperty(); + } + + return schema; + } + + private SchemaData readSchemaDataValue(SegmentHeader header) + { + // Read unknown schema properties + List unknownProps = []; + foreach (SchemaPropertyPointer pointer in this._storage.IndexPointers.SchemaIndex.SchemaUnknownPropertyPointer) + { + if (pointer.SchemaIndex != header.SegmentIndex) continue; + unknownProps.Add(new SchemaUnknownProperty + { + DataSize = this._reader.ReadUInt(), + UnknownFlags = this._reader.ReadUInt() + }); + } + + // Read schemas + List schemaValues = []; + foreach (SchemaPropertyPointer pointer in this._storage.IndexPointers.SchemaIndex.SchemaPointer) + { + if (pointer.SchemaIndex != header.SegmentIndex) continue; + Schema schema = this.readSchema(); + schema.Index = pointer.Index; + schema.Name = this._storage.IndexPointers.SchemaIndex.SchemaNames[pointer.Index]; + schemaValues.Add(schema); + } + + // Align to the next 16 byte boundary + long boundary = this._reader.Position % 16; + if (boundary != 0) + { + byte[] _ = this._reader.ReadBytes((int)(16 - boundary)); + } + + // Read schema property names + uint propertyNameCount = this._reader.ReadUInt(); + string[] propertyNames = new string[propertyNameCount]; + for (int i = 0; i < propertyNameCount; i++) + { + propertyNames[i] = this.readNullTerminatedString(); + } + + // Assign schema Property names + foreach (Schema schema in schemaValues) + { + foreach (SchemaProperty property in schema.Properties) + { + property.Name = propertyNames[property.NameIndex]; + } + } + + return new SchemaData + { + Header = header, + SchemaUnknownProperties = unknownProps, + Values = schemaValues, + }; + } + + private SchemaIndex readSchemaIndex() + { + return (SchemaIndex)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.SchemaIndexSegmentIndex].Offset); + } + + private SchemaIndex readSchemaIndexValue(SegmentHeader header) + { + SchemaIndex schemaIndex = new() + { + Header = header + }; + uint unknownPropertyCount = this._reader.ReadUInt(); + schemaIndex.SchemaPointer = new SchemaPropertyPointer[unknownPropertyCount]; + schemaIndex.Unknown1 = this._reader.ReadUInt(); + + for (int i = 0; i < unknownPropertyCount; i++) + { + schemaIndex.SchemaPointer[i] = new SchemaPropertyPointer + { + Index = this._reader.ReadUInt(), + SchemaIndex = this._reader.ReadUInt(), + Offset = this._reader.ReadUInt(), + }; + } + + schemaIndex.UnknownMagic = this._reader.ReadRawLong(); + uint propertyEntryCount = this._reader.ReadUInt(); + uint unknownCount = this._reader.ReadUInt(); // 0; 8 + + schemaIndex.UnknownPropertyEntryPointer = new SchemaPropertyPointer[propertyEntryCount]; + for (int i = 0; i < propertyEntryCount; i++) + { + schemaIndex.UnknownPropertyEntryPointer[i] = new SchemaPropertyPointer + { + SchemaIndex = this._reader.ReadUInt(), + Offset = this._reader.ReadUInt(), + Index = this._reader.ReadUInt(), + }; + } + + schemaIndex.SchemaUnknownPropertyPointer = new SchemaPropertyPointer[unknownCount]; + for (int i = 0; i < unknownCount; i++) + { + schemaIndex.SchemaUnknownPropertyPointer[i] = new SchemaPropertyPointer + { + Index = this._reader.ReadUInt(), + SchemaIndex = this._reader.ReadUInt(), + Offset = this._reader.ReadUInt(), + }; + } + + schemaIndex.UnknownIndex1 = this._reader.ReadUInt(); + + // Align to the next 16 byte boundary + long boundary = this._reader.Position % 16; + if (boundary != 0) + { + byte[] _ = this._reader.ReadBytes((int)(16 - boundary)); + } + + // Read labels (NULL terminated strings) + uint stringCount = this._reader.ReadUInt(); + schemaIndex.SchemaNames = new string[stringCount]; + for (int i = 0; i < stringCount; i++) + { + schemaIndex.SchemaNames[i] = this.readNullTerminatedString(); + } + + return schemaIndex; + } + + private SchemaProperty readSchemaProperty() + { + SchemaProperty prop = new() + { + PropertyFlags = this._reader.ReadUInt(), // 1 = Unknown / 2 = NoType / 8 = Unknown + NameIndex = this._reader.ReadUInt() + }; + + // Get type size + if (!((prop.PropertyFlags & (1 << 1)) != 0)) + { + prop.Type = this._reader.ReadUInt(); // 0 - 15 + if (prop.Type == 0xe) + { + prop.TypeSize = this._reader.ReadUInt(); + } + else + { + prop.TypeSize = TYPE_SIZES[prop.Type.Value]; + } + } + + // Read unknown fields + if (prop.PropertyFlags == 1) + { + prop.Unknown1 = this._reader.ReadUInt(); + } + else if (prop.PropertyFlags == 8) + { + prop.Unknown2 = this._reader.ReadUInt(); + } + + // Read values + prop.PropertyValueCount = BitConverter.ToUInt16(this._reader.ReadBytes(2), 0); + prop.Values = new byte[prop.PropertyValueCount, prop.TypeSize]; + if (prop.TypeSize != 0) + { + for (int i = 0; i < prop.PropertyValueCount; i++) + { + byte[] propertyValue = this._reader.ReadBytes((int)prop.TypeSize); + for (int j = 0; j < propertyValue.Length; j++) + { + prop.Values[0, j] = propertyValue[j]; + } + } + } + + return prop; + } + + private SchemaSearch readSchemaSearch() + { + return (SchemaSearch)this.ReadSegmentAt(this._storage.IndexPointers.SegmentIndex.Pointers[this._storage.FileHeader.SearchSegmentIndex].Offset); + } + + private SchemaSearchEntry readSchemaSearchEntry() + { + SchemaSearchEntry search = new() + { + SchemaNameIndex = this._reader.ReadUInt() + }; + + ulong sortedIndexCount = this._reader.ReadRawULong(); + search.SortedIndices = new ulong[sortedIndexCount]; + for (ulong i = 0; i < sortedIndexCount; i++) + { + search.SortedIndices[i] = this._reader.ReadRawULong(); + } + + uint idIndexesCount = this._reader.ReadUInt(); + SearchEntryObject[][] idEntryObjects = new SearchEntryObject[idIndexesCount][]; + + // TODO: Find out what it would mean if there were multiple index lists. Never happened in test files so far + if (idIndexesCount > 1) + { + Debugger.Break(); + } + + if (idIndexesCount > 0) + { + search.Unknown1 = this._reader.ReadUInt(); + + for (uint i = 0; i < idIndexesCount; i++) + { + uint idIndexCount = this._reader.ReadUInt(); + + SearchEntryObject[] entryObjects = new SearchEntryObject[idIndexCount]; + for (uint j = 0; j < idIndexCount; j++) + { + ulong handle = this._reader.ReadRawULong(); + + ulong indexCount = this._reader.ReadRawULong(); + ulong[] indices = new ulong[indexCount]; + for (ulong k = 0; k < indexCount; k++) + { + indices[k] = this._reader.ReadRawULong(); + } + + entryObjects[j] = new SearchEntryObject + { + Handle = handle, + Indices = indices + }; + } + idEntryObjects[i] = entryObjects; + } + } + search.IdEntryObjects = idEntryObjects; + + return search; + } + + private SchemaSearch readSchemaSearchValue(SegmentHeader header) + { + SchemaSearch schemaSearch = new() + { + Header = header + }; + int schemaCount = this._reader.ReadInt(); + schemaSearch.Entries = []; + for (int j = 0; j < schemaCount; j++) + { + schemaSearch.Entries.Add(this.readSchemaSearchEntry()); + } + return schemaSearch; + } + + private SegmentIndex readSegmentIndex() + { + return (SegmentIndex)this.ReadSegmentAt((ulong)this._storage.FileHeader.SegmentIndexOffset); + } + + private SegmentIndex readSegmentIndexValue(SegmentHeader header) + { + SegmentIndex index = new() + { + Header = header, + Pointers = [] + }; + for (int j = 0; j < this._storage.FileHeader.SegmentIndexEntryCount; j++) + { + index.Pointers[j] = new SegmentIndexEntry + { + Offset = this._reader.ReadRawULong(), + Size = this._reader.ReadUInt() + }; + } + + // TODO: Sometimes additional bytes (that are not padding bytes) follow here until the segment size + // They actually seem to be garbage data and can be ignored. Often times there are seemingly + // random bytes without any pattern and sometimes there are bytes representing 2-Byte strings. + // Garbage string examples are e.g.: + // --> "nslation\0" followed by the bytes [0, 0, 7, 0, 176, 4] + // --> "k\\auto" + // --> "op> "utocad" + // --> "atio" + + return index; + } + + private SegmentHeader readSubItemHeader() + { + return new() + { + Signature = this._reader.ReadShort(), + Name = Encoding.ASCII.GetString(this._reader.ReadBytes(6)), + SegmentIndex = this._reader.ReadUInt(), + IsBlob = this._reader.ReadInt(), + SegmentSize = this._reader.ReadUInt(), // Multiple of 0x40 bytes (AutoCAD uses 0x80), padded wth 0x70 values + Unknown1 = this._reader.ReadInt(), + DataStorageRevision = this._reader.ReadInt(), + Unknown2 = this._reader.ReadInt(), + SystemDataAlignmentOffset = this._reader.ReadInt(), + ObjectDataAlignmentOffset = this._reader.ReadInt(), + AlignmentBytes = this._reader.ReadBytes(8) // Align to next 16 byte boundary + }; + } +} \ No newline at end of file diff --git a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderBase.cs b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderBase.cs index 0319e6339..834583864 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderBase.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamReaders/DwgStreamReaderBase.cs @@ -1235,6 +1235,11 @@ private DateTime julianToDate(int jdate, int miliseconds) dtDateTime = DateTime.MinValue; } + if (miliseconds < 0) + { + return dtDateTime; + } + return dtDateTime.AddMilliseconds(miliseconds); } } diff --git a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs index 9cd5b527c..9ea1ce14b 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.Objects.cs @@ -7,7 +7,6 @@ using CSUtilities.Text; using System; using System.Collections.Generic; -using System.ComponentModel; using System.Globalization; using System.IO; using System.Linq; @@ -51,6 +50,7 @@ private bool skipEntry(NonGraphicalObject entry, out bool notify) case AecCleanupGroup: case AecBinRecord: case DimensionAssociation: + case DimensionObjectContextData: case UnknownNonGraphicalObject: case VisualStyle: case ProxyObject: diff --git a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.cs b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.cs index b0b0b9381..d607032e5 100644 --- a/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.cs +++ b/src/ACadSharp/IO/DWG/DwgStreamWriters/DwgObjectWriter.cs @@ -154,6 +154,7 @@ private bool isEntitySupported(Entity entity) case Solid3D: case CadBody: case Region: + case Surface: this.notify($"Entity type not implemented {entity.GetType().FullName}", NotificationType.NotImplemented); return false; default: diff --git a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfAcdsDataSectionReader.cs b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfAcdsDataSectionReader.cs index 78060d426..4b53f891a 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfAcdsDataSectionReader.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfAcdsDataSectionReader.cs @@ -1,6 +1,7 @@ using ACadSharp.DataStorage; using System; using System.Collections.Generic; +using System.IO; namespace ACadSharp.IO.DXF.DxfStreamReader; @@ -99,11 +100,21 @@ private AcdsRecordColumn readAcdsRecordColumn() { switch (this._reader.Code) { + case 94: + //Bin data length + break; case 280: column.DataType = this._reader.ValueAsShort; break; + case 310: + column.Data ??= new MemoryStream(); + column.Data.Write(this._reader.ValueAsBinaryChunk, 0, this._reader.ValueAsBinaryChunk.Length); + break; + case 320: + column.Handle = this._reader.ValueAsHandle; + break; default: - column.CodeValuePair = new KeyValuePair(this._reader.Code, this._reader.Value); + this._builder.Notify($"Unexpected code {this._reader.Code} in ACDS record column.", NotificationType.Warning); break; } @@ -162,11 +173,14 @@ private AcdsSchemaRecord readEmbeddedRecord() case 90: record.Index = (int)this._reader.ValueAsInt; break; + case 91: + record.Flags = (SchemaRecordFlags)this._reader.ValueAsInt; + break; case 95: record.Id = (int)this._reader.ValueAsShort; break; case 280: - record.Value280 = this._reader.ValueAsShort; + record.Type = (uint)this._reader.ValueAsInt; break; case 291: record.Value291 = this._reader.ValueAsShort; diff --git a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfObjectsSectionReader.cs b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfObjectsSectionReader.cs index 92e0f7eeb..dd0ae55d4 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfObjectsSectionReader.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfObjectsSectionReader.cs @@ -108,6 +108,25 @@ private bool readAnnotScaleObjectContextData(CadTemplate template, DxfMap map) } } + private bool readDimensionObjectContextData(CadTemplate template, DxfMap map) + { + var tmp = template as CadDimensionObjectContextDataTemplate; + switch (this._reader.Code) + { + case 2: + tmp.BlockName = this._reader.ValueAsString; + return true; + default: + //AcDbAnnotScaleObjectContextData has no properties of its own in the map + if (!string.IsNullOrEmpty(this.currentSubclass) && !map.SubClasses.ContainsKey(this.currentSubclass)) + { + return this._reader.Code == 340 && this.readAnnotScaleObjectContextData(template, map); + } + + return this.readAnnotScaleObjectContextData(template, map); + } + } + private bool readBlock1PtParameter(CadTemplate template, DxfMap map) { CadBlock1PtParameterTemplate tmp = template as CadBlock1PtParameterTemplate; @@ -2229,6 +2248,18 @@ private CadTemplate readObject() return this.readObjectCodes(new CadAnnotScaleObjectContextDataTemplate(new BlockReferenceObjectContextData()), this.readAnnotScaleObjectContextData); case DxfFileToken.MTextAttributeObjectContextData: return this.readObjectCodes(new CadAnnotScaleObjectContextDataTemplate(new MTextAttributeObjectContextData()), this.readAnnotScaleObjectContextData); + case DxfFileToken.AlignedDimensionObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new AlignedDimensionObjectContextData()), this.readDimensionObjectContextData); + case DxfFileToken.AngularDimensionObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new AngularDimensionObjectContextData()), this.readDimensionObjectContextData); + case DxfFileToken.DiametricDimensionObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new DiametricDimensionObjectContextData()), this.readDimensionObjectContextData); + case DxfFileToken.OrdinateDimensionObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new OrdinateDimensionObjectContextData()), this.readDimensionObjectContextData); + case DxfFileToken.RadialDimensionObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new RadialDimensionObjectContextData()), this.readDimensionObjectContextData); + case DxfFileToken.RadialDimensionLargeObjectContextData: + return this.readObjectCodes(new CadDimensionObjectContextDataTemplate(new RadialDimensionLargeObjectContextData()), this.readDimensionObjectContextData); case DxfFileToken.ObjectPlaceholder: return this.readObjectCodes(new CadNonGraphicalObjectTemplate(new AcdbPlaceHolder()), this.readObjectSubclassMap); case DxfFileToken.ObjectDBColor: @@ -3157,7 +3188,8 @@ private void readXRecordEntries(CadXRecordTemplate template) case GroupCodeValueType.Handle: case GroupCodeValueType.ObjectId: case GroupCodeValueType.ExtendedDataHandle: - template.AddHandleReference(this._reader.Code, this._reader.ValueAsHandle); + var entry = template.CadObject.CreateEntry(this._reader.Code, this._reader.ValueAsHandle); + template.AddHandleReference(entry); break; default: template.CadObject.CreateEntry(this._reader.Code, this._reader.Value); diff --git a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfSectionReaderBase.cs b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfSectionReaderBase.cs index 5f4a2c09e..ee59e69d5 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfSectionReaderBase.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfSectionReaderBase.cs @@ -229,6 +229,20 @@ protected CadEntityTemplate readEntity() return this.readEntityCodes(new CadSolid3DTemplate(), this.readSolid3d); case DxfFileToken.EntityRegion: return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readModelerGeometry); + case DxfFileToken.EntitySurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntityExtrudedSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntityLoftedSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntityNurbSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntityPlaneSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntityRevolvedSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); + case DxfFileToken.EntitySweptSurface: + return this.readEntityCodes(new CadModelerGeometryTemplate(), this.readSurfaceEntity); case DxfFileToken.EntityImage: return this.readEntityCodes(new CadWipeoutBaseTemplate(new RasterImage()), this.readWipeoutBase); case DxfFileToken.EntityWipeout: @@ -822,6 +836,12 @@ private bool readDimension(CadEntityTemplate template, DxfMap map, string subcla default: break; } + + //The codes that follow belong to the dimension type, + //DimensionLinear keeps its points in AcDbAlignedDimension and the code 50 is read by this method + this.currentSubclass = tmp.CadObject is DimensionLinear + ? DxfSubclassMarker.AlignedDimension + : tmp.CadObject.SubclassMarker; } return true; //Measurement - read only @@ -829,8 +849,6 @@ private bool readDimension(CadEntityTemplate template, DxfMap map, string subcla return true; //Undocumented codes case 73: - case 74: - case 75: case 90: case 361: return true; @@ -882,7 +900,14 @@ private bool readDimension(CadEntityTemplate template, DxfMap map, string subcla this.currentSubclass = tmp.CadObject.SubclassMarker; } - return this.tryAssignCurrentValue(template.CadObject, map); + if (this.tryAssignCurrentValue(template.CadObject, map)) + { + return true; + } + + //Pre R13 files write AcDbDimension codes like the text (1) after the code 70, mixed with the codes of the dimension type + return this._builder.Version < ACadVersion.AC1012 + && this.tryAssignCurrentValue(template.CadObject, map.SubClasses[DxfSubclassMarker.Dimension]); } } @@ -1612,6 +1637,29 @@ private bool readSolid3d(CadEntityTemplate template, DxfMap map, string subclass } } + private bool readSurfaceEntity(CadEntityTemplate template, DxfMap map, string subclass = null) + { + switch (this._reader.Code) + { + //SAT text and modeler geometry codes: same handling as the other + //modeler geometry entities (the template accumulates the payload) + case 1: + case 2: + case 3: + case 290: + return this.readModelerGeometry(template, map, DxfSubclassMarker.ModelerGeometry); + default: + //surface codes (the isoline counts) resolve through the map of + //the subclass being read + if (this.tryAssignCurrentValue(template.CadObject, map)) + { + return true; + } + + return this.readModelerGeometry(template, map, DxfSubclassMarker.ModelerGeometry); + } + } + private bool readSpline(CadEntityTemplate template, DxfMap map, string subclass = null) { CadSplineTemplate tmp = template as CadSplineTemplate; diff --git a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfTablesSectionReader.cs b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfTablesSectionReader.cs index 2590fdbfc..48444ca63 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamReader/DxfTablesSectionReader.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamReader/DxfTablesSectionReader.cs @@ -32,7 +32,7 @@ public override void Read() { if (this._reader.ValueAsString == DxfFileToken.TableEntry) - this.readTable(); + this.ReadTable(); else throw new DxfException($"Unexpected token at the beginning of a table: {this._reader.ValueAsString}", this._reader.Position); @@ -44,7 +44,14 @@ public override void Read() } } - private void readTable() + /// + /// Reads a single table, from its TABLE token to the matching ENDTAB token. + /// + /// + /// The reader must be positioned at the TABLE token on entry and is positioned at the ENDTAB token on return. + /// Exposed so that can recover tables found outside of the TABLES section. + /// + internal void ReadTable() { Debug.Assert(this._reader.ValueAsString == DxfFileToken.TableEntry); @@ -223,16 +230,13 @@ private void readEntries(CadTableTemplate tableTemplate) if (tableTemplate.CadObject.Contains(template.Name) && this._builder.Configuration.Failsafe) { + //Keep the first definition, the duplicated entry is discarded this._builder.Notify($"Duplicated entry with name {template.Name} found in {template.CadObject.ObjectName}", NotificationType.Warning); - - tableTemplate.CadObject.Remove(template.Name); - tableTemplate.CadObject.Add((T)template.CadObject); - } - else - { - tableTemplate.CadObject.Add((T)template.CadObject); + continue; } + tableTemplate.CadObject.Add((T)template.CadObject); + //Add the object and the template to the builder this._builder.AddTemplate(template); } diff --git a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs index 511a53472..270d9f645 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfObjectsSectionWriter.cs @@ -713,6 +713,10 @@ protected void writeXRecord(XRecord record) case GroupCodeValueType.ObjectId: case GroupCodeValueType.ExtendedDataHandle: var obj = e.Value as IHandledCadObject; + if(obj == null) + { + continue; + } this._writer.Write(e.Code, obj.Handle); break; default: @@ -741,6 +745,7 @@ private bool isObjectSupported(CadObject co) case AecCleanupGroup: case AecBinRecord: case DimensionAssociation: + case DimensionObjectContextData: case Material: case MultiLeaderObjectContextData: case VisualStyle: diff --git a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs index eecf48192..8e24f8afa 100644 --- a/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs +++ b/src/ACadSharp/IO/DXF/DxfStreamWriter/DxfSectionWriterBase.Entities.cs @@ -159,6 +159,7 @@ private bool isEntitySupported(Entity entity) case Solid3D: case CadBody: case Region: + case Surface: this.notify($"Entity type not implemented {entity.GetType().FullName}", NotificationType.NotImplemented); return false; default: @@ -307,6 +308,12 @@ private void writeDimension(Dimension dim) this._writer.Write(72, (short)dim.LineSpacingStyle, map); this._writer.Write(41, dim.LineSpacingFactor, map); + if (this.Version >= ACadVersion.AC1021) + { + this._writer.Write(74, dim.FlipArrow1, map); + this._writer.Write(75, dim.FlipArrow2, map); + } + if (!string.IsNullOrEmpty(dim.Text)) { this._writer.Write(1, dim.Text, map); @@ -922,6 +929,26 @@ private void writeMText(MText mtext, bool writeSubclass = true) this._writer.Write(210, mtext.Normal, map); + //Background fill and text frame, R2004+ (text frame R2018+) + if (this.Version >= ACadVersion.AC1018 && mtext.BackgroundFillFlags != BackgroundFillFlags.None) + { + this._writer.Write(90, (int)mtext.BackgroundFillFlags, map); + + //Color, scale and transparency only when the background is filled or the text is framed + if ((mtext.BackgroundFillFlags & (BackgroundFillFlags.UseBackgroundFillColor | BackgroundFillFlags.TextFrame)) + != BackgroundFillFlags.None) + { + this._writer.WriteCmColor(63, mtext.BackgroundColor, map); + if (mtext.BackgroundColor.IsTrueColor) + { + this._writer.WriteTrueColor(421, mtext.BackgroundColor, map); + } + + this._writer.Write(45, mtext.BackgroundScale, map); + this._writer.Write(441, Transparency.ToAlphaValue(mtext.BackgroundTransparency), map); + } + } + if (!mtext.HasColumns || this.Version < ACadVersion.AC1032) { return; diff --git a/src/ACadSharp/IO/DwgReader.cs b/src/ACadSharp/IO/DwgReader.cs index 1022722fe..574e9f4e9 100644 --- a/src/ACadSharp/IO/DwgReader.cs +++ b/src/ACadSharp/IO/DwgReader.cs @@ -125,6 +125,7 @@ public override CadDocument Read() this.readAuxHeader(); this._builder.BuildDocument(); + this._builder.BuildDataStorage(); return this._document; } @@ -594,9 +595,15 @@ private void readDsPrototype_1b() } var reader = new DwgPrototype1bReader(this._fileHeader.AcadVersion, this._builder, sreader); - reader.OnNotification += onNotificationEvent; + reader.OnNotification += this.onNotificationEvent; + reader.Read(); - this._document.DataStorage = reader.Read(); + //Backwards compatibility with older versions of the library + //Remove on 3.9.0 + sreader.Position = 0; + var obs = new DwgPrototype1bReader_obsolete(this._fileHeader.AcadVersion, this._builder, sreader); + obs.OnNotification += onNotificationEvent; + this._document.DataStorage = obs.Read(); } /// diff --git a/src/ACadSharp/IO/DxfReader.cs b/src/ACadSharp/IO/DxfReader.cs index 86139e926..1a11e6146 100644 --- a/src/ACadSharp/IO/DxfReader.cs +++ b/src/ACadSharp/IO/DxfReader.cs @@ -156,8 +156,24 @@ public override CadDocument Read() this._builder = new DxfDocumentBuilder(this._version, this._document, this.Configuration); this._builder.OnNotification += this.onNotificationEvent; + //Only created if a TABLE is found outside of the TABLES section (non-standard dxf) + DxfTablesSectionReader orphanTablesReader = null; + while (this._reader.ValueAsString != DxfFileToken.EndOfFile) { + if (this._reader.ValueAsString == DxfFileToken.TableEntry) + { + if (orphanTablesReader == null) + { + this.triggerNotification("Non-standard DXF: TABLE entry found outside of a TABLES section. Attempting recovery.", NotificationType.Warning); + orphanTablesReader = new DxfTablesSectionReader(this._reader, this._builder); + } + + //Reads up to the ENDTAB token, which the loop skips like any other token outside of a section + orphanTablesReader.ReadTable(); + continue; + } + if (this._reader.ValueAsString != DxfFileToken.BeginSection) { this._reader.ReadNext(); @@ -173,6 +189,11 @@ public override CadDocument Read() case DxfFileToken.HeaderSection: this._document.Header = this.ReadHeader(); this._document.Header.Document = this._document; + //Handle 0 belongs to the document, a seed of 0 would hand it out again + if (this._document.Header.HandleSeed == 0) + { + this._document.Header.HandleSeed = 1; + } this._builder.InitialHandSeed = this._document.Header.HandleSeed; break; case DxfFileToken.ClassesSection: diff --git a/src/ACadSharp/IO/Templates/CadDimensionObjectContextDataTemplate.cs b/src/ACadSharp/IO/Templates/CadDimensionObjectContextDataTemplate.cs index 4b333b33f..cfb7725bf 100644 --- a/src/ACadSharp/IO/Templates/CadDimensionObjectContextDataTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadDimensionObjectContextDataTemplate.cs @@ -7,12 +7,17 @@ internal class CadDimensionObjectContextDataTemplate : CadAnnotScaleObjectContex { public ulong? BlockHandle { get; set; } + public string BlockName { get; set; } + public CadDimensionObjectContextDataTemplate(DimensionObjectContextData cadObject) : base(cadObject) { } protected override void build(CadDocumentBuilder builder) { base.build(builder); - if (builder.TryGetCadObject(this.BlockHandle, out BlockRecord block)) + + if (this.getTableReference(builder, this.BlockHandle, this.BlockName, out BlockRecord block)) + { ((DimensionObjectContextData)this.CadObject).Block = block; + } } } diff --git a/src/ACadSharp/IO/Templates/CadDimensionStyleTemplate.cs b/src/ACadSharp/IO/Templates/CadDimensionStyleTemplate.cs index d5353f330..397f2c4f7 100644 --- a/src/ACadSharp/IO/Templates/CadDimensionStyleTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadDimensionStyleTemplate.cs @@ -64,11 +64,16 @@ protected override void build(CadDocumentBuilder builder) this.CadObject.LineTypeExt2 = linetTypeEx2; } - if (this.getTableReference(builder, this.DIMLDRBLK, this.DIMBL_Name, out BlockRecord leaderArrow)) + if (this.getTableReference(builder, this.DIMLDRBLK, null, out BlockRecord leaderArrow)) { this.CadObject.LeaderArrow = leaderArrow; } + if (this.getTableReference(builder, this.DIMBLK, this.DIMBL_Name, out BlockRecord arrowBlock)) + { + this.CadObject.ArrowBlock = arrowBlock; + } + if (this.getTableReference(builder, this.DIMBLK1, this.DIMBLK1_Name, out BlockRecord dimArrow1)) { this.CadObject.DimArrow1 = dimArrow1; diff --git a/src/ACadSharp/IO/Templates/CadDimensionTemplate.cs b/src/ACadSharp/IO/Templates/CadDimensionTemplate.cs index ec29347db..5e24e8a4c 100644 --- a/src/ACadSharp/IO/Templates/CadDimensionTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadDimensionTemplate.cs @@ -98,6 +98,8 @@ public void SetDimensionObject(Dimension dimension) dimension.Text = source.Text; dimension.TextRotation = source.TextRotation; dimension.HorizontalDirection = source.HorizontalDirection; + dimension.FlipArrow1 = source.FlipArrow1; + dimension.FlipArrow2 = source.FlipArrow2; dimension.Flags = source.Flags; diff --git a/src/ACadSharp/IO/Templates/CadLayerTemplate.cs b/src/ACadSharp/IO/Templates/CadLayerTemplate.cs index aa5478674..9139a1406 100644 --- a/src/ACadSharp/IO/Templates/CadLayerTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadLayerTemplate.cs @@ -5,8 +5,6 @@ namespace ACadSharp.IO.Templates { internal class CadLayerTemplate : CadTableEntryTemplate { - public ulong LayerControlHandle { get; set; } - public ulong PlotStyleHandle { get; set; } public ulong MaterialHandle { get; set; } diff --git a/src/ACadSharp/IO/Templates/CadXRecordTemplate.cs b/src/ACadSharp/IO/Templates/CadXRecordTemplate.cs index da87f8a11..a0fc5cc88 100644 --- a/src/ACadSharp/IO/Templates/CadXRecordTemplate.cs +++ b/src/ACadSharp/IO/Templates/CadXRecordTemplate.cs @@ -1,35 +1,42 @@ using ACadSharp.Objects; -using System; -namespace ACadSharp.IO.Templates +namespace ACadSharp.IO.Templates; + +internal class CadXRecordTemplate : CadTemplate { - internal class CadXRecordTemplate : CadTemplate + private readonly System.Collections.Generic.List _entries = new(); + + public CadXRecordTemplate() : base(new XRecord()) { - private readonly System.Collections.Generic.List> _entries = new(); + } - public CadXRecordTemplate() : base(new XRecord()) { } + public CadXRecordTemplate(XRecord cadObject) : base(cadObject) + { + } - public CadXRecordTemplate(XRecord cadObject) : base(cadObject) { } + public void AddHandleReference(XRecord.Entry entry) + { + _entries.Add(entry); + } - public void AddHandleReference(int code, ulong handle) - { - _entries.Add(new Tuple(code, handle)); - } + protected override void build(CadDocumentBuilder builder) + { + base.build(builder); - protected override void build(CadDocumentBuilder builder) + foreach (var entry in _entries) { - base.build(builder); + if (!(entry.Value is ulong handle)) + { + continue; + } - foreach (var entry in _entries) + if (builder.TryGetCadObject(handle, out CadObject obj)) + { + entry.Value = obj; + } + else { - if (builder.TryGetCadObject(entry.Item2, out CadObject obj)) - { - this.CadObject.CreateEntry(entry.Item1, obj); - } - else - { - builder.Notify($"XRecord reference not found {entry.Item1}|{entry.Item2}", NotificationType.Warning); - } + builder.Notify($"XRecord with handle {this.CadObject.Handle} reference with handle {handle} not found.", NotificationType.Warning); } } } diff --git a/src/ACadSharp/IProxy.cs b/src/ACadSharp/IProxy.cs index ea6939799..df41357fe 100644 --- a/src/ACadSharp/IProxy.cs +++ b/src/ACadSharp/IProxy.cs @@ -1,4 +1,5 @@ using ACadSharp.Classes; +using System.IO; namespace ACadSharp; @@ -29,5 +30,10 @@ public interface IProxy /// int ProxyClassId { get; } + /// + /// Gets or sets the retained data of the original object. + /// + Stream Data { get; set; } + ACadVersion Version { get; set; } } diff --git a/src/ACadSharp/Objects/AlignedDimensionObjectContextData.cs b/src/ACadSharp/Objects/AlignedDimensionObjectContextData.cs new file mode 100644 index 000000000..8fa0169f0 --- /dev/null +++ b/src/ACadSharp/Objects/AlignedDimensionObjectContextData.cs @@ -0,0 +1,24 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of an aligned or linear dimension. +/// +[DxfName(DxfFileToken.AlignedDimensionObjectContextData)] +[DxfSubClass(DxfSubclassMarker.AlignedDimensionObjectContextData)] +public class AlignedDimensionObjectContextData : DimensionObjectContextData +{ + /// + /// Point on the dimension line. + /// + [DxfCodeValue(11, 21, 31)] + public XYZ DimensionLinePoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.AlignedDimensionObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.AlignedDimensionObjectContextData; +} diff --git a/src/ACadSharp/Objects/AngularDimensionObjectContextData.cs b/src/ACadSharp/Objects/AngularDimensionObjectContextData.cs new file mode 100644 index 000000000..8b09d011f --- /dev/null +++ b/src/ACadSharp/Objects/AngularDimensionObjectContextData.cs @@ -0,0 +1,24 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of an angular or arc length dimension. +/// +[DxfName(DxfFileToken.AngularDimensionObjectContextData)] +[DxfSubClass(DxfSubclassMarker.AngularDimensionObjectContextData)] +public class AngularDimensionObjectContextData : DimensionObjectContextData +{ + /// + /// Point on the dimension arc. + /// + [DxfCodeValue(11, 21, 31)] + public XYZ ArcPoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.AngularDimensionObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.AngularDimensionObjectContextData; +} diff --git a/src/ACadSharp/Objects/DiametricDimensionObjectContextData.cs b/src/ACadSharp/Objects/DiametricDimensionObjectContextData.cs new file mode 100644 index 000000000..5c6986f5a --- /dev/null +++ b/src/ACadSharp/Objects/DiametricDimensionObjectContextData.cs @@ -0,0 +1,30 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of a diametric dimension. +/// +[DxfName(DxfFileToken.DiametricDimensionObjectContextData)] +[DxfSubClass(DxfSubclassMarker.DiametricDimensionObjectContextData)] +public class DiametricDimensionObjectContextData : DimensionObjectContextData +{ + /// + /// Point on the curve where the dimension line starts. + /// + [DxfCodeValue(11, 21, 31)] + public XYZ FirstArcPoint { get; set; } + + /// + /// Point on the curve opposite to . + /// + [DxfCodeValue(12, 22, 32)] + public XYZ DefinitionPoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.DiametricDimensionObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.DiametricDimensionObjectContextData; +} diff --git a/src/ACadSharp/Objects/DimensionObjectContextData.cs b/src/ACadSharp/Objects/DimensionObjectContextData.cs index 28f991dd7..32c9826a4 100644 --- a/src/ACadSharp/Objects/DimensionObjectContextData.cs +++ b/src/ACadSharp/Objects/DimensionObjectContextData.cs @@ -1,16 +1,117 @@ +using ACadSharp.Attributes; +using ACadSharp.Extensions; using ACadSharp.Tables; +using CSMath; namespace ACadSharp.Objects; /// -/// Annotation scale representation of a dimension (ACDB_*DIMOBJECTCONTEXTDATA_CLASS): the dimension's -/// geometry block for one annotation scale. Only the block is read. +/// Annotation scale representation of a dimension: the dimension's geometry block and text placement for one annotation scale. /// -public class DimensionObjectContextData : AnnotScaleObjectContextData +[DxfSubClass(DxfSubclassMarker.DimensionObjectContextData)] +public abstract class DimensionObjectContextData : AnnotScaleObjectContextData { - /// Anonymous block holding the dimension's graphics at . + /// + /// Anonymous block holding the dimension's graphics at . + /// + [DxfCodeValue(DxfReferenceType.Name, 2)] public BlockRecord Block { get; set; } + /// + /// Arrow fit override (DIMATFIT) for this scale. + /// + /// + /// Only read from DXF, DWG files store only whether the value is overridden. + /// + [DxfCodeValue(70)] + public TextArrowFitType DimensionTextArrowFit { get; set; } + + /// + /// Flips the first arrowhead. + /// + [DxfCodeValue(297)] + public bool FlipFirstArrow { get; set; } + + /// + /// Flips the second arrowhead. + /// + [DxfCodeValue(296)] + public bool FlipSecondArrow { get; set; } + + /// + /// Indicates whether the text is at its default location. + /// + [DxfCodeValue(294)] + public bool IsDefaultTextLocation { get; set; } + + /// + /// Flags of the dimension variables overridden for this scale. + /// + /// + /// 1 = DIMTOFL, 4 = DIMATFIT, 8 = DIMTIX, 16 = DIMTMOVE. + /// + [DxfCodeValue(280)] + public byte OverrideFlags { get; set; } + + /// + public override string SubclassMarker => DxfSubclassMarker.DimensionObjectContextData; + + /// + /// Suppress dimension lines outside the extension lines override (DIMSOXD) for this scale. + /// + [DxfCodeValue(291)] + public bool SuppressOutsideExtensions { get; set; } + + /// + /// Text inside extension lines override (DIMTIX) for this scale. + /// + [DxfCodeValue(292)] + public bool TextInsideExtensions { get; set; } + + /// + /// Text location in the dimension's plane. + /// + [DxfCodeValue(10, 20)] + public XY TextLocation { get; set; } + + /// + /// Text movement override (DIMTMOVE) for this scale. + /// + /// + /// Only read from DXF, DWG files store only whether the value is overridden. + /// + [DxfCodeValue(71)] + public TextMovement TextMovement { get; set; } + + /// + /// Draw dimension line between extension lines override (DIMTOFL) for this scale. + /// + [DxfCodeValue(298)] + public bool TextOutsideExtensions { get; set; } + + /// + /// Text rotation, in radians. + /// + [DxfCodeValue(140)] + public double TextRotation { get; set; } + + /// + /// Unknown flag (DXF 293). + /// + [DxfCodeValue(293)] + public bool Unknown293 { get; set; } + + /// + /// Unknown flag (DXF 295). + /// + [DxfCodeValue(295)] + public bool Unknown295 { get; set; } + /// - public override string ObjectName => "ACDB_DIMOBJECTCONTEXTDATA_CLASS"; + public override CadObject Clone() + { + DimensionObjectContextData clone = (DimensionObjectContextData)base.Clone(); + clone.Block = this.Block?.CloneTyped(); + return clone; + } } diff --git a/src/ACadSharp/Objects/MultiLeaderObjectContextData.LeaderLine.cs b/src/ACadSharp/Objects/MultiLeaderObjectContextData.LeaderLine.cs index 58bed5c1e..abe279b15 100644 --- a/src/ACadSharp/Objects/MultiLeaderObjectContextData.LeaderLine.cs +++ b/src/ACadSharp/Objects/MultiLeaderObjectContextData.LeaderLine.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using ACadSharp.Attributes; using ACadSharp.Tables; using CSMath; diff --git a/src/ACadSharp/Objects/OrdinateDimensionObjectContextData.cs b/src/ACadSharp/Objects/OrdinateDimensionObjectContextData.cs new file mode 100644 index 000000000..cef9a6a98 --- /dev/null +++ b/src/ACadSharp/Objects/OrdinateDimensionObjectContextData.cs @@ -0,0 +1,30 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of an ordinate dimension. +/// +[DxfName(DxfFileToken.OrdinateDimensionObjectContextData)] +[DxfSubClass(DxfSubclassMarker.OrdinateDimensionObjectContextData)] +public class OrdinateDimensionObjectContextData : DimensionObjectContextData +{ + /// + /// Definition point. + /// + [DxfCodeValue(11, 21, 31)] + public XYZ DefinitionPoint { get; set; } + + /// + /// End point of the leader. + /// + [DxfCodeValue(12, 22, 32)] + public XYZ LeaderEndpoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.OrdinateDimensionObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.OrdinateDimensionObjectContextData; +} diff --git a/src/ACadSharp/Objects/ProxyObject.cs b/src/ACadSharp/Objects/ProxyObject.cs index a0beef042..ce26d8079 100644 --- a/src/ACadSharp/Objects/ProxyObject.cs +++ b/src/ACadSharp/Objects/ProxyObject.cs @@ -53,6 +53,7 @@ public class ProxyObject : NonGraphicalObject, IProxy [DxfCodeValue(310)] public Stream BinaryData { get; set; } + /// [DxfCodeValue(311)] public Stream Data { get; set; } diff --git a/src/ACadSharp/Objects/RadialDimensionLargeObjectContextData.cs b/src/ACadSharp/Objects/RadialDimensionLargeObjectContextData.cs new file mode 100644 index 000000000..147811e76 --- /dev/null +++ b/src/ACadSharp/Objects/RadialDimensionLargeObjectContextData.cs @@ -0,0 +1,30 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of a jogged radial dimension. +/// +[DxfName(DxfFileToken.RadialDimensionLargeObjectContextData)] +[DxfSubClass(DxfSubclassMarker.RadialDimensionLargeObjectContextData)] +public class RadialDimensionLargeObjectContextData : RadialDimensionObjectContextData +{ + /// + /// Override center point. + /// + [DxfCodeValue(12, 22, 32)] + public XYZ OverrideCenter { get; set; } + + /// + /// Jog point. + /// + [DxfCodeValue(13, 23, 33)] + public XYZ JogPoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.RadialDimensionLargeObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.RadialDimensionLargeObjectContextData; +} diff --git a/src/ACadSharp/Objects/RadialDimensionObjectContextData.cs b/src/ACadSharp/Objects/RadialDimensionObjectContextData.cs new file mode 100644 index 000000000..467f865b5 --- /dev/null +++ b/src/ACadSharp/Objects/RadialDimensionObjectContextData.cs @@ -0,0 +1,24 @@ +using ACadSharp.Attributes; +using CSMath; + +namespace ACadSharp.Objects; + +/// +/// Annotation scale representation of a radial dimension. +/// +[DxfName(DxfFileToken.RadialDimensionObjectContextData)] +[DxfSubClass(DxfSubclassMarker.RadialDimensionObjectContextData)] +public class RadialDimensionObjectContextData : DimensionObjectContextData +{ + /// + /// Point on the curve where the dimension line ends. + /// + [DxfCodeValue(11, 21, 31)] + public XYZ FirstArcPoint { get; set; } + + /// + public override string ObjectName => DxfFileToken.RadialDimensionObjectContextData; + + /// + public override string SubclassMarker => DxfSubclassMarker.RadialDimensionObjectContextData; +} diff --git a/src/ACadSharp/Objects/XRecrod.cs b/src/ACadSharp/Objects/XRecrod.cs index 5ad15721a..3d5901dd4 100644 --- a/src/ACadSharp/Objects/XRecrod.cs +++ b/src/ACadSharp/Objects/XRecrod.cs @@ -23,7 +23,9 @@ public partial class XRecord : NonGraphicalObject [DxfCodeValue(280)] public DictionaryCloningFlags CloningFlags { get; set; } - //1-369 (except 5 and 105) These values can be used by an application in any way + /// + /// Gets the collection of objects associated with this . + /// public IEnumerable Entries { get { return this._entries; } } /// @@ -74,8 +76,11 @@ public override CadObject Clone() /// /// The integer code that identifies the entry. The value should be unique within the collection. /// The value to associate with the entry. Can be any object, including . - public void CreateEntry(int code, object value) + /// The newly created object. + public Entry CreateEntry(int code, object value) { - this._entries.Add(new Entry(code, value, this)); + Entry entry = new Entry(code, value, this); + this._entries.Add(entry); + return entry; } } \ No newline at end of file diff --git a/src/ACadSharp/Prototype1b/DataStorage.cs b/src/ACadSharp/Prototype1b/DataStorage.cs index d086b1295..7133d68bf 100644 --- a/src/ACadSharp/Prototype1b/DataStorage.cs +++ b/src/ACadSharp/Prototype1b/DataStorage.cs @@ -1,10 +1,12 @@ using ACadSharp.Entities; using ACadSharp.Prototype1b.Segments; +using System; using System.Collections.Generic; using System.Linq; namespace ACadSharp.Prototype1b { + [Obsolete] public class DataStorage { /// diff --git a/src/ACadSharp/Prototype1b/Segments/DataField.cs b/src/ACadSharp/Prototype1b/Segments/DataField.cs index 2b24f3c70..b42df41da 100644 --- a/src/ACadSharp/Prototype1b/Segments/DataField.cs +++ b/src/ACadSharp/Prototype1b/Segments/DataField.cs @@ -1,11 +1,11 @@ -using ACadSharp.Prototype1b.Segments; -using System.Collections.Generic; +using System.Collections.Generic; -namespace ACadSharp.Prototype1b +namespace ACadSharp.Prototype1b.Segments { public class DataField : IPrototype1bSegment - { - public SegmentHeader Header { get; set; } - public List Entries { get; set; } - } -} + { + public List Entries { get; set; } + + public SegmentHeader Header { get; set; } + } +} \ No newline at end of file diff --git a/src/ACadSharp/SeqendCollection.cs b/src/ACadSharp/SeqendCollection.cs index 4412f0957..f175edd65 100644 --- a/src/ACadSharp/SeqendCollection.cs +++ b/src/ACadSharp/SeqendCollection.cs @@ -62,7 +62,11 @@ public override void Add(T item) /// public override bool Remove(T item) { - if(base.Remove(item)) + if (!base.Remove(item)) + return false; + + //The seqend only leaves with the last entry + if (!this._entries.Any()) { this.OnSeqendRemoved?.Invoke(this, new CollectionChangedEventArgs(this._seqend)); } diff --git a/src/ACadSharp/Tables/VPort.cs b/src/ACadSharp/Tables/VPort.cs index 657db3989..df3788680 100644 --- a/src/ACadSharp/Tables/VPort.cs +++ b/src/ACadSharp/Tables/VPort.cs @@ -75,7 +75,7 @@ public XYZ Direction get { return this._direction; } set { - this._direction = value.Normalize(); + this._direction = value; } }